PluginProbe
Name Directory / 1.9.5
Name Directory v1.9.5
1.34.1 1.34.0 trunk 1.10 1.11 1.11.1 1.11.2 1.11.3 1.11.4 1.11.5 1.11.6 1.12 1.13 1.13.1 1.13.2 1.13.3 1.13.4 1.13.5 1.13.6 1.13.7 1.14 1.14.1 1.14.2 1.15 1.15.1 All 91 releases
name-directory / shortcode.php

shortcode.php in Name Directory 1.9.5, at shortcode.php

377 lines 13.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 add_action('wp_enqueue_scripts', 'name_directory_add_stylesheet');
3
4 /**
5 * Add the CSS file to output
6 */
7 function name_directory_add_stylesheet()
8 {
9 wp_register_style('name-directory-style', plugins_url('name_directory.css', __FILE__));
10 wp_enqueue_style('name-directory-style');
11 }
12
13 /**
14 * Show and handle the submission form
15 * @param $directory
16 * @param $overview_url
17 * @return string
18 */
19 function name_directory_show_submit_form($directory, $overview_url)
20 {
21 global $wpdb;
22 global $name_directory_table_directory_name;
23
24 $name = __('Name', 'name-directory');
25 $required = __('Required', 'name-directory');
26 $description = __('Description', 'name-directory');
27 $your_name = __('Your name', 'name-directory');
28 $submit = __('Submit', 'name-directory');
29 $back_txt = __('Back to name directory', 'name-directory');
30
31 $result_class = '';
32 $form_result = null;
33
34 if(! empty($_POST['name_directory_name']))
35 {
36 $wpdb->get_results(
37 sprintf("SELECT `id` FROM `%s` WHERE `name` = '%s'",
38 $name_directory_table_directory_name,
39 esc_sql($_POST['name_directory_name']))
40 );
41
42 if($wpdb->num_rows == 1)
43 {
44 $result_class = 'form-result-error';
45 $form_result = sprintf(__('Sorry, %s was already on the list so your submission was not sent.', 'name-directory'),
46 '<i>' . esc_sql($_POST['name_directory_name']) . '</i>');
47 }
48 else
49 {
50 $db_success = $wpdb->insert(
51 $name_directory_table_directory_name,
52 array(
53 'directory' => intval($directory),
54 'name' => esc_sql($_POST['name_directory_name']),
55 'letter' => name_directory_get_first_char($_POST['name_directory_name']),
56 'description' => esc_sql($_POST['name_directory_description']),
57 'published' => 0,
58 'submitted_by' => esc_sql($_POST['name_directory_submitter']),
59 ),
60 array('%d', '%s', '%s', '%s', '%d', '%s')
61 );
62
63 if(! empty($db_success))
64 {
65 $result_class = 'form-result-success';
66 $form_result = __('Thank you for your submission! It will be reviewed shortly.', 'name-directory');
67
68 name_directory_notify_admin_of_new_submission($directory, $_POST);
69 }
70 else
71 {
72 $result_class = 'form-result-error';
73 $form_result = __('Something must have gone terribly wrong. Would you please try it again?', 'name-directory');
74 }
75 }
76 }
77 else if($_SERVER['REQUEST_METHOD'] == 'POST')
78 {
79 $result_class = 'form-result-error';
80 $form_result = __('Please fill in at least a name', 'name-directory');;
81 }
82
83 $form = <<<HTML
84 <form method='post' name='name_directory_submit'>
85
86 <div class='name-directory-form-result {$result_class}'>{$form_result}</div>
87
88 <p><a href="{$overview_url}">{$back_txt}</a></p>
89
90 <div class='name_directory_forminput'>
91 <label for='name_directory_name'>{$name} <small>{$required}</small></label>
92 <br />
93 <input id='name_directory_name' type='text' name='name_directory_name' />
94 </div>
95
96 <div class='name_directory_forminput'>
97 <label for='name_directory_description'>{$description}</label>
98 <br />
99 <textarea id='name_directory_description' name='name_directory_description'></textarea>
100 </div>
101
102 <div class='name_directory_forminput'>
103 <label for='name_directory_submitter'>{$your_name}</label>
104 <br />
105 <input id='name_directory_submitter' type='text' name='name_directory_submitter' />
106 </div>
107
108 <div class='name_directory_forminput'>
109 <br />
110 <button type='submit'>{$submit}</button>
111 </div>
112
113 </form>
114 HTML;
115
116 return $form;
117 }
118
119
120
121
122
123 /**
124 * Function that takes care of displaying.. stuff
125 * @param $attributes
126 * @return mixed
127 */
128 function name_directory_show_directory($attributes)
129 {
130 $dir = null;
131 $show_all_link = '';
132 $show_latest_link = '';
133 extract(shortcode_atts(
134 array('dir' => '1'),
135 $attributes
136 ));
137
138 $name_filter = array();
139 if($_GET['name_directory_startswith'] == "latest")
140 {
141 $name_filter['character'] = "latest";
142 }
143 else if(isset($_GET['name_directory_startswith']))
144 {
145 $name_filter['character'] = mb_strtoupper(mb_substr($_GET['name_directory_startswith'], 0, 1));
146 }
147 else if(! empty($attributes['start_with']) && empty($_GET['name-directory-search-value']))
148 {
149 $name_filter['character'] = $attributes['start_with'];
150 }
151
152 $str_all = __('All', 'name-directory');
153 $str_latest = __('Latest', 'name-directory');
154 $search_value = '';
155 if(! empty($_GET['name-directory-search-value']))
156 {
157 $search_value = htmlspecialchars($_GET['name-directory-search-value']);
158 $name_filter['containing'] = $search_value;
159 }
160
161 $letter_url = name_directory_make_plugin_url('name_directory_startswith', 'name-directory-search-value');
162 $directory = name_directory_get_directory_properties($dir);
163 $names = name_directory_get_directory_names($directory, $name_filter);
164 $num_names = count($names);
165
166 if(isset($_GET['show_submitform']))
167 {
168 return name_directory_show_submit_form($dir, name_directory_make_plugin_url('name_directory_startswith','show_submitform'));
169 }
170
171 ob_start();
172
173 echo "<a name='name_directory_position'></a>";
174
175 if(! empty($directory['show_title']))
176 {
177 echo "<h3 class='name_directory_title'>" . $directory['name'] . "</h3>";
178 }
179
180 if(! empty($directory['show_all_names_on_index']))
181 {
182 $show_all_link = '<a class="name_directory_startswith" href="' . $letter_url . '">' . $str_all . '</a> |';
183 }
184
185 if(! empty($directory['nr_most_recent']))
186 {
187 $show_latest_link = ' <a class="name_directory_startswith" href="' . $letter_url . 'latest">' . $str_latest . '</a> |';
188 }
189
190 /* Prepare and print the index-letters */
191 echo '<div class="name_directory_index">';
192 echo $show_all_link;
193 echo $show_latest_link;
194
195 $index_letters = range('A', 'Z');
196 array_unshift($index_letters, '#');
197 $starting_letters = name_directory_get_directory_start_characters($dir);
198
199 /* User does not want to show all the index characters */
200 if(empty($directory['show_all_index_letters']))
201 {
202 $index_letters = $starting_letters;
203 }
204
205 foreach($index_letters as $index_letter)
206 {
207 $extra_classes = '';
208 if($name_filter['character'] == $index_letter)
209 {
210 $extra_classes .= ' name_directory_active';
211 }
212
213 if(! in_array($index_letter, $starting_letters))
214 {
215 $extra_classes .= ' name_directory_empty';
216 }
217
218 echo ' <a class="name_directory_startswith ' . $extra_classes . '" href="' . $letter_url . urlencode($index_letter) . '">' . strtoupper($index_letter) . '</a> ';
219 }
220
221 if(! empty($directory['show_submit_form']))
222 {
223 echo " | <a href='" . $letter_url . "&show_submitform=true'>" . __('Submit a name', 'name-directory') . "</a>";
224 }
225
226 if(! empty($directory['show_search_form']))
227 {
228 $parsed_url = parse_url($_SERVER['REQUEST_URI']);
229 parse_str($parsed_url['query'], $search_get_url);
230 unset($search_get_url['name-directory-search-value']);
231
232 echo "<br />";
233 echo "<form method='get' action='";
234 if(! empty($directory['jump_to_search_results']))
235 {
236 echo "#name_directory_position";
237 }
238 echo "'>";
239 foreach($search_get_url as $key_name=>$value)
240 {
241 if($key_name == 'name_directory_startswith')
242 {
243 continue;
244 }
245 echo "<input type='hidden' name='" . htmlspecialchars($key_name) . "' value='" . htmlspecialchars($value) . "' />";
246 }
247 echo "<input type='text' name='name-directory-search-value' id='name-directory-search-input-box' placeholder='" . __('Search for...', 'name-directory') . "' />";
248 echo "<input type='submit' id='name-directory-search-input-button' value='" . __('Search', 'name-directory') . "' />";
249 echo "</form>";
250 }
251 echo '</div>';
252
253 echo '<div class="name_directory_total">';
254 if(empty($name_filter['character']) && empty($search_value))
255 {
256 echo sprintf(__('There are currently %d names in this directory', 'name-directory'), $num_names);
257 }
258 else if(empty($name_filter['character']) && ! empty($search_value))
259 {
260 echo sprintf(__('There are %d names in this directory containing the search term %s.', 'name-directory'), $num_names, "<i>" . $search_value . "</i>");
261 echo " <a href='" . get_permalink() . "'><small>" . __('Clear results', 'name-directory') . "</small></a>.<br />";
262 }
263 else if($name_filter['character'] == 'latest')
264 {
265 echo sprintf(__('Showing %d most recent names in this directory', 'name-directory'), $num_names);
266 }
267 else
268 {
269 echo sprintf(__('There are %d names in this directory beginning with the letter %s.', 'name-directory'), $num_names, $name_filter['character']);
270 }
271 echo '</div>';
272
273 echo '<div class="name_directory_names">';
274 if($num_names === 0 && empty($search_value))
275 {
276 echo '<p>' . __('There are no names in this directory at the moment', 'name-directory') . '</p>';
277 }
278 else if(isset($directory['show_all_names_on_index']) && $directory['show_all_names_on_index'] != 1 && empty($name_filter))
279 {
280 echo '<p>' . __('Please select a letter from the index (above) to see entries', 'name-directory') . '</p>';
281 }
282 else
283 {
284 $split_at = null;
285 if(! empty($directory['nr_columns']) && $directory['nr_columns'] > 1)
286 {
287 $split_at = round($num_names/$directory['nr_columns'])+1;
288 }
289
290 echo '<div class="name_directory_column name_directory_nr' . (int)$directory['nr_columns'] . '">';
291
292 $i = 1;
293 $split_i = 1;
294 foreach($names as $entry)
295 {
296 echo '<div class="name_directory_name_box">';
297 echo '<a name="namedirectory_' . sanitize_html_class($entry['name']) . '"></a>';
298 echo '<strong>' . htmlspecialchars($entry['name']) . '</strong>';
299 if(! empty($directory['show_description']) && ! empty($entry['description']))
300 {
301 $print_description = html_entity_decode(stripslashes($entry['description']));
302
303 /* This toggles the read more/less indicators, these need extra html */
304 if(! empty($directory['nr_words_description']))
305 {
306 $num_words = intval($directory['nr_words_description']);
307 $short_desc = name_directory_get_words($print_description, $num_words);
308 $print_description = str_replace($short_desc, "", $print_description);
309 if(! empty($print_description))
310 {
311 echo '<br /><div>
312 <input type="checkbox" class="name-directory-readmore-state" id="name-' . htmlspecialchars($entry['id']) . '" />
313 <span class="name-directory-readmore-wrap">' . $short_desc . ' <span class="name-directory-readmore-target">' . $print_description .'</span></span>
314 <label for="name-' . htmlspecialchars($entry['id']) . '" class="name-directory-readmore-trigger"></label>
315 </div>';
316 }
317 else
318 {
319 echo '<br /><div>' . $short_desc . '</div>';
320 }
321
322 }
323 else {
324 echo '<br /><div>' . $print_description . '</div>';
325 }
326 }
327 if(! empty($directory['show_submitter_name']) && ! empty($entry['submitted_by']))
328 {
329 echo "<small>" . __('Submitted by:', 'name-directory') . " " . $entry['submitted_by'] . "</small>";
330 }
331 echo '</div>';
332
333 if(! empty($directory['show_line_between_names']) && $num_names != $i)
334 {
335 echo '<hr />';
336 }
337
338 $split_i++;
339 $i++;
340
341 if($split_at == $split_i)
342 {
343 echo '</div><div class="name_directory_column name_directory_nr' . (int)$directory['nr_columns'] . '">';
344 $split_i = 0;
345 }
346 }
347 echo '</div>';
348 }
349 echo '</div>';
350
351 if(! empty($directory['nr_columns']) && $directory['nr_columns'] > 1)
352 {
353 echo '<div class="name_directory_column_clear"></div>';
354 }
355
356 if(! empty($directory['show_submit_form']))
357 {
358 echo "<br /><br />
359 <a href='" . $letter_url . "&show_submitform=true' class='name_directory_submit_bottom_link'>" . __('Submit a name', 'name-directory') . "</a>";
360 }
361
362 /** Sad to print it like this, but this is needed for translating the show more/less buttons */
363 echo "<style>
364 .name-directory-readmore-state ~ .name-directory-readmore-trigger:before {
365 content: '… " . __('Show more', 'name-directory') . "';
366 }
367
368 .name-directory-readmore-state:checked ~ .name-directory-read-more-trigger:before {
369 content: '" . __('Show less', 'name-directory') . "';
370 }
371 </style>";
372
373 return ob_get_clean();
374 }
375
376 add_shortcode('namedirectory', 'name_directory_show_directory');
377