Dotclear

source: plugins/tags/_admin.php @ 1518:03fef8e1ef34

Revision 1518:03fef8e1ef34, 11.1 KB checked in by Anne Kozlika <kozlika@…>, 11 years ago (diff)

Typos. Thanks to brol.

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 dcPage::breadcrumb(
232                    array(
233                         html::escapeHTML($core->blog->name) => '',
234                         __('Entries') => 'posts.php',
235                         '<span class="page-title">'.__('Add tags to entries').'</span>' => ''
236               )).
237               '<form action="'.$form_uri.'" method="post">'.
238               $hidden_fields->getEntries().
239               '<div><label for="new_tags" class="area">'.__('Tags to add:').'</label> '.
240               form::textarea('new_tags',60,3).
241               '</div>'.
242               $hidden_fields->getHidden().
243               $core->formNonce().
244               form::hidden(array('action'),'tags').
245               '<p><input type="submit" value="'.__('Save').'" '.
246               'name="save_tags" /></p>'.
247               '</form>';
248          }
249          elseif ($action == 'tags_remove')
250          {
251               $meta =& $GLOBALS['core']->meta;
252               $tags = array();
253               
254               foreach ($_POST['entries'] as $id) {
255                    $post_tags = $meta->getMetadata(array(
256                         'meta_type' => 'tag',
257                         'post_id' => (integer) $id))->toStatic()->rows();
258                    foreach ($post_tags as $v) {
259                         if (isset($tags[$v['meta_id']])) {
260                              $tags[$v['meta_id']]++;
261                         } else {
262                              $tags[$v['meta_id']] = 1;
263                         }
264                    }
265               }
266               echo dcPage::breadcrumb(
267                    array(
268                         html::escapeHTML($core->blog->name) => '',
269                         __('Entries') => 'posts.php',
270                         '<span class="page-title">'.__('Remove selected tags from entries').'</span>' => ''
271               ));
272               
273               if (empty($tags)) {
274                    echo '<p>'.__('No tags for selected entries').'</p>';
275                    return;
276               }
277               
278               $posts_count = count($_POST['entries']);
279               
280               echo
281               '<form action="'.$form_uri.'" method="post">'.
282               '<fieldset><legend>'.__('Following tags have been found in selected entries:').'</legend>';
283               
284               foreach ($tags as $k => $n) {
285                    $label = '<label class="classic">%s %s</label>';
286                    if ($posts_count == $n) {
287                         $label = sprintf($label,'%s','<strong>%s</strong>');
288                    }
289                    echo '<p>'.sprintf($label,
290                              form::checkbox(array('meta_id[]'),html::escapeHTML($k)),
291                              html::escapeHTML($k)).
292                         '</p>';
293               }
294               
295               echo
296               '<p><input type="submit" value="'.__('ok').'" /></p>'.
297               $hidden_fields.
298               $core->formNonce().
299               form::hidden(array('action'),'tags_remove').
300               '</fieldset></form>';
301          }
302     }
303     
304     public static function adminUserForm($args)
305     {
306          if ($args instanceof dcCore) {
307               $opts = $args->auth->getOptions();
308          }
309          elseif ($args instanceof record) {
310               $opts = $args->options();
311          }
312          else {
313               $opts = array();
314          }
315         
316          $combo = array();
317          $combo[__('Short')] = 'more';
318          $combo[__('Extended')] = 'all';
319         
320          $value = array_key_exists('tag_list_format',$opts) ? $opts['tag_list_format'] : 'more';
321         
322          echo
323          '<fieldset><legend>'.__('Tags').'</legend>'.
324          '<p><label for="user_tag_list_format">'.__('Tags list format:').'</label> '.
325          form::combo('user_tag_list_format',$combo,$value).
326          '</p></fieldset>';
327     }
328     
329     public static function setTagListFormat($cur,$user_id = null)
330     {
331          if (!is_null($user_id)) {
332               $cur->user_options['tag_list_format'] = $_POST['user_tag_list_format'];
333          }
334     }
335}
336?>
Note: See TracBrowser for help on using the repository browser.

Sites map