Dotclear

source: admin/index.php @ 1698:add60e1e9451

Revision 1698:add60e1e9451, 14.0 KB checked in by Anne Kozlika <kozlika@…>, 11 years ago (diff)

Utilisateurs du blog: distribution horizontale des blocs, ajout d'un lien mailto à la demande générale de Pep (pour super admin seulement), icône spécifique super admin, admin.

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 -----------------------------------------
12
13if (!empty($_GET['pf'])) {
14     require dirname(__FILE__).'/../inc/load_plugin_file.php';
15     exit;
16}
17
18require dirname(__FILE__).'/../inc/admin/prepend.php';
19
20if (!empty($_GET['default_blog'])) {
21     try {
22          $core->setUserDefaultBlog($core->auth->userID(),$core->blog->id);
23          http::redirect('index.php');
24     } catch (Exception $e) {
25          $core->error->add($e->getMessage());
26     }
27}
28
29dcPage::check('usage,contentadmin');
30
31# Logout
32if (!empty($_GET['logout'])) {
33     $core->session->destroy();
34     if (isset($_COOKIE['dc_admin'])) {
35          unset($_COOKIE['dc_admin']);
36          setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL);
37     }
38     http::redirect('auth.php');
39     exit;
40}
41
42# Plugin install
43$plugins_install = $core->plugins->installModules();
44
45# Check dashboard module prefs
46$ws = $core->auth->user_prefs->addWorkspace('dashboard');
47if (!$core->auth->user_prefs->dashboard->prefExists('doclinks')) {
48     if (!$core->auth->user_prefs->dashboard->prefExists('doclinks',true)) {
49          $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true);
50     }
51     $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean');
52}
53if (!$core->auth->user_prefs->dashboard->prefExists('dcnews')) {
54     if (!$core->auth->user_prefs->dashboard->prefExists('dcnews',true)) {
55          $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true);
56     }
57     $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean');
58}
59if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) {
60     if (!$core->auth->user_prefs->dashboard->prefExists('quickentry',true)) {
61          $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true);
62     }
63     $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean');
64}
65
66# Dashboard icons
67$__dashboard_icons = new ArrayObject();
68
69# Dashboard favorites
70$post_count = $core->blog->getPosts(array(),true)->f(0);
71$str_entries = ($post_count > 1) ? __('%d entries') : __('%d entry');
72
73$comment_count = $core->blog->getComments(array(),true)->f(0);
74$str_comments = ($comment_count > 1) ? __('%d comments') : __('%d comment');
75
76$ws = $core->auth->user_prefs->addWorkspace('favorites');
77$count = 0;
78foreach ($ws->dumpPrefs() as $k => $v) {
79     // User favorites only
80     if (!$v['global']) {
81          $fav = unserialize($v['value']);
82          if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) {
83               if (dc_valid_fav($fav['url'])) {
84                    $count++;
85                    $title = ($fav['name'] == 'posts' ? sprintf($str_entries,$post_count) : 
86                         ($fav['name'] == 'comments' ? sprintf($str_comments,$comment_count) : $fav['title']));
87                    $__dashboard_icons[$fav['name']] = new ArrayObject(array(__($title),$fav['url'],$fav['large-icon']));
88
89                    # Let plugins set their own title for favorite on dashboard
90                    $core->callBehavior('adminDashboardFavsIcon',$core,$fav['name'],$__dashboard_icons[$fav['name']]);
91               }
92          }
93     }
94}   
95if (!$count) {
96     // Global favorites if any
97     foreach ($ws->dumpPrefs() as $k => $v) {
98          $fav = unserialize($v['value']);
99          if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) {
100               if (dc_valid_fav($fav['url'])) {
101                    $count++;
102                    $title = ($fav['name'] == 'posts' ? sprintf($str_entries,$post_count) : 
103                         ($fav['name'] == 'comments' ? sprintf($str_comments,$comment_count) : $fav['title']));
104                    $__dashboard_icons[$fav['name']] = new ArrayObject(array(__($title),$fav['url'],$fav['large-icon']));
105
106                    # Let plugins set their own title for favorite on dashboard
107                    $core->callBehavior('adminDashboardFavsIcon',$core,$fav['name'],$__dashboard_icons[$fav['name']]);
108               }
109          }
110     }
111}
112if (!$count) {
113     // No user or global favorites, add "user pref" and "new entry" fav
114     if ($core->auth->check('usage,contentadmin',$core->blog->id)) {
115          $__dashboard_icons['new_post'] = new ArrayObject(array(__('New entry'),'post.php','images/menu/edit-b.png'));
116     }
117     $__dashboard_icons['prefs'] = new ArrayObject(array(__('My preferences'),'preferences.php','images/menu/user-pref-b.png'));
118}
119
120# Latest news for dashboard
121$__dashboard_items = new ArrayObject(array(new ArrayObject,new ArrayObject));
122
123$dashboardItem = 0;
124
125if ($core->auth->user_prefs->dashboard->dcnews) {
126     try
127     {
128          if (empty($__resources['rss_news'])) {
129               throw new Exception();
130          }
131     
132          $feed_reader = new feedReader;
133          $feed_reader->setCacheDir(DC_TPL_CACHE);
134          $feed_reader->setTimeout(2);
135          $feed_reader->setUserAgent('Dotclear - http://www.dotclear.org/');
136          $feed = $feed_reader->parse($__resources['rss_news']);
137          if ($feed)
138          {
139               $latest_news = '<h3>'.__('Latest news').'</h3><dl id="news">';
140               $i = 1;
141               foreach ($feed->items as $item)
142               {
143                    $dt = isset($item->link) ? '<a href="'.$item->link.'" title="'.$item->title.' '.__('(external link)').'">'.
144                         $item->title.'</a>' : $item->title;
145               
146                    if ($i < 3) {
147                         $latest_news .=
148                         '<dt>'.$dt.'</dt>'.
149                         '<dd><p><strong>'.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'</strong> '.
150                         '<em>'.text::cutString(html::clean($item->content),120).'...</em></p></dd>';
151                    } else {
152                         $latest_news .=
153                         '<dt>'.$dt.'</dt>'.
154                         '<dd>'.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'</dd>';
155                    }
156                    $i++;
157                    if ($i > 3) { break; }
158               }
159               $latest_news .= '</dl>';
160               $__dashboard_items[$dashboardItem][] = $latest_news;
161               $dashboardItem++;
162          }
163     }
164     catch (Exception $e) {}
165}
166
167# Documentation links
168if ($core->auth->user_prefs->dashboard->doclinks) {
169     if (!empty($__resources['doc']))
170     {
171          $doc_links = '<h3>'.__('Documentation and support').'</h3><ul>';
172     
173          foreach ($__resources['doc'] as $k => $v) {
174               $doc_links .= '<li><a href="'.$v.'" title="'.$k.' '.__('(external link)').'">'.$k.'</a></li>';
175          }
176     
177          $doc_links .= '</ul>';
178          $__dashboard_items[$dashboardItem][] = $doc_links;
179          $dashboardItem++;
180     }
181}
182
183$core->callBehavior('adminDashboardItems', $core, $__dashboard_items);
184
185# Dashboard content
186$dashboardContents = '';
187$__dashboard_contents = new ArrayObject(array(new ArrayObject,new ArrayObject));
188$core->callBehavior('adminDashboardContents', $core, $__dashboard_contents);
189
190/* DISPLAY
191-------------------------------------------------------- */
192dcPage::open(__('Dashboard'),
193     dcPage::jsToolBar().
194     dcPage::jsLoad('js/_index.js').
195     # --BEHAVIOR-- adminDashboardHeaders
196     $core->callBehavior('adminDashboardHeaders'),
197     dcPage::breadcrumb(
198          array(
199          '<span class="page-title">'.__('Dashboard').' : '.html::escapeHTML($core->blog->name).'</span>' => ''
200          ),
201          false)
202);
203
204# Dotclear updates notifications
205if ($core->auth->isSuperAdmin() && is_readable(DC_DIGESTS))
206{
207     $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
208     $new_v = $updater->check(DC_VERSION);
209     $version_info = $new_v ? $updater->getInfoURL() : '';
210
211     if ($updater->getNotify() && $new_v) {
212          echo
213          '<div class="dc-update"><h3>'.sprintf(__('Dotclear %s is available!'),$new_v).'</h3> '.
214          '<p><a class="button submit" href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a> '.
215          '<a href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
216          ($version_info ? ' </p>'.
217          '<p><a href="'.$version_info.'" class="info">'.__('information about this version').'</a>' : '').'</p>'.
218          '</div>';
219     }
220}
221
222if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->blog_count > 1) {
223     echo
224     '<p><a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a></p>';
225}
226
227if ($core->blog->status == 0) {
228     echo '<p class="static-msg">'.__('This blog is offline').'.</p>';
229} elseif ($core->blog->status == -1) {
230     echo '<p class="static-msg">'.__('This blog is removed').'.</p>';
231}
232
233if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
234     echo
235     '<p class="static-msg">'.
236     sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_URL').
237     ' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
238     '</p>';
239}
240
241if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
242     echo
243     '<p class="static-msg">'.
244     sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_MAILFROM').
245     ' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
246     '</p>';
247}
248
249$err = array();
250
251# Check cache directory
252if (!is_dir(DC_TPL_CACHE)) {
253     $err[] = '<p>'.sprintf(__('Cache directory %s does not exist.'),DC_TPL_CACHE).'</p>';
254} else if (!is_writable(DC_TPL_CACHE)) {
255     $err[] = '<p>'.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'</p>';
256}
257
258# Check public directory
259if (!is_dir($core->blog->public_path)) {
260     $err[] = '<p>'.sprintf(__('Directory %s does not exist.'),$core->blog->public_path).'</p>';
261} else if (!is_writable($core->blog->public_path)) {
262     $err[] = '<p>'.sprintf(__('Directory %s is not writable.'),$core->blog->public_path).'</p>';
263}
264
265# Error list
266if (count($err) > 0) {
267     echo '<div class="error"><p><strong>Erreur&nbsp;:</strong></p>'.
268     '<ul><li>'.implode("</li><li>",$err).'</li></ul></div>';
269}
270
271# Plugins install messages
272if (!empty($plugins_install['success']))
273{
274     echo '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
275     foreach ($plugins_install['success'] as $k => $v) {
276          echo '<li>'.$k.'</li>';
277     }
278     echo '</ul></div>';
279}
280if (!empty($plugins_install['failure']))
281{
282     echo '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
283     foreach ($plugins_install['failure'] as $k => $v) {
284          echo '<li>'.$k.' ('.$v.')</li>';
285     }
286     echo '</ul></div>';
287}
288
289# Dashboard columns (processed first, as we need to know the result before displaying the icons.)
290$dashboardItems = '';
291
292# Dotclear updates notifications
293if ($core->auth->isSuperAdmin() && is_readable(DC_DIGESTS))
294{
295     $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
296     $new_v = $updater->check(DC_VERSION);
297     $version_info = $new_v ? $updater->getInfoURL() : '';
298     
299     if ($updater->getNotify() && $new_v) {
300          $dashboardItems .=
301          '<div id="upg-notify" class="static-msg"><p>'.sprintf(__('Dotclear %s is available!'),$new_v).'</p> '.
302          '<ul><li><strong><a href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a></strong>'.
303          '</li><li><a href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
304          ($version_info ? ' </li><li>'.sprintf(__('<a href=\"%s\">Information about this version</a>.'),$version_info) : '').
305          '</li></ul></div>';
306     }
307}
308
309# Errors modules notifications
310if ($core->auth->isSuperAdmin())
311{
312     $list = array();
313     foreach ($core->plugins->getErrors() as $k => $error) {
314          $list[] = '<li>'.$error.'</li>';
315     }
316     
317     if (count($list) > 0) {
318          $dashboardItems .=
319          '<div id="module-errors" class="error"><p>'.__('Some plugins are installed twice:').'</p> '.
320          '<ul>'.implode("\n",$list).'</ul></div>';
321     }
322     
323}
324
325foreach ($__dashboard_items as $i)
326{   
327     if ($i->count() > 0)
328     {
329          $dashboardItems .= '<div class="db-item">';
330          foreach ($i as $v) {
331               $dashboardItems .= $v;
332          }
333          $dashboardItems .= '</div>';
334     }
335}
336
337# Dashboard icons
338echo '<div id="dashboard-main"'.($dashboardItems ? '' : ' class="fullwidth"').'><div id="icons">';
339foreach ($__dashboard_icons as $i)
340{
341     echo
342     '<p><a href="'.$i[1].'"><img src="'.dc_admin_icon_url($i[2]).'" alt="" />'.
343     '<br /><span>'.$i[0].'</span></a></p>';
344}
345echo '</div>';
346
347if ($core->auth->user_prefs->dashboard->quickentry) {
348     if ($core->auth->check('usage,contentadmin',$core->blog->id))
349     {
350          # Getting categories
351          $categories_combo = array(__('(No cat)') => '');
352          try {
353               $categories = $core->blog->getCategories(array('post_type'=>'post'));
354               if (!$categories->isEmpty()) {
355                    while ($categories->fetch()) {
356                         $catparents_combo[] = $categories_combo[] = new formSelectOption(
357                              str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
358                              $categories->cat_id
359                         );
360                    }
361               }
362          } catch (Exception $e) { }
363     
364          echo
365          '<div id="quick">'.
366          '<h3>'.__('Quick entry').'</h3>'.
367          '<form id="quick-entry" action="post.php" method="post" class="fieldset">'.
368          '<h4>'.__('New entry').'</h4>'.
369          '<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label>'.
370          form::field('post_title',20,255,'','maximal').
371          '</p>'.
372          '<p class="area"><label class="required" '.
373          'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
374          form::textarea('post_content',50,7).
375          '</p>'.
376          '<p><label for="cat_id" class="classic">'.__('Category:').'</label> '.
377          form::combo('cat_id',$categories_combo).'</p>'.
378          ($core->auth->check('categories', $core->blog->id)
379               ? '<div>'.
380               '<p id="new_cat" class="q-cat">'.__('Add a new category').'</p>'.
381               '<p class="q-cat"><label for="new_cat_title">'.__('Title:').'</label> '.
382               form::field('new_cat_title',30,255,'','').'</p>'.
383               '<p class="q-cat"><label for="new_cat_parent">'.__('Parent:').'</label> '.
384               form::combo('new_cat_parent',$categories_combo,'','').
385               '</p>'.
386               '<p class="form-note info clear">'.__('This category will be created when you will save your post.').'</p>'.
387               '</div>'
388               : '').
389          '<p><input type="submit" value="'.__('Save').'" name="save" /> '.
390          ($core->auth->check('publish',$core->blog->id)
391               ? '<input type="hidden" value="'.__('Save and publish').'" name="save-publish" />'
392               : '').
393          $core->formNonce().
394          form::hidden('post_status',-2).
395          form::hidden('post_format',$core->auth->getOption('post_format')).
396          form::hidden('post_excerpt','').
397          form::hidden('post_lang',$core->auth->getInfo('user_lang')).
398          form::hidden('post_notes','').
399          '</p>'.
400          '</form>'.
401          '</div>';
402     }
403}
404
405foreach ($__dashboard_contents as $i)
406{   
407     if ($i->count() > 0)
408     {
409          $dashboardContents .= '<div>';
410          foreach ($i as $v) {
411               $dashboardContents .= $v;
412          }
413          $dashboardContents .= '</div>';
414     }
415}
416echo ($dashboardContents ? '<div id="dashboard-contents">'.$dashboardContents.'</div>' : '');
417
418echo '</div>';
419
420echo ($dashboardItems ? '<div id="dashboard-items">'.$dashboardItems.'</div>' : '');
421
422dcPage::close();
423?>
Note: See TracBrowser for help on using the repository browser.

Sites map