]> CyberLeo.Net >> Repos - Github/YOURLS.git/blob - admin/index.php
Simpler nonce verification
[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 \r
139         $url = yourls_sanitize_url( $_GET['u'] );\r
140         $keyword = ( isset( $_GET['k'] ) ? yourls_sanitize_keyword( $_GET['k'] ) : '' );\r
141         $title = ( isset( $_GET['t'] ) ? yourls_sanitize_title( $_GET['t'] ) : '' );\r
142         $return = yourls_add_new_link( $url, $keyword, $title );\r
143         \r
144         // If fails because keyword already exist, retry with no keyword\r
145         if ( isset( $return['status'] ) && $return['status'] == 'fail' && isset( $return['code'] ) && $return['code'] == 'error:keyword' ) {\r
146                 $msg = $return['message'];\r
147                 $return = yourls_add_new_link( $url, '', $ydb );\r
148                 $return['message'] .= ' ('.$msg.')';\r
149         }\r
150         \r
151         // Stop here if bookmarklet with a JSON callback function\r
152         if( isset( $_GET['jsonp'] ) && $_GET['jsonp'] == 'yourls' ) {\r
153                 $short = $return['shorturl'] ? $return['shorturl'] : '';\r
154                 $message = $return['message'];\r
155                 header('Content-type: application/json');\r
156                 echo "yourls_callback({'short_url':'$short','message':'$message'});";\r
157                 \r
158                 die();\r
159         }\r
160 \r
161         $s_url = stripslashes( $url );\r
162         $where = " AND `url` LIKE '$s_url' ";\r
163         \r
164         $page = $total_pages = $perpage = 1;\r
165         $offset = 0;\r
166         \r
167         $text = ( isset( $_GET['s'] ) ? stripslashes( $_GET['s'] ) : '' );\r
168         \r
169 \r
170 // This is not a bookmarklet\r
171 } else {\r
172         $is_bookmark = false;\r
173         \r
174         // Checking $page, $offset, $perpage\r
175         if(empty($page) || $page == 0) { $page = 1; }\r
176         if(empty($offset)) { $offset = 0; }\r
177         if(empty($perpage) || $perpage == 0) { $perpage = 50; }\r
178 \r
179         // Determine $offset\r
180         $offset = ($page-1) * $perpage;\r
181 \r
182         // Determine Max Number Of Items To Display On Page\r
183         if(($offset + $perpage) > $total_items) { \r
184                 $max_on_page = $total_items; \r
185         } else { \r
186                 $max_on_page = ($offset + $perpage); \r
187         }\r
188 \r
189         // Determine Number Of Items To Display On Page\r
190         if (($offset + 1) > ($total_items)) { \r
191                 $display_on_page = $total_items; \r
192         } else { \r
193                 $display_on_page = ($offset + 1); \r
194         }\r
195 \r
196         // Determing Total Amount Of Pages\r
197         $total_pages = ceil($total_items / $perpage);\r
198 \r
199 }\r
200 \r
201 \r
202 // Begin output of the page\r
203 $context = ( $is_bookmark ? 'bookmark' : 'index' );\r
204 yourls_html_head( $context );\r
205 yourls_html_logo();\r
206 yourls_html_menu() ;\r
207 ?>\r
208         <?php if ( !$is_bookmark ) { ?>\r
209         <p><?php echo $search_display; ?></p>\r
210         <p>Display <strong><?php echo $display_on_page; ?></strong> to <strong class='increment'><?php echo $max_on_page; ?></strong> of <strong class='increment'><?php echo $total_items; ?></strong> URLs<?php if( $total_items_clicks !== false ) echo ", counting <strong>$total_items_clicks</strong> " . yourls_plural('click', $total_items_clicks) ?>.</p>\r
211         <?php } ?>\r
212         <p>Overall, tracking <strong class='increment'><?php echo number_format($total_urls); ?></strong> links, <strong><?php echo number_format($total_clicks); ?></strong> clicks, and counting!</p>\r
213 \r
214         <?php yourls_html_addnew(); ?>\r
215         \r
216         <?php\r
217         // If bookmarklet, add message. Otherwise, hide hidden share box.\r
218         if ( !$is_bookmark ) {\r
219                 yourls_share_box( '', '', '', '', '<h2>Your short link</h2>', '<h2>Quick Share</h2>', true );\r
220         } else {\r
221                 echo '<script type="text/javascript">$(document).ready(function(){ feedback( "' . $return['message'] . '", "'. $return['status'] .'") });</script>';\r
222         }\r
223         ?>\r
224         \r
225         <table id="main_table" class="tblSorter" cellpadding="0" cellspacing="1">\r
226                 <thead>\r
227                         <tr>\r
228                                 <th>Short URL&nbsp;</th>\r
229                                 <th>Original URL</th>\r
230                                 <th>Date</th>\r
231                                 <th>IP</th>\r
232                                 <th>Clicks&nbsp;&nbsp;</th>\r
233                                 <th>Actions</th>\r
234                         </tr>\r
235                 </thead>\r
236 \r
237                 <?php\r
238                 if ( !$is_bookmark ) {\r
239                         $params = array(\r
240                                 'search_text'    => $search_text,\r
241                                 'search_in_sql'  => $search_in_sql,\r
242                                 'sort_by_sql'    => $sort_by_sql,\r
243                                 'sort_order_sql' => $sort_order_sql,\r
244                                 'page'           => $page,\r
245                                 'perpage'        => $perpage,\r
246                                 'link_filter'    => $link_filter,\r
247                                 'link_limit'     => $link_limit,\r
248                                 'total_pages'    => $total_pages,\r
249                                 'base_page'      => $base_page,\r
250                                 'search_url'     => $search_url,\r
251                                 'date_filter'    => $date_filter,\r
252                                 'date_first'     => $date_first,\r
253                                 'date_second'    => $date_second,\r
254                         );\r
255                         yourls_html_tfooter( $params );\r
256                 }\r
257                 ?>\r
258 \r
259                 <tbody>\r
260                         <?php\r
261                         // Main Query\r
262                         $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
263                         $found_rows = false;\r
264                         if( $url_results ) {\r
265                                 $found_rows = true;\r
266                                 foreach( $url_results as $url_result ) {\r
267                                         $keyword = yourls_sanitize_string( $url_result->keyword );\r
268                                         $timestamp = strtotime( $url_result->timestamp );\r
269                                         $url = stripslashes( $url_result->url );\r
270                                         $ip = $url_result->ip;\r
271                                         $title = $url_result->title ? $url_result->title : '';\r
272                                         $clicks = $url_result->clicks;\r
273 \r
274                                         echo yourls_table_add_row( $keyword, $url, $title, $ip, $clicks, $timestamp );\r
275                                 }\r
276                         }\r
277                         \r
278                         $display = $found_rows ? 'display:none' : '';\r
279                         echo '<tr id="nourl_found" style="'.$display.'"><td colspan="6">No URL</td></tr>';\r
280 \r
281                         ?>\r
282                 </tbody>\r
283         </table>\r
284         \r
285         <?php if ( $is_bookmark )\r
286                 yourls_share_box( $url, $return['shorturl'], $title, $text );\r
287         ?>\r
288         \r
289 <?php yourls_html_footer( ); ?>