summaryrefslogtreecommitdiffstats
path: root/wp-includes/bookmark-template.php
blob: 1e762e063d1ec0520ecfcdca6e9db552620030d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
<?php

/** function wp_get_links()
 ** Gets the links associated with category n.
 ** Parameters:
 **   category (no default)  - The category to use.
 ** or:
 **   a query string
 **/
function wp_get_links($args = '') {
	global $wpdb;

	if ( empty($args) )
		return;

	if ( false === strpos($args, '=') ) {
		$cat_id = $args;
		$args = add_query_arg('category', $cat_id, $args);
	}

	parse_str($args);

	if (! isset($category))	$category = -1;
	if (! isset($before)) $before = '';
	if (! isset($after)) $after = '<br />';
	if (! isset($between))	$between = ' ';
	if (! isset($show_images)) $show_images = true;
	if (! isset($orderby)) $orderby = 'name';
	if (! isset($show_description)) $show_description = true;
	if (! isset($show_rating)) $show_rating = false;
	if (! isset($limit)) $limit = -1;
	if (! isset($show_updated)) $show_updated = 1;
	if (! isset($echo)) $echo = true;

	return get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated, $echo);
} // end wp_get_links

/** function get_links()
 ** Gets the links associated with category n.
 ** Parameters:
 **   category (default -1)  - The category to use. If no category supplied
 **      uses all
 **   before (default '')  - the html to output before the link
 **   after (default '<br />')  - the html to output after the link
 **   between (default ' ')  - the html to output between the link/image
 **     and its description. Not used if no image or show_images == true
 **   show_images (default true) - whether to show images (if defined).
 **   orderby (default 'id') - the order to output the links. E.g. 'id', 'name',
 **     'url', 'description', or 'rating'. Or maybe owner. If you start the
 **     name with an underscore the order will be reversed.
 **     You can also specify 'rand' as the order which will return links in a
 **     random order.
 **   show_description (default true) - whether to show the description if
 **    show_images=false/not defined .
 **   show_rating (default false) - show rating stars/chars
 **   limit (default -1) - Limit to X entries. If not specified, all entries
 **     are shown.
 **   show_updated (default 0) - whether to show last updated timestamp
 **   echo (default true) - whether to echo the results, or return them instead
 */
function get_links($category = -1,
			$before = '',
			$after = '<br />',
			$between = ' ',
			$show_images = true,
			$orderby = 'name',
			$show_description = true,
			$show_rating = false,
			$limit = -1,
			$show_updated = 1,
			$echo = true) {

	global $wpdb;

	$order = 'ASC';
	if (substr($orderby, 0, 1) == '_') {
		$order = 'DESC';
		$orderby = substr($orderby, 1);
	}
	
	if ($category == -1) {  //get_bookmarks uses '' to signify all categories
		$category = '';
	}

	$results = get_bookmarks("category=$category&orderby=$orderby&order=$order&show_updated=$show_updated&limit=$limit");

	if (!$results) {
		return;
	}


	$output = '';

	foreach ($results as $row) {
		if (!isset($row->recently_updated)) $row->recently_updated = false;
			$output .= $before;
		if ($show_updated && $row->recently_updated) {
			$output .= get_settings('links_recently_updated_prepend');
		}

		$the_link = '#';
		if (!empty($row->link_url))
			$the_link = wp_specialchars($row->link_url);

		$rel = $row->link_rel;
		if ($rel != '') {
			$rel = ' rel="' . $rel . '"';
		}

		$desc = wp_specialchars($row->link_description, ENT_QUOTES);
		$name = wp_specialchars($row->link_name, ENT_QUOTES);
		$title = $desc;

		if ($show_updated) {
			if (substr($row->link_updated_f, 0, 2) != '00') {
				$title .= ' (Last updated ' . date(get_settings('links_updated_date_format'), $row->link_updated_f + (get_settings('gmt_offset') * 3600)) . ')';
			}
		}

		if ('' != $title) {
			$title = ' title="' . $title . '"';
		}

		$alt = ' alt="' . $name . '"';

		$target = $row->link_target;
		if ('' != $target) {
			$target = ' target="' . $target . '"';
		}

		$output .= '<a href="' . $the_link . '"' . $rel . $title . $target. '>';

		if (($row->link_image != null) && $show_images) {
			if (strstr($row->link_image, 'http'))
				$output .= "<img src=\"$row->link_image\" $alt $title />";
			else // If it's a relative path
				$output .= "<img src=\"" . get_settings('siteurl') . "$row->link_image\" $alt $title />";
		} else {
			$output .= $name;
		}

		$output .= '</a>';

		if ($show_updated && $row->recently_updated) {
			$output .= get_settings('links_recently_updated_append');
		}

		if ($show_description && ($desc != '')) {
			$output .= $between . $desc;
		}
		$output .= "$after\n";
	} // end while

	if ($echo) {
		echo $output;
	} else {
		return $output;
	}
}

