2 define( 'YOURLS_ADMIN', true );
\r
3 require_once( dirname( dirname( __FILE__ ) ).'/includes/load-yourls.php' );
\r
4 yourls_maybe_require_auth();
\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
27 $date_filter = 'before';
\r
28 $date_first = $date_second = '';
\r
29 $base_page = yourls_admin_url( 'index.php' );
\r
32 if( !empty($search) && !empty($_GET['s_in']) ) {
\r
33 switch($_GET['s_in']) {
\r
35 $search_in_text = 'Short URL';
\r
36 $search_in_sql = 'keyword';
\r
39 $search_in_text = 'URL';
\r
40 $search_in_sql = 'url';
\r
43 $search_in_text = 'Title';
\r
44 $search_in_sql = 'title';
\r
47 $search_in_text = 'IP Address';
\r
48 $search_in_sql = 'ip';
\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 = "&s_search=$search_text &s_in=$search_in_sql";
\r
54 $search = str_replace('*', '%', '*'.$search.'*');
\r
55 $where .= " AND `$search_in_sql` LIKE ('$search')";
\r
59 if( !empty($_GET['date_filter']) ) {
\r
60 switch($_GET['date_filter']) {
\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
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
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
91 if( !empty($_GET['s_by']) || !empty($_GET['s_order']) ) {
\r
92 switch($_GET['s_by']) {
\r
94 $sort_by_text = 'Short URL';
\r
95 $sort_by_sql = 'keyword';
\r
98 $sort_by_text = 'URL';
\r
99 $sort_by_sql = 'url';
\r
102 $sort_by_text = 'Date';
\r
103 $sort_by_sql = 'timestamp';
\r
106 $sort_by_text = 'IP Address';
\r
107 $sort_by_sql = 'ip';
\r
110 $sort_by_text = 'Clicks';
\r
111 $sort_by_sql = 'clicks';
\r
114 switch($_GET['s_order']) {
\r
116 $sort_order_text = 'Ascending Order';
\r
117 $sort_order_sql = 'asc';
\r
120 $sort_order_text = 'Descending Order';
\r
121 $sort_order_sql = 'desc';
\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
129 list( $total_items, $total_items_clicks ) = array_values( yourls_get_db_stats( $where ) );
\r
131 $total_items = $total_urls;
\r
132 $total_items_clicks = false;
\r
135 // This is a bookmarklet
\r
136 if ( isset( $_GET['u'] ) ) {
\r
137 $is_bookmark = true;
\r
138 yourls_do_action( 'bookmarklet' );
\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
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
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
162 $s_url = stripslashes( $url );
\r
163 $where = " AND `url` LIKE '$s_url' ";
\r
165 $page = $total_pages = $perpage = 1;
\r
168 $text = ( isset( $_GET['s'] ) ? stripslashes( $_GET['s'] ) : '' );
\r
171 // This is not a bookmarklet
\r
173 $is_bookmark = false;
\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
180 // Determine $offset
\r
181 $offset = ($page-1) * $perpage;
\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
187 $max_on_page = ($offset + $perpage);
\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
194 $display_on_page = ($offset + 1);
\r
197 // Determing Total Amount Of Pages
\r
198 $total_pages = ceil($total_items / $perpage);
\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
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
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
216 <?php yourls_do_action( 'admin_page_before_form' ); ?>
\r
218 <?php yourls_html_addnew(); ?>
\r
221 // If bookmarklet, add message. Otherwise, hide hidden share box.
\r
222 if ( !$is_bookmark ) {
\r
223 yourls_share_box( '', '', '', '', '', '', true );
\r
225 echo '<script type="text/javascript">$(document).ready(function(){
\r
226 feedback( "' . $return['message'] . '", "'. $return['status'] .'");
\r
231 yourls_do_action( 'admin_page_before_table' );
\r
233 yourls_table_head();
\r
235 if ( !$is_bookmark ) {
\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
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
251 yourls_html_tfooter( $params );
\r
254 yourls_table_tbody_start();
\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
270 echo yourls_table_add_row( $keyword, $url, $title, $ip, $clicks, $timestamp );
\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
277 yourls_table_tbody_end();
\r
279 yourls_table_end();
\r
281 yourls_do_action( 'admin_page_after_table' );
\r
283 if ( $is_bookmark )
\r
284 yourls_share_box( $url, $return['shorturl'], $title, $text );
\r
287 <?php yourls_html_footer( ); ?>