]> CyberLeo.Net >> Repos - Github/YOURLS.git/blob - admin/index.php
Translation API! zomigod. First pass. See Issue 52.
[Github/YOURLS.git] / admin / index.php
1 <?php\r
2 define( 'YOURLS_ADMIN', true );\r
3 require_once( dirname( dirname( __FILE__ ) ).'/includes/load-yourls.php' );\r
4 yourls_maybe_require_auth();\r
5 \r
6 // Variables\r
7 $table_url = YOURLS_DB_TABLE_URL;\r
8 // Default SQL behavior\r
9 $where = $search_display = $search_text = $search_url = $url = $keyword = '';\r
10 $search_in_text = 'URL';\r
11 $search_in_sql = 'url';\r
12 $sort_by_text = 'Short URL';\r
13 $sort_by_sql = 'timestamp';\r
14 $sort_order_text = 'Descending Order';\r
15 $sort_order_sql = 'desc';\r
16 $page = ( isset( $_GET['page'] ) ? intval($_GET['page']) : 1 );\r
17 $search = ( isset( $_GET['s_search'] ) ? htmlspecialchars( trim($_GET['s_search']) ) : '' );\r
18 $perpage = ( isset( $_GET['perpage'] ) && intval( $_GET['perpage'] ) ? intval($_GET['perpage']) : 15 );\r
19 $link_limit = ( isset( $_GET['link_limit'] ) && !empty( $_GET['link_limit'] ) ) ? intval($_GET['link_limit']) : '' ;\r
20 if ( $link_limit !== '' ) {\r
21         $link_filter = ( isset( $_GET['link_filter'] ) && $_GET['link_filter'] == 'more' ? 'more' : 'less' ) ;\r
22         $link_moreless = ( $link_filter == 'more' ? '>' : '<' );\r
23         $where = " AND clicks $link_moreless $link_limit";\r
24 } else {\r
25         $link_filter = '';\r
26 }\r
27 $date_filter = 'before';\r
28 $date_first = $date_second = '';\r
29 $base_page = yourls_admin_url( 'index.php' );\r
30 \r
31 // Searching\r
32 if( !empty($search) && !empty($_GET['s_in']) ) {\r
33         switch($_GET['s_in']) {\r
34                 case 'keyword':\r
35                         $search_in_text = 'Short URL';\r
36                         $search_in_sql = 'keyword';\r
37                         break;\r
38                 case 'url':\r
39                         $search_in_text = 'URL';\r
40                         $search_in_sql = 'url';\r
41                         break;\r
42                 case 'title':\r
43                         $search_in_text = 'Title';\r
44                         $search_in_sql = 'title';\r
45                         break;\r
46                 case 'ip':\r
47                         $search_in_text = 'IP Address';\r
48                         $search_in_sql = 'ip';\r
49                         break;\r
50         }\r
51         $search_text = stripslashes($search);\r
52         $search_display = "Searching for <strong>$search_text</strong> in <strong>$search_in_text</strong>. ";\r
53         $search_url = "&amp;s_search=$search_text &amp;s_in=$search_in_sql";\r
54         $search = str_replace('*', '%', '*'.$search.'*');\r
55         $where .= " AND `$search_in_sql` LIKE ('$search')";\r
56 }\r
57 \r
58 // Time span\r
59 if( !empty($_GET['date_filter']) ) {\r
60         switch($_GET['date_filter']) {\r
61                 case 'before':\r
62                         $date_filter = 'before';\r
63                         if( yourls_sanitize_date( $_GET['date_first'] ) ) {\r
64                                 $date_first_sql = yourls_sanitize_date_for_sql( $_GET['date_first'] );\r
65                                 $where .= " AND `timestamp` < '$date_first_sql'";\r
66                                 $date_first = $_GET['date_first'];\r
67                         }\r
68                         break;\r
69                 case 'after':\r
70                         $date_filter = 'after';\r
71                         if( yourls_sanitize_date( $_GET['date_first'] ) ) {\r
72                                 $date_first_sql = yourls_sanitize_date_for_sql( $_GET['date_first'] );\r
73                                 $where .= " AND `timestamp` > '$date_first_sql'";\r
74                                 $date_first = $_GET['date_first'];\r
75                         }\r
76                         break;\r
77                 case 'between':\r
78                         $date_filter = 'between';\r
79                         if( yourls_sanitize_date( $_GET['date_first'] ) && yourls_sanitize_date( $_GET['date_second'] ) ) {\r
80                                 $date_first_sql = yourls_sanitize_date_for_sql( $_GET['date_first'] );\r
81                                 $date_second_sql = yourls_sanitize_date_for_sql( $_GET['date_second'] );\r
82                                 $where .= " AND `timestamp` BETWEEN '$date_first_sql' AND '$date_second_sql'";\r
83                                 $date_first = $_GET['date_first'];\r
84                                 $date_second = $_GET['date_second'];\r
85                         }\r
86                         break;\r
87         }\r
88 }\r
89 \r
90 // Sorting\r
91 if( !empty($_GET['s_by']) || !empty($_GET['s_order']) ) {\r
92         switch($_GET['s_by']) {\r
93                 case 'keyword':\r
94                         $sort_by_text = 'Short URL';\r
95                         $sort_by_sql = 'keyword';\r
96                         break;\r
97                 case 'url':\r
98                         $sort_by_text = 'URL';\r
99                         $sort_by_sql = 'url';\r
100                         break;\r
101                 case 'timestamp':\r
102                         $sort_by_text = 'Date';\r
103                         $sort_by_sql = 'timestamp';\r
104                         break;\r
105                 case 'ip':\r
106                         $sort_by_text = 'IP Address';\r
107                         $sort_by_sql = 'ip';\r
108                         break;\r
109                 case 'clicks':\r
110                         $sort_by_text = 'Clicks';\r
111                         $sort_by_sql = 'clicks';\r
112                         break;\r
113         }\r
114         switch($_GET['s_order']) {\r
115                 case 'asc':\r
116                         $sort_order_text = 'Ascending Order';\r
117                         $sort_order_sql = 'asc';\r
118                         break;\r
119                 case 'desc':\r
120                         $sort_order_text = 'Descending Order';\r
121                         $sort_order_sql = 'desc';\r
122                         break;\r
123         }\r
124 }\r
125 \r
126 // Get URLs Count for current filter, total links in DB & total clicks\r
127 list( $total_urls, $total_clicks ) = array_values( yourls_get_db_stats() );\r
128 if ( $where ) {\r
129         list( $total_items, $total_items_clicks ) = array_values( yourls_get_db_stats( $where ) );\r
130 } else {\r
131         $total_items = $total_urls;\r
132         $total_items_clicks = false;\r
133 }\r
134 \r
135 // This is a bookmarklet\r
136 if ( isset( $_GET['u'] ) ) {\r
137         $is_bookmark = true;\r
138         yourls_do_action( 'bookmarklet' );\r
139 \r
140         $url = yourls_sanitize_url( $_GET['u'] );\r
141         $keyword = ( isset( $_GET['k'] ) ? yourls_sanitize_keyword( $_GET['k'] ) : '' );\r
142         $title = ( isset( $_GET['t'] ) ? yourls_sanitize_title( $_GET['t'] ) : '' );\r
143         $return = yourls_add_new_link( $url, $keyword, $title );\r
144         \r
145         // If fails because keyword already exist, retry with no keyword\r
146         if ( isset( $return['status'] ) && $return['status'] == 'fail' && isset( $return['code'] ) && $return['code'] == 'error:keyword' ) {\r
147                 $msg = $return['message'];\r
148                 $return = yourls_add_new_link( $url, '', $ydb );\r
149                 $return['message'] .= ' ('.$msg.')';\r
150         }\r
151         \r
152         // Stop here if bookmarklet with a JSON callback function\r
153         if( isset( $_GET['jsonp'] ) && $_GET['jsonp'] == 'yourls' ) {\r
154                 $short = $return['shorturl'] ? $return['shorturl'] : '';\r
155                 $message = $return['message'];\r
156                 header('Content-type: application/json');\r
157                 echo yourls_apply_filter( 'bookmarklet_jsonp', "yourls_callback({'short_url':'$short','message':'$message'});" );\r
158                 \r
159                 die();\r
160         }\r
161 \r
162         $s_url = stripslashes( $url );\r
163         $where = " AND `url` LIKE '$s_url' ";\r
164         \r
165         $page = $total_pages = $perpage = 1;\r
166         $offset = 0;\r
167         \r
168         $text = ( isset( $_GET['s'] ) ? stripslashes( $_GET['s'] ) : '' );\r
169         \r
170 \r
171 // This is not a bookmarklet\r
172 } else {\r
173         $is_bookmark = false;\r
174         \r
175         // Checking $page, $offset, $perpage\r
176         if(empty($page) || $page == 0) { $page = 1; }\r
177         if(empty($offset)) { $offset = 0; }\r
178         if(empty($perpage) || $perpage == 0) { $perpage = 50; }\r
179 \r
180         // Determine $offset\r
181         $offset = ($page-1) * $perpage;\r
182 \r
183         // Determine Max Number Of Items To Display On Page\r
184         if(($offset + $perpage) > $total_items) { \r
185                 $max_on_page = $total_items; \r
186         } else { \r
187                 $max_on_page = ($offset + $perpage); \r
188         }\r
189 \r
190         // Determine Number Of Items To Display On Page\r
191         if (($offset + 1) > ($total_items)) { \r
192                 $display_on_page = $total_items; \r
193         } else { \r
194                 $display_on_page = ($offset + 1); \r
195         }\r
196 \r
197         // Determing Total Amount Of Pages\r
198         $total_pages = ceil($total_items / $perpage);\r
199 \r
200 }\r
201 \r
202 \r
203 // Begin output of the page\r
204 $context = ( $is_bookmark ? 'bookmark' : 'index' );\r
205 yourls_html_head( $context );\r
206 yourls_html_logo();\r
207 yourls_html_menu() ;\r
208 \r
209 yourls_do_action( 'admin_page_before_content' );\r
210 if ( !$is_bookmark ) { ?>\r
211         <p><?php echo $search_display; ?></p>\r
212         <p><?php printf(yourls__('Display <strong>%d</strong> to <strong class="increment">%d</strong> of <strong class="increment">%d</strong> URLs'), $display_on_page, $max_on_page, $total_items ); if( $total_items_clicks !== false ) echo ", " . yourls__('counting') . " <strong>$total_items_clicks</strong> " . yourls_plural(yourls__('click'), $total_items_clicks); ?>.</p>\r
213 <?php } ?>\r
214 <p><?php printf(yourls__('Overall, tracking <strong class="increment">%d</strong> links, <strong>%d</strong> clicks, and counting!'), number_format($total_urls), number_format($total_clicks) ); ?></p>\r
215 \r
216 <?php yourls_do_action( 'admin_page_before_form' ); ?>\r
217 \r
218 <?php yourls_html_addnew(); ?>\r
219 \r
220 <?php\r
221 // If bookmarklet, add message. Otherwise, hide hidden share box.\r
222 if ( !$is_bookmark ) {\r
223         yourls_share_box( '', '', '', '', '', '', true );\r
224 } else {\r
225         echo '<script type="text/javascript">$(document).ready(function(){\r
226                 feedback( "' . $return['message'] . '", "'. $return['status'] .'");\r
227                 init_clipboard();\r
228         });</script>';\r
229 }\r
230 \r
231 yourls_do_action( 'admin_page_before_table' );\r
232 \r
233 yourls_table_head();\r
234 \r
235 if ( !$is_bookmark ) {\r
236         $params = array(\r
237                 'search_text'    => $search_text,\r
238                 'search_in_sql'  => $search_in_sql,\r
239                 'sort_by_sql'    => $sort_by_sql,\r
240                 'sort_order_sql' => $sort_order_sql,\r
241                 'page'           => $page,\r
242                 'perpage'        => $perpage,\r
243                 'link_filter'    => $link_filter,\r
244                 'link_limit'     => $link_limit,\r
245                 'total_pages'    => $total_pages,\r
246                 'search_url'     => $search_url,\r
247                 'date_filter'    => $date_filter,\r
248                 'date_first'     => $date_first,\r
249                 'date_second'    => $date_second,\r
250         );\r
251         yourls_html_tfooter( $params );\r
252 }\r
253 \r
254 yourls_table_tbody_start();\r
255 \r
256 // Main Query\r
257 $where = yourls_apply_filter( 'admin_list_where', $where );\r
258 $url_results = $ydb->get_results("SELECT * FROM `$table_url` WHERE 1=1 $where ORDER BY `$sort_by_sql` $sort_order_sql LIMIT $offset, $perpage;");\r
259 $found_rows = false;\r
260 if( $url_results ) {\r
261         $found_rows = true;\r
262         foreach( $url_results as $url_result ) {\r
263                 $keyword = yourls_sanitize_string( $url_result->keyword );\r
264                 $timestamp = strtotime( $url_result->timestamp );\r
265                 $url = stripslashes( $url_result->url );\r
266                 $ip = $url_result->ip;\r
267                 $title = $url_result->title ? $url_result->title : '';\r
268                 $clicks = $url_result->clicks;\r
269 \r
270                 echo yourls_table_add_row( $keyword, $url, $title, $ip, $clicks, $timestamp );\r
271         }\r
272 }\r
273 \r
274 $display = $found_rows ? 'display:none' : '';\r
275 echo '<tr id="nourl_found" style="'.$display.'"><td colspan="6">' . yourls__('No URL') . '</td></tr>';\r
276 \r
277 yourls_table_tbody_end();\r
278 \r
279 yourls_table_end();\r
280 \r
281 yourls_do_action( 'admin_page_after_table' );\r
282 \r
283 if ( $is_bookmark )\r
284         yourls_share_box( $url, $return['shorturl'], $title, $text );\r
285 ?>\r
286         \r
287 <?php yourls_html_footer( ); ?>