function get_linkrating($link) {
    return apply_filters('link_rating', $link->link_rating);
}

/** function get_linkcatname()
 ** Gets the name of category n.
 ** Parameters: id (default 0)  - The category to get. If no category supplied
 **                uses 0
 */
function get_linkcatname($id = 0) {
	$id = (int) $id;

    if ( empty($id) )
    	return '';
  
	$cats = wp_get_link_cats($id);

	if ( empty($cats) || ! is_array($cats) )
		return '';

	$cat_id = $cats[0]; // Take the first cat.

	$cat = get_category($cat_id);
	return $cat->cat_name;
}

/** function links_popup_script()
 ** This function contributed by Fullo -- http://sprite.csr.unibo.it/fullo/
 ** Show the link to the links popup and the number of links
 ** Parameters:
 **   text (default Links)  - the text of the link
 **   width (default 400)  - the width of the popup window
 **   height (default 400)  - the height of the popup window
 **   file (default linkspopup.php) - the page to open in the popup window
 **   count (default true) - the number of links in the db
 */
function links_popup_script($text = 'Links', $width=400, $height=400,
                            $file='links.all.php', $count = true) {
   if ($count == true) {
      $counts = $wpdb->get_var("SELECT count(*) FROM $wpdb->links");
   }

   $javascript = "<a href=\"#\" " .
                 " onclick=\"javascript:window.open('$file?popup=1', '_blank', " .
                 "'width=$width,height=$height,scrollbars=yes,status=no'); " .
                 " return false\">";
   $javascript .= $text;

   if ($count == true) {
      $javascript .= " ($counts)";
   }

   $javascript .="</a>\n\n";
   echo $javascript;
}


/*
 * function get_links_list()
 *
 * added by Dougal
 *
 * Output a list of all links, listed by category, using the
 * settings in $wpdb->linkcategories and output it as a nested
 * HTML unordered list.
 *
 * Parameters:
 *   order (default 'name')  - Sort link categories by 'name' or 'id'
 *   hide_if_empty (default true)  - Supress listing empty link categories
 */
function get_links_list($order = 'name', $hide_if_empty = 'obsolete') {
	$order = strtolower($order);

	// Handle link category sorting
	$direction = 'ASC';
	if (substr($order,0,1) == '_') {
		$direction = 'DESC';
		$order = substr($order,1);
	}

	if (!isset($direction)) $direction = '';

	$cats = get_categories("type=link&orderby=$order&order=$direction&hierarchical=0");

	// Display each category
	if ($cats) {
		foreach ($cats as $cat) {
			// Handle each category.

			// Display the category name
			echo '	<li id="linkcat-' . $cat->cat_ID . '"><h2>' . $cat->cat_name . "</h2>\n\t<ul>\n";
			// Call get_links() with all the appropriate params
			get_links($cat->cat_ID,
				'<li>',"</li>","\n", true, 'name', false);

			// Close the last category
			echo "\n\t</ul>\n</li>\n";
		}
	}
}

