1 | <?php |
---|
2 | # -- BEGIN LICENSE BLOCK ---------------------------------- |
---|
3 | # This file is part of multiToc, a plugin for Dotclear. |
---|
4 | # |
---|
5 | # Copyright (c) 2009-2010 Tomtom and contributors |
---|
6 | # http://blog.zenstyle.fr/ |
---|
7 | # |
---|
8 | # Licensed under the GPL version 2.0 license. |
---|
9 | # A copy of this license is available in LICENSE file or at |
---|
10 | # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
---|
11 | # -- END LICENSE BLOCK ------------------------------------ |
---|
12 | |
---|
13 | $core->addBehavior('publicBeforeDocument',array('multiTocBehaviors','addTplPath')); |
---|
14 | $core->addBehavior('coreBlogGetPosts',array('multiTocBehaviors','coreBlogGetPosts')); |
---|
15 | |
---|
16 | $core->tpl->addValue('MultiTocUrl', array('multiTocTpl','multiTocUrl')); |
---|
17 | $core->tpl->addValue('MultiTocCss', array('multiTocTpl','multiTocCss')); |
---|
18 | $core->tpl->addValue('MultiTocGroupTitle', array('multiTocTpl','multiTocGroupTitle')); |
---|
19 | $core->tpl->addValue('MultiTocGroupDesc', array('multiTocTpl','multiTocGroupDesc')); |
---|
20 | $core->tpl->addValue('MultiTocGroupCount', array('multiTocTpl','multiTocGroupCount')); |
---|
21 | $core->tpl->addValue('MultiTocItemUrl', array('multiTocTpl','multiTocItemUrl')); |
---|
22 | $core->tpl->addValue('MultiTocItemTitle', array('multiTocTpl','multiTocItemTitle')); |
---|
23 | $core->tpl->addValue('MultiTocItemDate', array('multiTocTpl','multiTocItemDate')); |
---|
24 | $core->tpl->addValue('MultiTocItemCategory', array('multiTocTpl','multiTocItemCategory')); |
---|
25 | $core->tpl->addValue('MultiTocItemAuthor', array('multiTocTpl','multiTocItemAuthor')); |
---|
26 | $core->tpl->addValue('MultiTocItemNbComments', array('multiTocTpl','multiTocItemNbComments')); |
---|
27 | $core->tpl->addValue('MultiTocItemNbTrackbacks', array('multiTocTpl','multiTocItemNbTrackbacks')); |
---|
28 | $core->tpl->addValue('MultiTocPageTitle', array('multiTocTpl','multiTocPageTitle')); |
---|
29 | |
---|
30 | $core->tpl->addBlock('MultiTocGroup', array('multiTocTpl','multiTocGroup')); |
---|
31 | $core->tpl->addBlock('MultiTocItem', array('multiTocTpl','multiTocItem')); |
---|
32 | $core->tpl->addBlock('MultiTocIf',array('multiTocTpl','multiTocIf')); |
---|
33 | $core->tpl->addBlock('MultiTocMetaData',array('multiTocTpl','multiTocMetaData')); |
---|
34 | |
---|
35 | class rsMultiTocPost extends rsExtPostPublic |
---|
36 | { |
---|
37 | public static function getExcerpt($rs,$absolute_urls=false) |
---|
38 | { |
---|
39 | $c = parent::getExcerpt($rs,$absolute_urls); |
---|
40 | |
---|
41 | if ($rs->hasToc()) { |
---|
42 | $toc = new multiTocPost($rs); |
---|
43 | $c = $toc->process($c); |
---|
44 | unset($toc); |
---|
45 | } |
---|
46 | |
---|
47 | return $c; |
---|
48 | } |
---|
49 | |
---|
50 | public static function getContent($rs,$absolute_urls=false) |
---|
51 | { |
---|
52 | $c = parent::getContent($rs,$absolute_urls); |
---|
53 | |
---|
54 | if ($rs->hasToc()) { |
---|
55 | $toc = new multiTocPost($rs); |
---|
56 | $c = $toc->process($c); |
---|
57 | unset($toc); |
---|
58 | } |
---|
59 | |
---|
60 | return $c; |
---|
61 | } |
---|
62 | |
---|
63 | public static function hasToc($rs) |
---|
64 | { |
---|
65 | if (preg_match('/<p>::TOC::<\/p>/',$rs->post_excerpt_xhtml.$rs->post_content_xhtml)) { |
---|
66 | return true; |
---|
67 | } |
---|
68 | else { |
---|
69 | return false; |
---|
70 | } |
---|
71 | } |
---|
72 | } |
---|
73 | |
---|
74 | class multiTocUrl extends dcUrlHandlers |
---|
75 | { |
---|
76 | public static function multiToc($args) |
---|
77 | { |
---|
78 | global $core,$_ctx; |
---|
79 | |
---|
80 | $settings = unserialize($core->blog->settings->multiToc->multitoc_settings); |
---|
81 | |
---|
82 | if ($settings['cat']['enable']) { |
---|
83 | $types[] = 'cat'; |
---|
84 | } |
---|
85 | if ($settings['tag']['enable']) { |
---|
86 | $types[] = 'tag'; |
---|
87 | } |
---|
88 | if ($settings['alpha']['enable']) { |
---|
89 | $types[] = 'alpha'; |
---|
90 | } |
---|
91 | |
---|
92 | if (count($args) == 0) { |
---|
93 | $type = 'cat'; |
---|
94 | } |
---|
95 | elseif (count($args) == 1) { |
---|
96 | $type = in_array($args,$types) ? $args : null; |
---|
97 | unset($types); |
---|
98 | } |
---|
99 | else { |
---|
100 | $type = null; |
---|
101 | } |
---|
102 | |
---|
103 | $_ctx->multitoc_type = $type; |
---|
104 | |
---|
105 | if ($type === null) { |
---|
106 | self::p404(); |
---|
107 | } |
---|
108 | else { |
---|
109 | self::serveDocument('multitoc.html'); |
---|
110 | } |
---|
111 | |
---|
112 | exit; |
---|
113 | } |
---|
114 | } |
---|
115 | |
---|
116 | class multiTocTpl |
---|
117 | { |
---|
118 | |
---|
119 | public static function multiTocUrl($attr) |
---|
120 | { |
---|
121 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
122 | return '<?php echo '.sprintf($f,'$core->blog->url.$core->url->getBase("multitoc")').'; ?>'; |
---|
123 | } |
---|
124 | |
---|
125 | public static function multiTocCss() |
---|
126 | { |
---|
127 | global $core; |
---|
128 | |
---|
129 | $plop = |
---|
130 | $core->blog->themes_path.'/'. |
---|
131 | $core->blog->settings->system->theme.'/styles/multitoc.css'; |
---|
132 | |
---|
133 | $tagada = $core->blog->themes_path.'/default/multitoc.css'; |
---|
134 | |
---|
135 | if (file_exists($plop)) { |
---|
136 | $css = |
---|
137 | $core->blog->settings->system->themes_url.'/'. |
---|
138 | $core->blog->settings->system->theme.'/styles/multitoc.css'; |
---|
139 | } elseif (file_exists($tagada)) { |
---|
140 | $css = |
---|
141 | $core->blog->settings->system->themes_url.'/default/multitoc.min.css'; |
---|
142 | } else { |
---|
143 | $css = |
---|
144 | $core->blog->url. |
---|
145 | (($core->blog->settings->system->url_scan == 'path_info')?'?':''). |
---|
146 | 'pf=multiToc/css/multitoc.css'; |
---|
147 | } |
---|
148 | $res = |
---|
149 | "\n<?php \n". |
---|
150 | "echo '<style type=\"text/css\" media=\"screen\">@import url(".$css.");</style>';\n". |
---|
151 | "?>\n"; |
---|
152 | |
---|
153 | return $res; |
---|
154 | } |
---|
155 | |
---|
156 | public static function multiTocGroup($attr,$content) |
---|
157 | { |
---|
158 | $p = "\$_ctx->multitoc_settings = unserialize(\$core->blog->settings->multiToc->multitoc_settings);\n"; |
---|
159 | $p .= "\$params = array();\n"; |
---|
160 | $p .= "if (\$_ctx->multitoc_type == 'cat') :\n"; |
---|
161 | $p .= "\$_ctx->multitoc_group = \$core->blog->getCategories();\n"; |
---|
162 | $p .= "elseif (\$_ctx->multitoc_type == 'tag') :\n"; |
---|
163 | $p .= "\$meta = new dcMeta(\$core);\n"; |
---|
164 | $p .= "\$_ctx->multitoc_group = \$meta->getMeta('tag');\n"; |
---|
165 | $p .= "\$_ctx->multitoc_group->sort('meta_id_lower',\$_ctx->multitoc_settings['tag']['order_group']);\n"; |
---|
166 | $p .= "elseif (\$_ctx->multitoc_type == 'alpha') :\n"; |
---|
167 | $p .= "if (\$core->con->driver() == 'pgsql') :\n"; |
---|
168 | $p .= "\$_ctx->multitoc_group = ". |
---|
169 | "multiTocPublic::multiTocGroupPGSQL(\$core,". |
---|
170 | "\$_ctx->multitoc_settings['alpha']['order_group']);\n"; |
---|
171 | $p .= "else :\n"; |
---|
172 | $p .= "\$params['columns'] = array('UPPER(SUBSTRING(post_title,1,1)) AS post_letter','COUNT(*) as count');\n"; |
---|
173 | $p .= "\$params['sql'] = 'GROUP BY post_letter';\n"; |
---|
174 | $p .= "\$params['no_content'] = true;\n"; |
---|
175 | $p .= "\$params['order'] = \$_ctx->multitoc_settings['alpha']['order_group'];\n"; |
---|
176 | $p .= "\$_ctx->multitoc_group = \$core->blog->getPosts(\$params);\n"; |
---|
177 | $p .= "endif;\n"; |
---|
178 | $p .= "endif;\n"; |
---|
179 | |
---|
180 | $res = "<?php\n"; |
---|
181 | $res .= $p; |
---|
182 | $res .= "unset(\$params);\n"; |
---|
183 | $res .= "?>\n"; |
---|
184 | |
---|
185 | $res .= |
---|
186 | '<?php while ($_ctx->multitoc_group->fetch()) : ?>'.$content.'<?php endwhile; $_ctx->multitoc_group = null; $_ctx->multitoc_settings = null; ?>'; |
---|
187 | |
---|
188 | return $res; |
---|
189 | } |
---|
190 | |
---|
191 | public static function multiTocGroupTitle($attr) |
---|
192 | { |
---|
193 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
194 | |
---|
195 | $res = "<?php if (\$_ctx->multitoc_type == 'cat') :\n"; |
---|
196 | $res .= "echo ".sprintf($f,'$_ctx->multitoc_group->cat_title').";\n"; |
---|
197 | $res .= "elseif (\$_ctx->multitoc_type == 'tag') :\n"; |
---|
198 | $res .= "echo ".sprintf($f,'$_ctx->multitoc_group->meta_id').";\n"; |
---|
199 | $res .= "elseif (\$_ctx->multitoc_type == 'alpha') :\n"; |
---|
200 | $res .= "echo ".sprintf($f,'$_ctx->multitoc_group->post_letter').";\n"; |
---|
201 | $res .= "endif; ?>\n"; |
---|
202 | |
---|
203 | return $res; |
---|
204 | } |
---|
205 | |
---|
206 | public static function multiTocGroupDesc($attr) |
---|
207 | { |
---|
208 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
209 | |
---|
210 | $res = "<?php if (\$_ctx->multitoc_type == 'cat') :\n"; |
---|
211 | $res .= "echo ".sprintf($f,'$_ctx->multitoc_group->cat_desc').";\n"; |
---|
212 | $res .= "endif; ?>\n"; |
---|
213 | |
---|
214 | return $res; |
---|
215 | } |
---|
216 | |
---|
217 | public static function multiTocGroupCount($attr) |
---|
218 | { |
---|
219 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
220 | |
---|
221 | $res = "<?php\n"; |
---|
222 | $res .= "\$mask = '<span class=\"toc-group-count\">%s</span>';\n"; |
---|
223 | $res .= "if (\$_ctx->multitoc_type == 'cat' && \$_ctx->multitoc_settings['cat']['display_nb_entry']) :\n"; |
---|
224 | $res .= "echo sprintf(\$mask,'('.".sprintf($f,'$_ctx->multitoc_group->nb_post').".')');\n"; |
---|
225 | $res .= "elseif (\$_ctx->multitoc_type == 'tag' && \$_ctx->multitoc_settings['tag']['display_nb_entry']) :\n"; |
---|
226 | $res .= "echo sprintf(\$mask,'('.".sprintf($f,'$_ctx->multitoc_group->count').".')');\n"; |
---|
227 | $res .= "elseif (\$_ctx->multitoc_type == 'alpha' && \$_ctx->multitoc_settings['alpha']['display_nb_entry']) :\n"; |
---|
228 | $res .= "echo sprintf(\$mask,'('.".sprintf($f,'$_ctx->multitoc_group->count').".')');\n"; |
---|
229 | $res .= "endif;\n"; |
---|
230 | $res .= "?>\n"; |
---|
231 | |
---|
232 | return $res; |
---|
233 | } |
---|
234 | |
---|
235 | public static function multiTocItem($attr,$content) |
---|
236 | { |
---|
237 | |
---|
238 | $p = "\$params = array();\n"; |
---|
239 | $p .= "\$params['no_content'] = true;\n"; |
---|
240 | |
---|
241 | $p .= "if (\$_ctx->multitoc_type == 'cat') :\n"; |
---|
242 | $p .= "\$params['order'] = \$_ctx->multitoc_settings['cat']['order_entry'];\n"; |
---|
243 | $p .= "\$params['cat_id'] = \$_ctx->multitoc_group->cat_id;\n"; |
---|
244 | $p .= "\$_ctx->multitoc_items = \$core->blog->getPosts(\$params);\n"; |
---|
245 | $p .= "elseif (\$_ctx->multitoc_type == 'tag') :\n"; |
---|
246 | $p .= "\$params['meta_id'] = \$_ctx->multitoc_group->meta_id;\n"; |
---|
247 | $p .= "\$params['meta_type'] = 'tag';\n"; |
---|
248 | $p .= "\$params['post_type'] = '';\n"; |
---|
249 | $p .= "\$params['order'] = \$_ctx->multitoc_settings['tag']['order_entry'];\n"; |
---|
250 | $p .= "\$_ctx->multitoc_items = \$meta->getPostsByMeta(\$params);\n"; |
---|
251 | $p .= "elseif (\$_ctx->multitoc_type == 'alpha') :\n"; |
---|
252 | $p .= "\$params['order'] = \$_ctx->multitoc_settings['alpha']['order_entry'];\n"; |
---|
253 | $p .= "\$params['sql'] = ' AND UPPER(SUBSTRING(post_title,1,1)) = \''.\$_ctx->multitoc_group->post_letter.'\'';\n"; |
---|
254 | $p .= "\$_ctx->multitoc_items = \$core->blog->getPosts(\$params);\n"; |
---|
255 | $p .= "endif;\n"; |
---|
256 | |
---|
257 | $res = "<?php\n"; |
---|
258 | $res .= $p; |
---|
259 | $res .= 'unset($params);'."\n"; |
---|
260 | $res .= "?>\n"; |
---|
261 | |
---|
262 | $res .= |
---|
263 | '<?php while ($_ctx->multitoc_items->fetch()) : ?>'.$content.'<?php endwhile; $_ctx->multitoc_items = null; ?>'; |
---|
264 | |
---|
265 | return $res; |
---|
266 | } |
---|
267 | |
---|
268 | public static function multiTocItemUrl($attr) |
---|
269 | { |
---|
270 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
271 | return '<?php echo '.sprintf($f,'$_ctx->multitoc_items->getURL()').'; ?>'; |
---|
272 | } |
---|
273 | |
---|
274 | public static function multiTocItemTitle($attr) |
---|
275 | { |
---|
276 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
277 | return '<?php echo '.sprintf($f,'$_ctx->multitoc_items->post_title').'; ?>'; |
---|
278 | } |
---|
279 | |
---|
280 | public static function multiTocItemDate($attr) |
---|
281 | { |
---|
282 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
283 | |
---|
284 | $mask = isset($attr['mask']) ? sprintf($f,'"'.$attr['mask'].'"') : '\'<span class="toc-item-date">%s</span> - \''; |
---|
285 | |
---|
286 | $res = "<?php\n"; |
---|
287 | $res .= "\$mask = ".$mask.";\n"; |
---|
288 | $res .= "if ((\$_ctx->multitoc_type == 'cat' && \$_ctx->multitoc_settings['cat']['display_date'])\n"; |
---|
289 | $res .= "|| (\$_ctx->multitoc_type == 'tag' && \$_ctx->multitoc_settings['tag']['display_date'])\n"; |
---|
290 | $res .= "|| (\$_ctx->multitoc_type == 'alpha' && \$_ctx->multitoc_settings['alpha']['display_date'])\n"; |
---|
291 | $res .= ") :\n"; |
---|
292 | $res .= "echo sprintf(\$mask,\$_ctx->multitoc_items->getDate(\$_ctx->multitoc_settings[\$_ctx->multitoc_type]['format_date']));\n"; |
---|
293 | $res .= "endif;\n"; |
---|
294 | $res .= "?>\n"; |
---|
295 | |
---|
296 | return $res; |
---|
297 | } |
---|
298 | |
---|
299 | public static function multiTocItemAuthor($attr) |
---|
300 | { |
---|
301 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
302 | |
---|
303 | $mask = isset($attr['mask']) ? sprintf($f,'"'.$attr['mask'].'"') : '\' - <span class="toc-item-author">%s</span>\''; |
---|
304 | |
---|
305 | $res = "<?php\n"; |
---|
306 | $res .= "\$mask = ".$mask.";\n"; |
---|
307 | $res .= "if ((\$_ctx->multitoc_type == 'cat' && \$_ctx->multitoc_settings['cat']['display_author'])\n"; |
---|
308 | $res .= "|| (\$_ctx->multitoc_type == 'tag' && \$_ctx->multitoc_settings['tag']['display_author'])\n"; |
---|
309 | $res .= "|| (\$_ctx->multitoc_type == 'alpha' && \$_ctx->multitoc_settings['alpha']['display_author'])\n"; |
---|
310 | $res .= ") :\n"; |
---|
311 | $res .= "echo sprintf(\$mask,\$_ctx->multitoc_items->getAuthorLink());\n"; |
---|
312 | $res .= "endif;\n"; |
---|
313 | $res .= "?>\n"; |
---|
314 | |
---|
315 | return $res; |
---|
316 | } |
---|
317 | |
---|
318 | public static function multiTocItemCategory($attr) |
---|
319 | { |
---|
320 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
321 | |
---|
322 | $mask = isset($attr['mask']) ? sprintf($f,'"'.$attr['mask'].'"') : '\' - <span class="toc-item-cat">%s</span>\''; |
---|
323 | |
---|
324 | $res = "<?php\n"; |
---|
325 | $res .= "\$mask = ".$mask.";\n"; |
---|
326 | $res .= "if (((\$_ctx->multitoc_type == 'cat' && \$_ctx->multitoc_settings['cat']['display_cat'])\n"; |
---|
327 | $res .= "|| (\$_ctx->multitoc_type == 'tag' && \$_ctx->multitoc_settings['tag']['display_cat'])\n"; |
---|
328 | $res .= "|| (\$_ctx->multitoc_type == 'alpha' && \$_ctx->multitoc_settings['alpha']['display_cat']))\n"; |
---|
329 | $res .= "&& \$_ctx->multitoc_items->cat_title !== null\n"; |
---|
330 | $res .= ") :\n"; |
---|
331 | $res .= |
---|
332 | "\$link = sprintf('<a href=\"%1\$s\">%2\$s</a>',". |
---|
333 | sprintf($f,'$core->blog->url.$core->url->getBase("category")."/".$_ctx->multitoc_items->cat_url').",". |
---|
334 | sprintf($f,'$_ctx->multitoc_items->cat_title').");\n". |
---|
335 | "echo sprintf(\$mask,\$link);\n"; |
---|
336 | $res .= "endif;\n"; |
---|
337 | $res .= "?>\n"; |
---|
338 | |
---|
339 | return $res; |
---|
340 | } |
---|
341 | |
---|
342 | public static function multiTocItemNbComments($attr) |
---|
343 | { |
---|
344 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
345 | |
---|
346 | $mask = isset($attr['mask']) ? sprintf($f,'"'.$attr['mask'].'"') : '\' - <span class="toc-item-com">%s</span>\''; |
---|
347 | |
---|
348 | $res = "<?php\n"; |
---|
349 | $res .= "\$mask = ".$mask.";\n"; |
---|
350 | $res .= "if ((\$_ctx->multitoc_type == 'cat' && \$_ctx->multitoc_settings['cat']['display_nb_com'])\n"; |
---|
351 | $res .= "|| (\$_ctx->multitoc_type == 'tag' && \$_ctx->multitoc_settings['tag']['display_nb_com'])\n"; |
---|
352 | $res .= "|| (\$_ctx->multitoc_type == 'alpha' && \$_ctx->multitoc_settings['alpha']['display_nb_com'])\n"; |
---|
353 | $res .= ") :\n"; |
---|
354 | $res .= "echo sprintf(\$mask,\$_ctx->multitoc_items->nb_comment);\n"; |
---|
355 | $res .= "endif;\n"; |
---|
356 | $res .= "?>\n"; |
---|
357 | |
---|
358 | return $res; |
---|
359 | } |
---|
360 | |
---|
361 | public static function multiTocItemNbTrackbacks($attr) |
---|
362 | { |
---|
363 | $f = $GLOBALS['core']->tpl->getFilters($attr); |
---|
364 | |
---|
365 | $mask = isset($attr['mask']) ? sprintf($f,'"'.$attr['mask'].'"') : '\' - <span class="toc-item-tb">%s</span>\''; |
---|
366 | |
---|
367 | $res = "<?php\n"; |
---|
368 | $res .= "\$mask = ".$mask.";\n"; |
---|
369 | $res .= "if ((\$_ctx->multitoc_type == 'cat' && \$_ctx->multitoc_settings['cat']['display_nb_tb'])\n"; |
---|
370 | $res .= "|| (\$_ctx->multitoc_type == 'tag' && \$_ctx->multitoc_settings['tag']['display_nb_tb'])\n"; |
---|
371 | $res .= "|| (\$_ctx->multitoc_type == 'alpha' && \$_ctx->multitoc_settings['alpha']['display_nb_tb'])\n"; |
---|
372 | $res .= ") :\n"; |
---|
373 | $res .= "echo sprintf(\$mask,\$_ctx->multitoc_items->nb_trackback);\n"; |
---|
374 | $res .= "endif;\n"; |
---|
375 | $res .= "?>\n"; |
---|
376 | |
---|
377 | return $res; |
---|
378 | } |
---|
379 | |
---|
380 | public static function multiTocPageTitle() |
---|
381 | { |
---|
382 | $res = "<?php\n"; |
---|
383 | $res .= "echo __('Table of content');\n"; |
---|
384 | |
---|
385 | $res .= "if (\$_ctx->multitoc_type == 'cat') :\n"; |
---|
386 | $res .= "echo ' - '.__('By category');\n"; |
---|
387 | $res .= "elseif (\$_ctx->multitoc_type == 'tag') :\n"; |
---|
388 | $res .= "echo ' - '.__('By tag');\n"; |
---|
389 | $res .= "elseif (\$_ctx->multitoc_type == 'alpha') :\n"; |
---|
390 | $res .= "echo ' - '.__('By alpha order');\n"; |
---|
391 | $res .= "endif;\n"; |
---|
392 | $res .= "?>\n"; |
---|
393 | |
---|
394 | return $res; |
---|
395 | } |
---|
396 | |
---|
397 | public static function multiTocIf($attr,$content) |
---|
398 | { |
---|
399 | $if = array(); |
---|
400 | |
---|
401 | $operator = isset($attr['operator']) ? $this->getOperator($attr['operator']) : '&&'; |
---|
402 | |
---|
403 | if (isset($attr['type'])) { |
---|
404 | $if[] = "\$_ctx->multitoc_type == '".addslashes($attr['type'])."'"; |
---|
405 | } |
---|
406 | |
---|
407 | if (!empty($if)) { |
---|
408 | return '<?php if('.implode(' '.$operator.' ',$if).') : ?>'.$content.'<?php endif; ?>'; |
---|
409 | } else { |
---|
410 | return $content; |
---|
411 | } |
---|
412 | } |
---|
413 | |
---|
414 | public static function multiTocMetaData($attr,$content) |
---|
415 | { |
---|
416 | $type = isset($attr['type']) ? addslashes($attr['type']) : 'tag'; |
---|
417 | |
---|
418 | $sortby = 'meta_id_lower'; |
---|
419 | if (isset($attr['sortby']) && $attr['sortby'] == 'count') { |
---|
420 | $sortby = 'count'; |
---|
421 | } |
---|
422 | |
---|
423 | $order = 'asc'; |
---|
424 | if (isset($attr['order']) && $attr['order'] == 'desc') { |
---|
425 | $order = 'desc'; |
---|
426 | } |
---|
427 | |
---|
428 | $res = |
---|
429 | "<?php\n". |
---|
430 | '$objMeta = new dcMeta($core); '. |
---|
431 | "\$_ctx->meta = \$objMeta->getMetaRecordset(\$_ctx->multitoc_items->post_meta,'".$type."'); ". |
---|
432 | "\$_ctx->meta->sort('".$sortby."','".$order."'); ". |
---|
433 | '?>'; |
---|
434 | |
---|
435 | $res .= "<?php if (\$_ctx->multitoc_settings[\$_ctx->multitoc_type]['display_tag']) : ?>\n"; |
---|
436 | $res .= |
---|
437 | '<?php while ($_ctx->meta->fetch()) : ?>'.$content.'<?php endwhile; '. |
---|
438 | '$_ctx->meta = null; unset($objMeta); ?>'; |
---|
439 | $res .= "<?php endif; ?>\n"; |
---|
440 | |
---|
441 | return $res; |
---|
442 | } |
---|
443 | } |
---|
444 | |
---|
445 | class multiTocPublic |
---|
446 | { |
---|
447 | public static function multiTocGroupPGSQL($core,$order_group) |
---|
448 | { |
---|
449 | $params = array(); |
---|
450 | $params['columns'] = array( |
---|
451 | 'UPPER(SUBSTRING(post_title,1,1)) AS post_letter' |
---|
452 | ); |
---|
453 | $params['no_content'] = true; |
---|
454 | $params['order'] = $order_group; |
---|
455 | |
---|
456 | $rs = $core->blog->getPosts($params); |
---|
457 | |
---|
458 | $array = array(); |
---|
459 | |
---|
460 | # the "post_letter" of the previous post in the list |
---|
461 | $previous_letter = ''; |
---|
462 | |
---|
463 | # read the "post_letter" field of the posts |
---|
464 | # and count occurences of each letter |
---|
465 | while ($rs->fetch()) |
---|
466 | { |
---|
467 | # this letter |
---|
468 | $letter = $rs->post_letter; |
---|
469 | |
---|
470 | # the letter has changed |
---|
471 | if ($letter != $previous_letter) |
---|
472 | { |
---|
473 | # the letter has changed but the previous letter was |
---|
474 | # the empty string, ignore this case |
---|
475 | if (!empty($previous_letter)) |
---|
476 | { |
---|
477 | # store the previous letter, |
---|
478 | # which counter has been incremented |
---|
479 | $array[] = array( |
---|
480 | 'post_letter' => $previous_letter, |
---|
481 | 'count' => $letter_count |
---|
482 | ); |
---|
483 | } |
---|
484 | |
---|
485 | # initialize the counter |
---|
486 | $letter_count = 1; |
---|
487 | # remember this letter to count it |
---|
488 | $previous_letter = $letter; |
---|
489 | } |
---|
490 | else |
---|
491 | { |
---|
492 | # the letter has not changed, increment the counter |
---|
493 | $letter_count++; |
---|
494 | } |
---|
495 | } |
---|
496 | |
---|
497 | # don't forget the last letter |
---|
498 | $array[] = array( |
---|
499 | 'post_letter' => $letter, |
---|
500 | 'count' => $letter_count |
---|
501 | ); |
---|
502 | |
---|
503 | return(staticRecord::newFromArray($array)); |
---|
504 | } |
---|
505 | } |
---|
506 | |
---|
507 | ?> |
---|