Dotclear

source: admin/index.php @ 1535:5878d21ef9b9

Revision 1535:5878d21ef9b9, 12.6 KB checked in by Lepeltier kévin, 11 years ago (diff)

ticket #1406
Déplacement du message d'erreur du dossier cache pendant la phase d'installation
Vers le Dashboard.
Ajout d'un message d'erreur concernant le dossier public, sur le Dashboard.
Deux phrases ajouté pour la traduction.
"Cache directory %s does not exist."
"Directory %s is not writable."

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# Documentation links
124$dashboardItem = 0;
125if ($core->auth->user_prefs->dashboard->doclinks) {
126     if (!empty($__resources['doc']))
127     {
128          $doc_links = '<h3>'.__('Documentation and support').'</h3><ul>';
129     
130          foreach ($__resources['doc'] as $k => $v) {
131               $doc_links .= '<li><a href="'.$v.'" title="'.$k.' '.__('(external link)').'">'.$k.'</a></li>';
132          }
133     
134          $doc_links .= '</ul>';
135          $__dashboard_items[$dashboardItem][] = $doc_links;
136          $dashboardItem++;
137     }
138}
139
140if ($core->auth->user_prefs->dashboard->dcnews) {
141     try
142     {
143          if (empty($__resources['rss_news'])) {
144               throw new Exception();
145          }
146     
147          $feed_reader = new feedReader;
148          $feed_reader->setCacheDir(DC_TPL_CACHE);
149          $feed_reader->setTimeout(2);
150          $feed_reader->setUserAgent('Dotclear - http://www.dotclear.org/');
151          $feed = $feed_reader->parse($__resources['rss_news']);
152          if ($feed)
153          {
154               $latest_news = '<h3>'.__('Latest news').'</h3><dl id="news">';
155               $i = 1;
156               foreach ($feed->items as $item)
157               {
158                    $dt = isset($item->link) ? '<a href="'.$item->link.'" title="'.$item->title.' '.__('(external link)').'">'.
159                         $item->title.'</a>' : $item->title;
160               
161                    if ($i < 3) {
162                         $latest_news .=
163                         '<dt>'.$dt.'</dt>'.
164                         '<dd><p><strong>'.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'</strong> '.
165                         '<em>'.text::cutString(html::clean($item->content),120).'...</em></p></dd>';
166                    } else {
167                         $latest_news .=
168                         '<dt>'.$dt.'</dt>'.
169                         '<dd>'.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'</dd>';
170                    }
171                    $i++;
172                    if ($i > 3) { break; }
173               }
174               $latest_news .= '</dl>';
175               $__dashboard_items[$dashboardItem][] = $latest_news;
176               $dashboardItem++;
177          }
178     }
179     catch (Exception $e) {}
180}
181
182$core->callBehavior('adminDashboardItems', $core, $__dashboard_items);
183
184# Dashboard content
185$dashboardContents = '';
186$__dashboard_contents = new ArrayObject(array(new ArrayObject,new ArrayObject));
187$core->callBehavior('adminDashboardContents', $core, $__dashboard_contents);
188
189/* DISPLAY
190-------------------------------------------------------- */
191dcPage::open(__('Dashboard'),
192     dcPage::jsToolBar().
193     dcPage::jsLoad('js/_index.js').
194     # --BEHAVIOR-- adminDashboardHeaders
195     $core->callBehavior('adminDashboardHeaders')
196);
197
198echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Dashboard').'</span></h2>';
199
200if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->blog_count > 1) {
201     echo
202     '<p><a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a></p>';
203}
204
205if ($core->blog->status == 0) {
206     echo '<p class="static-msg">'.__('This blog is offline').'</p>';
207} elseif ($core->blog->status == -1) {
208     echo '<p class="static-msg">'.__('This blog is removed').'</p>';
209}
210
211if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
212     echo
213     '<p class="static-msg">'.
214     sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_URL').
215     ' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
216     '</p>';
217}
218
219if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
220     echo
221     '<p class="static-msg">'.
222     sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_MAILFROM').
223     ' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
224     '</p>';
225}
226
227$err = array();
228
229# Check cache directory
230if (!is_dir(DC_TPL_CACHE)) {
231     $err[] = '<p>'.sprintf(__('Cache directory %s does not exist.'),DC_TPL_CACHE).'</p>';
232} else if (!is_writable(DC_TPL_CACHE)) {
233     $err[] = '<p>'.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'</p>';
234}
235
236# Check public directory
237if (!is_dir($core->blog->public_path)) {
238     $err[] = '<p>'.sprintf(__('Directory %s does not exist.'),$core->blog->public_path).'</p>';
239} else if (!is_writable($core->blog->public_path)) {
240     $err[] = '<p>'.sprintf(__('Directory %s is not writable.'),$core->blog->public_path).'</p>';
241}
242
243# Error list
244if (count($err) > 0) {
245     echo '<div class="error"><p><strong>Erreur&nbsp;:</strong></p>'.
246     '<ul><li>'.implode("</li><li>",$err).'</li></ul></div>';
247}
248
249# Plugins install messages
250if (!empty($plugins_install['success']))
251{
252     echo '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
253     foreach ($plugins_install['success'] as $k => $v) {
254          echo '<li>'.$k.'</li>';
255     }
256     echo '</ul></div>';
257}
258if (!empty($plugins_install['failure']))
259{
260     echo '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
261     foreach ($plugins_install['failure'] as $k => $v) {
262          echo '<li>'.$k.' ('.$v.')</li>';
263     }
264     echo '</ul></div>';
265}
266
267# Dashboard columns (processed first, as we need to know the result before displaying the icons.)
268$dashboardItems = '';
269
270# Dotclear updates notifications
271if ($core->auth->isSuperAdmin() && is_readable(DC_DIGESTS))
272{
273     $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
274     $new_v = $updater->check(DC_VERSION);
275     $version_info = $new_v ? $updater->getInfoURL() : '';
276     
277     if ($updater->getNotify() && $new_v) {
278          $dashboardItems .=
279          '<div id="upg-notify" class="static-msg"><p>'.sprintf(__('Dotclear %s is available!'),$new_v).'</p> '.
280          '<ul><li><strong><a href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a></strong>'.
281          '</li><li><a href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
282          ($version_info ? ' </li><li><a href="'.$version_info.'">'.__('information about this version').'</a>' : '').
283          '</li></ul></div>';
284     }
285}
286
287# Errors modules notifications
288if ($core->auth->isSuperAdmin())
289{
290     $list = array();
291     foreach ($core->plugins->getErrors() as $k => $error) {
292          $list[] = '<li>'.$error.'</li>';
293     }
294     
295     if (count($list) > 0) {
296          $dashboardItems .=
297          '<div id="module-errors" class="error"><p>'.__('Some plugins are installed twice:').'</p> '.
298          '<ul>'.implode("\n",$list).'</ul></div>';
299     }
300     
301}
302
303foreach ($__dashboard_items as $i)
304{   
305     if ($i->count() > 0)
306     {
307          $dashboardItems .= '<div>';
308          foreach ($i as $v) {
309               $dashboardItems .= $v;
310          }
311          $dashboardItems .= '</div>';
312     }
313}
314
315# Dashboard icons
316echo '<div id="dashboard-main"'.($dashboardItems ? '' : ' class="fullwidth"').'><div id="icons">';
317foreach ($__dashboard_icons as $i)
318{
319     echo
320     '<p><a href="'.$i[1].'"><img src="'.dc_admin_icon_url($i[2]).'" alt="" />'.
321     '<br /><span>'.$i[0].'</span></a></p>';
322}
323echo '</div>';
324
325if ($core->auth->user_prefs->dashboard->quickentry) {
326     if ($core->auth->check('usage,contentadmin',$core->blog->id))
327     {
328          $categories_combo = array('&nbsp;' => '');
329          try {
330               $categories = $core->blog->getCategories(array('post_type'=>'post'));
331               while ($categories->fetch()) {
332                    $categories_combo[] = new formSelectOption(
333                         str_repeat('&nbsp;&nbsp;',$categories->level-1).
334                         ($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
335                         $categories->cat_id
336                    );
337               }
338          } catch (Exception $e) { }
339     
340          echo
341          '<div id="quick">'.
342          '<h3>'.__('Quick entry').'</h3>'.
343          '<form id="quick-entry" action="post.php" method="post">'.
344          '<fieldset><legend>'.__('New entry').'</legend>'.
345          '<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').
346          form::field('post_title',20,255,'','maximal').
347          '</label></p>'.
348          '<p class="area"><label class="required" '.
349          'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
350          form::textarea('post_content',50,7).
351          '</p>'.
352          '<p><label for="cat_id" class="classic">'.__('Category:').' '.
353          form::combo('cat_id',$categories_combo).'</label></p>'.
354          '<p><input type="submit" value="'.__('Save').'" name="save" /> '.
355          ($core->auth->check('publish',$core->blog->id)
356               ? '<input type="hidden" value="'.__('Save and publish').'" name="save-publish" />'
357               : '').
358          $core->formNonce().
359          form::hidden('post_status',-2).
360          form::hidden('post_format',$core->auth->getOption('post_format')).
361          form::hidden('post_excerpt','').
362          form::hidden('post_lang',$core->auth->getInfo('user_lang')).
363          form::hidden('post_notes','').
364          '</p>'.
365          '</fieldset>'.
366          '</form>'.
367          '</div>';
368     }
369}
370
371foreach ($__dashboard_contents as $i)
372{   
373     if ($i->count() > 0)
374     {
375          $dashboardContents .= '<div>';
376          foreach ($i as $v) {
377               $dashboardContents .= $v;
378          }
379          $dashboardContents .= '</div>';
380     }
381}
382echo ($dashboardContents ? '<div id="dashboard-contents">'.$dashboardContents.'</div>' : '');
383
384echo '</div>';
385
386echo ($dashboardItems ? '<div id="dashboard-items">'.$dashboardItems.'</div>' : '');
387
388dcPage::close();
389?>
Note: See TracBrowser for help on using the repository browser.

Sites map