function _walk_bookmarks($bookmarks, $args = '' ) {
	if ( is_array($args) )
		$r = &$args;
	else
		parse_str($args, $r);

	$defaults = array('show_updated' => 0, 'show_description' => 0, 'show_images' => 0, 'before' => '<li>',
		'after' => '</li>', 'between' => "\n");
	$r = array_merge($defaults, $r);
	extract($r);

	foreach ( (array) $bookmarks as $bookmark ) {
		if (!isset($bookmark->recently_updated)) $bookmark->recently_updated = false;
			$output .= $before;
		if ($show_updated && $bookmark->recently_updated) {
			$output .= get_settings('links_recently_updated_prepend');
		}

		$the_link = '#';
		if (!empty($bookmark->link_url))
			$the_link = wp_specialchars($bookmark->link_url);

		$rel = $bookmark->link_rel;
		if ($rel != '') {
			$rel = ' rel="' . $rel . '"';
		}

		$desc = wp_specialchars($bookmark->link_description, ENT_QUOTES);
		$name = wp_specialchars($bookmark->link_name, ENT_QUOTES);
		$title = $desc;

		if ($show_updated) {
			if (substr($bookmark->link_updated_f, 0, 2) != '00') {
				$title .= ' (Last updated ' . date(get_settings('links_updated_date_format'), $bookmark->link_updated_f + (get_settings('gmt_offset') * 3600)) . ')';
			}
		}

		if ('' != $title) {
			$title = ' title="' . $title . '"';
		}

		$alt = ' alt="' . $name . '"';

		$target = $bookmark->link_target;
		if ('' != $target) {
			$target = ' target="' . $target . '"';
		}

		$output .= '<a href="' . $the_link . '"' . $rel . $title . $target. '>';

		if (($bookmark->link_image != null) && $show_images) {
			if (strstr($bookmark->link_image, 'http'))
				$output .= "<img src=\"$bookmark->link_image\" $alt $title />";
			else // If it's a relative path
				$output .= "<img src=\"" . get_settings('siteurl') . "$bookmark->link_image\" $alt $title />";
		} else {
			$output .= $name;
		}

		$output .= '</a>';

		if ($show_updated && $bookmark->recently_updated) {
			$output .= get_settings('links_recently_updated_append');
		}

		if ($show_description && ($desc != '')) {
			$output .= $between . $desc;
		}
		$output .= "$after\n";
	} // end while

	return $output;
}

function wp_list_bookmarks($args = '') {
	if ( is_array($args) )
		$r = &$args;
	else
		parse_str($args, $r);

	$defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => 0,
		'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'echo' => 1,
		'categorize' => 1, 'title_li' => __('Bookmarks'), 'title_before' => '<h2>', 'title_after' => '</h2>',
		'category_orderby' => 'name', 'category_order' => 'ASC');
	$r = array_merge($defaults, $r);
	extract($r);
	
	// TODO: The rest of it.
	// If $categorize, group links by category with the category name being the
	// title of each li, otherwise just list them with title_li as the li title. 
	// If $categorize and $category or $category_name, list links for the given category
	// with the category name as the title li.  If not $categorize, use title_li.
	// When using each category's name as a title li, use before and after args for specifying
	// any markup.  We don't want to hardcode h2.

	$output = '';

	if ( $categorize ) {
		$cats = get_categories("type=link&orderby=$category_orderby&order=$category_order&hierarchical=0");
		foreach ( (array) $cats as $cat ) {
			$r['category'] = $cat->cat_ID;
			$bookmarks = get_bookmarks($r);
			if ( empty($bookmarks) )
				continue;
			$output .= "<li id=\"linkcat-$cat->cat_ID\">$title_before$cat->cat_name$title_after\n\t<ul>\n";
			$output .= _walk_bookmarks($bookmarks, $r);
			$output .= "\n\t</ul>\n</li>\n";
		}
	}

	if ($echo)
		echo $output;

	return $output;
}

?>