Dotclear

source: plugins/tags/_admin.php @ 1454:e64273de06ad

Revision 1454:e64273de06ad, 10.8 KB checked in by Anne Kozlika <kozlika@…>, 11 years ago (diff)

Let labels be labels, the end (I hope so).

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_CONTEXT_ADMIN')) { return; }
13
14$_menu['Blog']->addItem(__('Tags'),'plugin.php?p=tags&amp;m=tags','index.php?pf=tags/icon.png',
15          preg_match('/plugin.php\?p=tags&m=tag(s|_posts)?(&.*)?$/',$_SERVER['REQUEST_URI']),
16          $core->auth->check('usage,contentadmin',$core->blog->id));
17
18require dirname(__FILE__).'/_widgets.php';
19
20$core->addBehavior('adminPostFormItems',array('tagsBehaviors','tagsField'));
21
22$core->addBehavior('adminAfterPostCreate',array('tagsBehaviors','setTags'));
23$core->addBehavior('adminAfterPostUpdate',array('tagsBehaviors','setTags'));
24
25$core->addBehavior('adminPostHeaders',array('tagsBehaviors','postHeaders'));
26$core->addBehavior('adminPostsActionsHeaders',array('tagsBehaviors','postsActionsHeaders'));
27
28$core->addBehavior('adminPostsActionsCombo',array('tagsBehaviors','adminPostsActionsCombo'));
29$core->addBehavior('adminPostsActions',array('tagsBehaviors','adminPostsActions'));
30$core->addBehavior('adminPostsActionsContent',array('tagsBehaviors','adminPostsActionsContent'));
31
32$core->addBehavior('adminPreferencesForm',array('tagsBehaviors','adminUserForm'));
33$core->addBehavior('adminBeforeUserOptionsUpdate',array('tagsBehaviors','setTagListFormat'));
34
35$core->addBehavior('adminUserForm',array('tagsBehaviors','adminUserForm'));
36$core->addBehavior('adminBeforeUserCreate',array('tagsBehaviors','setTagListFormat'));
37$core->addBehavior('adminBeforeUserUpdate',array('tagsBehaviors','setTagListFormat'));
38
39$core->addBehavior('coreInitWikiPost',array('tagsBehaviors','coreInitWikiPost'));
40
41$core->addBehavior('adminDashboardFavs',array('tagsBehaviors','dashboardFavs'));
42
43# BEHAVIORS
44class tagsBehaviors
45{
46     public static function dashboardFavs($core,$favs)
47     {
48          $favs['tags'] = new ArrayObject(array('tags','Tags','plugin.php?p=tags&amp;m=tags',
49               'index.php?pf=tags/icon.png','index.php?pf=tags/icon-big.png',
50               'usage,contentadmin',null,null));
51     }
52
53     public static function coreInitWikiPost($wiki2xhtml)
54     {
55          $wiki2xhtml->registerFunction('url:tag',array('tagsBehaviors','wiki2xhtmlTag'));
56     }
57     
58     public static function wiki2xhtmlTag($url,$content)
59     {
60          $url = substr($url,4);
61          if (strpos($content,'tag:') === 0) {
62               $content = substr($content,4);
63          }
64         
65         
66          $tag_url = html::stripHostURL($GLOBALS['core']->blog->url.$GLOBALS['core']->url->getURLFor('tag'));
67          $res['url'] = $tag_url.'/'.rawurlencode(dcMeta::sanitizeMetaID($url));
68          $res['content'] = $content;
69         
70          return $res;
71     }
72     
73     public static function tagsField($main,$sidebar,$post)
74     {
75          $meta =& $GLOBALS['core']->meta;
76         
77          if (!empty($_POST['post_tags'])) {
78               $value = $_POST['post_tags'];
79          } else {
80               $value = ($post) ? $meta->getMetaStr($post->post_meta,'tag') : '';
81          }
82          $sidebar['metas-box']['items']['post_tags']=
83          '<h5><label class="s-tags" for="post_tags">'.__('Tags').'</label></h5>'.
84          '<div class="p s-tags" id="tags-edit">'.form::textarea('post_tags',20,3,$value,'maximal').'</div>';
85     }
86     
87     public static function setTags($cur,$post_id)
88     {
89          $post_id = (integer) $post_id;
90         
91          if (isset($_POST['post_tags'])) {
92               $tags = $_POST['post_tags'];
93               $meta =& $GLOBALS['core']->meta;
94               $meta->delPostMeta($post_id,'tag');
95               
96               foreach ($meta->splitMetaValues($tags) as $tag) {
97                    $meta->setPostMeta($post_id,'tag',$tag);
98               }
99          }
100     }
101     
102     public static function postHeaders()
103     {
104          $tag_url = $GLOBALS['core']->blog->url.$GLOBALS['core']->url->getURLFor('tag');
105         
106          $opts = $GLOBALS['core']->auth->getOptions();
107          $type = isset($opts['tag_list_format']) ? $opts['tag_list_format'] : 'more';
108         
109          return 
110          '<script type="text/javascript" src="index.php?pf=tags/js/jquery.autocomplete.js"></script>'.
111          '<script type="text/javascript" src="index.php?pf=tags/js/post.js"></script>'.
112          '<script type="text/javascript">'."\n".
113          "//<![CDATA[\n".
114          "metaEditor.prototype.meta_url = 'plugin.php?p=tags&m=tag_posts&amp;tag=';\n".
115          "metaEditor.prototype.meta_type = '".html::escapeJS($type)."';\n".
116          "metaEditor.prototype.text_confirm_remove = '".html::escapeJS(__('Are you sure you want to remove this %s?'))."';\n".
117          "metaEditor.prototype.text_add_meta = '".html::escapeJS(__('Add a %s to this entry'))."';\n".
118          "metaEditor.prototype.text_choose = '".html::escapeJS(__('Choose from list'))."';\n".
119          "metaEditor.prototype.text_all = '".html::escapeJS(__('all'))."';\n".
120          "metaEditor.prototype.text_separation = '';\n".
121          "jsToolBar.prototype.elements.tag.title = '".html::escapeJS(__('Tag'))."';\n".
122          "jsToolBar.prototype.elements.tag.url = '".html::escapeJS($tag_url)."';\n".
123          "dotclear.msg.tags_autocomplete = '".html::escapeJS(__('used in %e - frequency %p%'))."';\n".
124          "dotclear.msg.entry = '".html::escapeJS(__('entry'))."';\n".
125          "dotclear.msg.entries = '".html::escapeJS(__('entries'))."';\n".
126          "\n//]]>\n".
127          "</script>\n".
128          '<link rel="stylesheet" type="text/css" href="index.php?pf=tags/style.css" />';
129     }
130     
131     public static function postsActionsHeaders()
132     {
133          if (($_POST['action'] == 'tags') || ($_POST['action'] == 'tags_remove')) {
134               $tag_url = $GLOBALS['core']->blog->url.$GLOBALS['core']->url->getURLFor('tag');
135
136               $opts = $GLOBALS['core']->auth->getOptions();
137               $type = isset($opts['tag_list_format']) ? $opts['tag_list_format'] : 'more';
138
139               return 
140               '<script type="text/javascript" src="index.php?pf=tags/js/jquery.autocomplete.js"></script>'.
141               '<script type="text/javascript" src="index.php?pf=tags/js/posts_actions.js"></script>'.
142               '<script type="text/javascript">'."\n".
143               "//<![CDATA[\n".
144               "metaEditor.prototype.meta_url = 'plugin.php?p=tags&m=tag_posts&amp;tag=';\n".
145               "metaEditor.prototype.meta_type = '".html::escapeJS($type)."';\n".
146               "metaEditor.prototype.text_confirm_remove = '".html::escapeJS(__('Are you sure you want to remove this %s?'))."';\n".
147               "metaEditor.prototype.text_add_meta = '".html::escapeJS(__('Add a %s to this entry'))."';\n".
148               "metaEditor.prototype.text_choose = '".html::escapeJS(__('Choose from list'))."';\n".
149               "metaEditor.prototype.text_all = '".html::escapeJS(__('all'))."';\n".
150               "metaEditor.prototype.text_separation = '".html::escapeJS(__('Enter tags separated by coma'))."';\n".
151               "dotclear.msg.tags_autocomplete = '".html::escapeJS(__('used in %e - frequency %p%'))."';\n".
152               "dotclear.msg.entry = '".html::escapeJS(__('entry'))."';\n".
153               "dotclear.msg.entries = '".html::escapeJS(__('entries'))."';\n".
154               "\n//]]>\n".
155               "</script>\n".
156               '<link rel="stylesheet" type="text/css" href="index.php?pf=tags/style.css" />';
157          }
158     }
159     
160     public static function adminPostsActionsCombo($args)
161     {
162          $args[0][__('Tags')] = array(__('Add tags') => 'tags');
163         
164          if ($GLOBALS['core']->auth->check('delete,contentadmin',$GLOBALS['core']->blog->id)) {
165               $args[0][__('Tags')] = array_merge($args[0][__('Tags')],
166                    array(__('Remove tags') => 'tags_remove'));
167          }
168     }
169     
170     public static function adminPostsActions($core,$posts,$action,$redir)
171     {
172          if ($action == 'tags' && !empty($_POST['new_tags']))
173          {
174               try
175               {
176
177                    $meta =& $GLOBALS['core']->meta;
178                    $tags = $meta->splitMetaValues($_POST['new_tags']);
179                   
180                    while ($posts->fetch())
181                    {
182                         # Get tags for post
183                         $post_meta = $meta->getMetadata(array(
184                              'meta_type' => 'tag',
185                              'post_id' => $posts->post_id));
186                         $pm = array();
187                         while ($post_meta->fetch()) {
188                              $pm[] = $post_meta->meta_id;
189                         }
190                         
191                         foreach ($tags as $t) {
192                              if (!in_array($t,$pm)) {
193                                   $meta->setPostMeta($posts->post_id,'tag',$t);
194                              }
195                         }
196                    }
197                   
198                    http::redirect($redir);
199               }
200               catch (Exception $e)
201               {
202                    $core->error->add($e->getMessage());
203               }
204          }
205          elseif ($action == 'tags_remove' && !empty($_POST['meta_id']) && $core->auth->check('delete,contentadmin',$core->blog->id))
206          {
207               try
208               {
209                    $meta =& $GLOBALS['core']->meta;
210                    while ($posts->fetch())
211                    {
212                         foreach ($_POST['meta_id'] as $v)
213                         {
214                              $meta->delPostMeta($posts->post_id,'tag',$v);
215                         }
216                    }
217                   
218                    http::redirect($redir);
219               }
220               catch (Exception $e)
221               {
222                    $core->error->add($e->getMessage());
223               }
224          }
225     }
226     
227     public static function adminPostsActionsContent($core,$action,$hidden_fields,$form_uri="posts_actions.php")
228     {
229          if ($action == 'tags')
230          {
231               echo
232               '<h2 class="page-title">'.__('Add tags to entries').'</h2>'.
233               '<form action="'.$form_uri.'" method="post">'.
234               '<div><label for="new_tags" class="area">'.__('Tags to add:').'</label> '.
235               form::textarea('new_tags',60,3).
236               '</div>'.
237               $hidden_fields.
238               $core->formNonce().
239               form::hidden(array('action'),'tags').
240               '<p><input type="submit" value="'.__('Save').'" '.
241               'name="save_tags" /></p>'.
242               '</form>';
243          }
244          elseif ($action == 'tags_remove')
245          {
246               $meta =& $GLOBALS['core']->meta;
247               $tags = array();
248               
249               foreach ($_POST['entries'] as $id) {
250                    $post_tags = $meta->getMetadata(array(
251                         'meta_type' => 'tag',
252                         'post_id' => (integer) $id))->toStatic()->rows();
253                    foreach ($post_tags as $v) {
254                         if (isset($tags[$v['meta_id']])) {
255                              $tags[$v['meta_id']]++;
256                         } else {
257                              $tags[$v['meta_id']] = 1;
258                         }
259                    }
260               }
261               
262               echo '<h2 class="page-title">'.__('Remove selected tags from entries').'</h2>';
263               
264               if (empty($tags)) {
265                    echo '<p>'.__('No tags for selected entries').'</p>';
266                    return;
267               }
268               
269               $posts_count = count($_POST['entries']);
270               
271               echo
272               '<form action="'.$form_uri.'" method="post">'.
273               '<fieldset><legend>'.__('Following tags have been found in selected entries:').'</legend>';
274               
275               foreach ($tags as $k => $n) {
276                    $label = '<label class="classic">%s %s</label>';
277                    if ($posts_count == $n) {
278                         $label = sprintf($label,'%s','<strong>%s</strong>');
279                    }
280                    echo '<p>'.sprintf($label,
281                              form::checkbox(array('meta_id[]'),html::escapeHTML($k)),
282                              html::escapeHTML($k)).
283                         '</p>';
284               }
285               
286               echo
287               '<p><input type="submit" value="'.__('ok').'" /></p>'.
288               $hidden_fields.
289               $core->formNonce().
290               form::hidden(array('action'),'tags_remove').
291               '</fieldset></form>';
292          }
293     }
294     
295     public static function adminUserForm($args)
296     {
297          if ($args instanceof dcCore) {
298               $opts = $args->auth->getOptions();
299          }
300          elseif ($args instanceof record) {
301               $opts = $args->options();
302          }
303          else {
304               $opts = array();
305          }
306         
307          $combo = array();
308          $combo[__('short')] = 'more';
309          $combo[__('extended')] = 'all';
310         
311          $value = array_key_exists('tag_list_format',$opts) ? $opts['tag_list_format'] : 'more';
312         
313          echo
314          '<fieldset><legend>'.__('Tags').'</legend>'.
315          '<p><label for="user_tag_list_format">'.__('Tags list format:').'</label> '.
316          form::combo('user_tag_list_format',$combo,$value).
317          '</p></fieldset>';
318     }
319     
320     public static function setTagListFormat($cur,$user_id = null)
321     {
322          if (!is_null($user_id)) {
323               $cur->user_options['tag_list_format'] = $_POST['user_tag_list_format'];
324          }
325     }
326}
327?>
Note: See TracBrowser for help on using the repository browser.

Sites map