]> CyberLeo.Net >> Repos - Github/YOURLS.git/blob - admin/index.php
Improved: all admin URLs handled by function yourls_admin_url(), which allows SSL...
[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'] ) ? mysql_real_escape_string(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'] ) ? 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 $base_page = yourls_admin_url( 'index.php' );\r
28 \r
29 // Searching\r
30 if(!empty($search) && !empty($_GET['s_in'])) {\r
31         switch($_GET['s_in']) {\r
32                 case 'keyword':\r
33                         $search_in_text = 'Short URL';\r
34                         $search_in_sql = 'keyword';\r
35                         break;\r
36                 case 'url':\r
37                         $search_in_text = 'URL';\r
38                         $search_in_sql = 'url';\r
39                         break;\r
40                 case 'ip':\r
41                         $search_in_text = 'IP Address';\r
42                         $search_in_sql = 'ip';\r
43                         break;\r
44         }\r
45         $search_text = stripslashes($search);\r
46         $search_display = "Searching for <strong>$search_text</strong> in <strong>$search_in_text</strong>. ";\r
47         $search_url = "&amp;s_search=$search_text &amp;s_in=$search_in_sql";\r
48         $search = str_replace('*', '%', '*'.$search.'*');\r
49         $where .= " AND $search_in_sql LIKE ('$search')";\r
50 }\r
51 \r
52 // Sorting\r
53 if(!empty($_GET['s_by']) || !empty($_GET['s_order'])) {\r
54         switch($_GET['s_by']) {\r
55                 case 'keyword':\r
56                         $sort_by_text = 'Short URL';\r
57                         $sort_by_sql = 'keyword';\r
58                         break;\r
59                 case 'url':\r
60                         $sort_by_text = 'URL';\r
61                         $sort_by_sql = 'url';\r
62                         break;\r
63                 case 'timestamp':\r
64                         $sort_by_text = 'Date';\r
65                         $sort_by_sql = 'timestamp';\r
66                         break;\r
67                 case 'ip':\r
68                         $sort_by_text = 'IP Address';\r
69                         $sort_by_sql = 'ip';\r
70                         break;\r
71                 case 'clicks':\r
72                         $sort_by_text = 'Clicks';\r
73                         $sort_by_sql = 'clicks';\r
74                         break;\r
75         }\r
76         switch($_GET['s_order']) {\r
77                 case 'asc':\r
78                         $sort_order_text = 'Ascending Order';\r
79                         $sort_order_sql = 'asc';\r
80                         break;\r
81                 case 'desc':\r
82                         $sort_order_text = 'Descending Order';\r
83                         $sort_order_sql = 'desc';\r
84                         break;\r
85         }\r
86 }\r
87 \r
88 // Get URLs Count for current filter, total links in DB & total clicks\r
89 list( $total_urls, $total_clicks ) = array_values( yourls_get_db_stats() );\r
90 if ( $where ) {\r
91         list( $total_items, $total_items_clicks ) = array_values( yourls_get_db_stats( $where ) );\r
92 } else {\r
93         $total_items = $total_urls;\r
94         $total_items_clicks = false;\r
95 }\r
96 \r
97 // This is a bookmarklet\r
98 if ( isset( $_GET['u'] ) ) {\r
99         $is_bookmark = true;\r
100 \r
101         $url = $_GET['u'];\r
102         $keyword = ( isset( $_GET['k'] ) ? $_GET['k'] : '' );\r
103         $return = yourls_add_new_link( $url, $keyword );\r
104         \r
105         // If fails because keyword already exist, retry with no keyword\r
106         if ( isset( $return['status'] ) && $return['status'] == 'fail' && isset( $return['code'] ) && $return['code'] == 'error:keyword' ) {\r
107                 $msg = $return['message'];\r
108                 $return = yourls_add_new_link( $url, '', $ydb );\r
109                 $return['message'] .= ' ('.$msg.')';\r
110         }\r
111         \r
112         $s_url = stripslashes( $url );\r
113         $where = " AND url LIKE '$s_url' ";\r
114         \r
115         $page = $total_pages = $perpage = 1;\r
116         $offset = 0;\r
117         \r
118         $text = ( isset( $_GET['s'] ) ? stripslashes( $_GET['s'] ) : '' );\r
119         $title = ( isset( $_GET['t'] ) ? stripslashes( $_GET['t'] ) : '' );\r
120 \r
121 // This is not a bookmarklet\r
122 } else {\r
123         $is_bookmark = false;\r
124         \r
125         // Checking $page, $offset, $perpage\r
126         if(empty($page) || $page == 0) { $page = 1; }\r
127         if(empty($offset)) { $offset = 0; }\r
128         if(empty($perpage) || $perpage == 0) { $perpage = 50; }\r
129 \r
130         // Determine $offset\r
131         $offset = ($page-1) * $perpage;\r
132 \r
133         // Determine Max Number Of Items To Display On Page\r
134         if(($offset + $perpage) > $total_items) { \r
135                 $max_on_page = $total_items; \r
136         } else { \r
137                 $max_on_page = ($offset + $perpage); \r
138         }\r
139 \r
140         // Determine Number Of Items To Display On Page\r
141         if (($offset + 1) > ($total_items)) { \r
142                 $display_on_page = $total_items; \r
143         } else { \r
144                 $display_on_page = ($offset + 1); \r
145         }\r
146 \r
147         // Determing Total Amount Of Pages\r
148         $total_pages = ceil($total_items / $perpage);\r
149 \r
150 }\r
151 \r
152 \r
153 // Begin output of the page\r
154 $context = ( $is_bookmark ? 'bookmark' : 'index' );\r
155 yourls_html_head( $context );\r
156 yourls_html_logo();\r
157 yourls_html_menu() ;\r
158 ?>\r
159         <?php if ( !$is_bookmark ) { ?>\r
160         <p><?php echo $search_display; ?></p>\r
161         <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
162         <?php } ?>\r
163         <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
164 \r
165         <?php yourls_html_addnew(); ?>\r
166         \r
167         <?php if ( $is_bookmark ) {\r
168                 echo '<h2 class="bookmark_result">' . $return['message'] . '</h2>';\r
169         \r
170         } ?>\r
171         \r
172         <table id="tblUrl" class="tblSorter" cellpadding="0" cellspacing="1">\r
173                 <thead>\r
174                         <tr>\r
175                                 <th>Short URL&nbsp;</th>\r
176                                 <th>Original URL</th>\r
177                                 <th>Date</th>\r
178                                 <th>IP</th>\r
179                                 <th>Clicks&nbsp;&nbsp;</th>\r
180                                 <th>Actions</th>\r
181                         </tr>\r
182                 </thead>\r
183 \r
184                 <?php\r
185                 if ( !$is_bookmark ) {\r
186                         $params = array(\r
187                                 'search_text'    => $search_text,\r
188                                 'search_in_sql'  => $search_in_sql,\r
189                                 'sort_by_sql'    => $sort_by_sql,\r
190                                 'sort_order_sql' => $sort_order_sql,\r
191                                 'page'           => $page,\r
192                                 'perpage'        => $perpage,\r
193                                 'link_filter'    => $link_filter,\r
194                                 'link_limit'     => $link_limit,\r
195                                 'total_pages'    => $total_pages,\r
196                                 'base_page'      => $base_page,\r
197                                 'search_url'     => $search_url,\r
198                         );\r
199                         yourls_html_tfooter( $params );\r
200                 }\r
201                 ?>\r
202 \r
203                 <tbody>\r
204                         <?php\r
205                         // Main Query\r
206                         $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
207                         if( $url_results ) {\r
208                                 foreach( $url_results as $url_result ) {\r
209                                         $keyword = yourls_sanitize_string($url_result->keyword);\r
210                                         $timestamp = strtotime($url_result->timestamp);\r
211                                         $url = stripslashes($url_result->url);\r
212                                         $ip = $url_result->ip;\r
213                                         $clicks = $url_result->clicks;\r
214 \r
215                                         echo yourls_table_add_row( $keyword, $url, $ip, $clicks, $timestamp );\r
216                                 }\r
217                         } else {\r
218                                 echo '<tr class="nourl_found"><td colspan="6">No URL Found</td></tr>';\r
219                         }\r
220                         ?>\r
221                 </tbody>\r
222         </table>\r
223         \r
224         <?php if ( $is_bookmark )\r
225                 yourls_share_box( $url, $return['shorturl'], $title, $text );\r
226         ?>\r
227         \r
228 <?php yourls_html_footer( ); ?>