Dotclear

source: inc/admin/actions/class.dcactionposts.php @ 2048:a23152342139

Revision 2048:a23152342139, 10.8 KB checked in by Dsls, 12 years ago (diff)

exit is a bit rough and not really ob_start compliand, made it smoother for plugins; Tuned pages plugin so that it works ... now

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_RC_PATH')) { return; }
13
14class dcPostsActionsPage extends dcActionsPage
15{
16     public function __construct($core,$uri,$redirect_args=array()) {
17          parent::__construct($core,$uri,$redirect_args);
18          $this->redirect_fields = array('user_id','cat_id','status',
19          'selected','month','lang','sortby','order','page','nb');
20          $this->loadDefaults();
21          $core->callBehavior('adminPostsActionsPage',$core,$this);
22     }
23
24     protected function loadDefaults() {
25          // We could have added a behavior here, but we want default action
26          // to be setup first
27          dcDefaultPostActions::adminPostsActionsPage($this->core,$this);
28     }
29     
30     public function beginPage($breadcrumb='',$head='') {
31          dcPage::open(
32               __('Entries'),
33               
34               dcPage::jsLoad('js/_posts_actions.js').
35               $head,
36               $breadcrumb
37          );   
38          echo '<p><a class="back" href="'.$this->getRedirection(array(),true).'">'.__('Back to entries list').'</a></p>';
39     }
40     
41     public function endPage() {
42          dcPage::close();
43     }
44     
45     public function error(Exception $e) {
46          $this->core->error->add($e->getMessage());
47          $this->beginPage(dcPage::breadcrumb(
48               array(
49                    html::escapeHTML($this->core->blog->name) => '',
50                    __('Entries') => $this->getRedirection(array(),true),
51                    '<span class="page-title">'.__('Entries actions').'</span>' => ''
52               ))
53          );
54          $this->endPage();
55     }
56     
57     protected function fetchEntries($from) {
58          if (!empty($from['entries']))
59          {
60               $entries = $from['entries'];
61               
62               foreach ($entries as $k => $v) {
63                    $entries[$k] = (integer) $v;
64               }
65               
66               $params['sql'] = 'AND P.post_id IN('.implode(',',$entries).') ';
67               
68               if (!isset($from['full_content']) || empty($from['full_content'])) {
69                    $params['no_content'] = true;
70               }
71               
72               if (isset($from['post_type'])) {
73                    $params['post_type'] = $from['post_type'];
74               }
75               
76               $posts = $this->core->blog->getPosts($params);
77               while ($posts->fetch())  {
78                    $this->entries[$posts->post_id] = $posts->post_title;
79               }
80               $this->rs = $posts;           
81          } else {
82               $this->rs = $this->core->con->select("SELECT blog_id FROM ".$this->core->prefix."blog WHERE false");;
83          }
84     }
85}
86
87class dcDefaultPostActions 
88{
89     public static function adminPostsActionsPage($core, $ap) {
90          if ($core->auth->check('publish,contentadmin',$core->blog->id)) {
91               $ap->addAction(
92                    array(__('Status') => array(
93                         __('Publish') => 'publish',
94                         __('Unpublish') => 'unpublish',
95                         __('Schedule') => 'schedule',
96                         __('Mark as pending') => 'pending'
97                    )),
98                    array('dcDefaultPostActions','doChangePostStatus')
99               );
100          }
101          $ap->addAction(
102               array(__('Mark')=> array(
103                    __('Mark as selected') => 'selected',
104                    __('Mark as unselected') => 'unselected'
105               )),
106               array('dcDefaultPostActions','doUpdateSelectedPost')
107          );
108          $ap->addAction(
109               array(__('Change') => array(
110                    __('Change category') => 'category',
111               )),
112               array('dcDefaultPostActions','doChangePostCategory')
113          );
114          $ap->addAction(
115               array(__('Change') => array(
116                    __('Change language') => 'lang',
117               )),
118               array('dcDefaultPostActions','doChangePostLang')
119          );
120          if ($core->auth->check('admin',$core->blog->id))
121          {
122               $ap->addAction(
123                    array(__('Change') => array(
124                         __('Change author') => 'author')),
125                    array('dcDefaultPostActions','doChangePostAuthor')
126               );
127          }
128          if ($core->auth->check('delete,contentadmin',$core->blog->id)) {
129               $ap->addAction(
130                    array(__('Delete') => array(
131                         __('Delete') => 'delete')),
132                    array('dcDefaultPostActions','doDeletePost')
133               );
134          }
135     }
136
137     public static function doChangePostStatus($core, dcPostsActionsPage $ap, $post) {
138          switch ($ap->getAction()) {
139               case 'unpublish' : $status = 0; break;
140               case 'schedule' : $status = -1; break;
141               case 'pending' : $status = -2; break;
142               default : $status = 1; break;
143          }
144          $posts_ids = $ap->getIDs();
145          if (empty($posts_ids)) {
146               throw new Exception(__('No entry selected'));
147          }
148          $core->blog->updPostsStatus($posts_ids,$status);
149         
150          $ap->redirect(array('upd' => 1),true);
151     }
152     
153     public static function doUpdateSelectedPost($core, dcPostsActionsPage $ap, $post) {
154          $posts_ids = $ap->getIDs();
155          if (empty($posts_ids)) {
156               throw new Exception(__('No entry selected'));
157          }
158          $action = $ap->getAction();
159          $core->blog->updPostsSelected($posts_ids,$action == 'selected');
160         
161          $ap->redirect(array('upd' => 1),true);
162     }
163     
164     public static function doDeletePost($core, dcPostsActionsPage $ap, $post) {
165
166          $posts_ids = $ap->getIDs();
167          if (empty($posts_ids)) {
168               throw new Exception(__('No entry selected'));
169          }
170          // Backward compatibility
171          foreach($posts_ids as $post_id)
172          {
173               # --BEHAVIOR-- adminBeforePostDelete
174               $core->callBehavior('adminBeforePostDelete',(integer) $post_id);
175          }
176         
177          # --BEHAVIOR-- adminBeforePostsDelete
178          $core->callBehavior('adminBeforePostsDelete',$posts_ids);
179         
180          $core->blog->delPosts($posts_ids);
181         
182          $ap->redirect(array('del',1),false);
183     }
184
185     public static function doChangePostCategory($core, dcPostsActionsPage $ap, $post) {
186          if (isset($post['new_cat_id'])) {
187               $posts_ids = $ap->getIDs();
188               if (empty($posts_ids)) {
189                    throw new Exception(__('No entry selected'));
190               }
191               $new_cat_id = $post['new_cat_id'];
192               if (!empty($post['new_cat_title']) && $core->auth->check('categories', $core->blog->id))
193               {
194                    $cur_cat = $core->con->openCursor($core->prefix.'category');
195                    $cur_cat->cat_title = $post['new_cat_title'];
196                    $cur_cat->cat_url = '';
197                   
198                    $parent_cat = !empty($post['new_cat_parent']) ? $post['new_cat_parent'] : '';
199                   
200                    # --BEHAVIOR-- adminBeforeCategoryCreate
201                    $core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
202                   
203                    $new_cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
204                   
205                    # --BEHAVIOR-- adminAfterCategoryCreate
206                    $core->callBehavior('adminAfterCategoryCreate', $cur_cat, $new_cat_id);
207               }
208               
209               $core->blog->updPostsCategory($posts_ids, $new_cat_id);
210               
211               $ap->redirect(array('upd'=>1),true);
212          } else {
213
214               $ap->beginPage(
215                    dcPage::breadcrumb(
216                         array(
217                              html::escapeHTML($core->blog->name) => '',
218                              __('Entries') => $ap->getRedirection(array(),true),
219                              '<span class="page-title">'.__('Change category for entries').'</span>' => ''
220               )));
221               # categories list
222               # Getting categories
223               $categories_combo = dcAdminCombos::getCategoriesCombo(
224                    $core->blog->getCategories()
225               );             
226               echo
227               '<form action="'.$ap->getRedirection(array(),true).'" method="post">'.
228               $ap->getCheckboxes().
229               '<p><label for="new_cat_id" class="classic">'.__('Category:').'</label> '.
230               form::combo(array('new_cat_id'),$categories_combo,'');
231               
232               if ($core->auth->check('categories', $core->blog->id)) {
233                    echo 
234                    '<div>'.
235                    '<p id="new_cat">'.__('Create a new category for the post(s)').'</p>'.
236                    '<p><label for="new_cat_title">'.__('Title:').'</label> '.
237                    form::field('new_cat_title',30,255,'','').'</p>'.
238                    '<p><label for="new_cat_parent">'.__('Parent:').'</label> '.
239                    form::combo('new_cat_parent',$categories_combo,'','').
240                    '</p>'.
241                    '</div>';
242               }
243               
244               echo
245               $core->formNonce().
246               $ap->getHiddenFields().
247               form::hidden(array('action'),'category').
248               '<input type="submit" value="'.__('Save').'" /></p>'.
249               '</form>';
250               $ap->endPage();
251
252          }
253     
254     }
255     public static function doChangePostAuthor($core, dcPostsActionsPage $ap, $post) {
256          if (isset($post['new_auth_id']) && $core->auth->check('admin',$core->blog->id)) {
257               $new_user_id = $post['new_auth_id'];
258               $posts_ids = $ap->getIDs();
259               if (empty($posts_ids)) {
260                    throw new Exception(__('No entry selected'));
261               }
262               if ($core->getUser($new_user_id)->isEmpty()) {
263                    throw new Exception(__('This user does not exist'));
264               }
265               
266               $cur = $core->con->openCursor($core->prefix.'post');
267               $cur->user_id = $new_user_id;
268               $cur->update('WHERE post_id '.$core->con->in($posts_ids));
269               
270               $ap->redirect(array('upd' => 1),true);
271          } else {
272               $usersList = '';
273               if ($core->auth->check('admin',$core->blog->id)) {
274                    $params = array(
275                         'limit' => 100,
276                         'order' => 'nb_post DESC'
277                         );
278                    $rs = $core->getUsers($params);
279                    while ($rs->fetch())
280                    {
281                         $usersList .= ($usersList != '' ? ',' : '').'"'.$rs->user_id.'"';
282                    }
283               }
284               $ap->beginPage(
285                    dcPage::breadcrumb(
286                         array(
287                              html::escapeHTML($core->blog->name) => '',
288                              __('Entries') => $ap->getRedirection(array(),true),
289                              '<span class="page-title">'.__('Change author for entries').'</span>' => '')),
290                         dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
291                         '<script type="text/javascript">'."\n".
292                         "//<![CDATA[\n".
293                         'usersList = ['.$usersList.']'."\n".
294                         "\n//]]>\n".
295                         "</script>\n"
296               );
297
298               echo
299               '<form action="posts_actions.php" method="post">'.
300               $ap->getCheckboxes().
301               '<p><label for="new_auth_id" class="classic">'.__('New author (author ID):').'</label> '.
302               form::field('new_auth_id',20,255);
303               
304               echo
305                    $core->formNonce().$ap->getHiddenFields().
306                    form::hidden(array('action'),'author').
307                    '<input type="submit" value="'.__('Save').'" /></p>'.
308                    '</form>';
309               $ap->endPage();
310          }
311     }
312     public static function doChangePostLang($core, dcPostsActionsPage $ap, $post) {
313          $posts_ids = $ap->getIDs();
314          if (empty($posts_ids)) {
315               throw new Exception(__('No entry selected'));
316          }
317          if (isset($post['new_lang'])) {
318               $new_lang = $post['new_lang'];
319               $cur = $core->con->openCursor($core->prefix.'post');
320               $cur->post_lang = $new_lang;
321               $cur->update('WHERE post_id '.$core->con->in($posts_ids));
322               
323               $ap->redirect(array('upd' => 1),true);
324          } else {
325               $ap->beginPage(
326                    dcPage::breadcrumb(
327                         array(
328                              html::escapeHTML($core->blog->name) => '',
329                              __('Entries') => $ap->getRedirection(array(),true),
330                              '<span class="page-title">'.__('Change language for entries').'</span>' => ''
331               )));
332               # lang list
333               # Languages combo
334               $rs = $core->blog->getLangs(array('order'=>'asc'));
335               $all_langs = l10n::getISOcodes(0,1);
336               $lang_combo = array('' => '', __('Most used') => array(), __('Available') => l10n::getISOcodes(1,1));
337               while ($rs->fetch()) {
338                    if (isset($all_langs[$rs->post_lang])) {
339                         $lang_combo[__('Most used')][$all_langs[$rs->post_lang]] = $rs->post_lang;
340                         unset($lang_combo[__('Available')][$all_langs[$rs->post_lang]]);
341                    } else {
342                         $lang_combo[__('Most used')][$rs->post_lang] = $rs->post_lang;
343                    }
344               }
345               unset($all_langs);
346               unset($rs);
347               
348               echo
349               '<form action="posts_actions.php" method="post">'.
350               $ap->getCheckboxes().
351               
352               '<p><label for="new_lang" class="classic">'.__('Entry language:').'</label> '.
353               form::combo('new_lang',$lang_combo,'');
354               
355               echo
356                    $core->formNonce().$ap->getHiddenFields().
357                    form::hidden(array('action'),'lang').
358                    '<input type="submit" value="'.__('Save').'" /></p>'.
359                    '</form>';
360          }
361     }
362}
Note: See TracBrowser for help on using the repository browser.

Sites map