Dotclear

source: admin/index.php @ 3725:b47f38c701ee

Revision 3725:b47f38c701ee, 13.1 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Use specialized input fields (color, email, url, number, …) where is relevant

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
18if (!empty($_GET['vf'])) {
19    require dirname(__FILE__) . '/../inc/load_var_file.php';
20    exit;
21}
22
23require dirname(__FILE__) . '/../inc/admin/prepend.php';
24
25if (!empty($_GET['default_blog'])) {
26    try {
27        $core->setUserDefaultBlog($core->auth->userID(), $core->blog->id);
28        $core->adminurl->redirect("admin.home");
29    } catch (Exception $e) {
30        $core->error->add($e->getMessage());
31    }
32}
33
34dcPage::check('usage,contentadmin');
35
36if ($core->plugins->disableDepModules($core->adminurl->get('admin.home', array()))) {
37    exit;
38}
39
40# Logout
41if (!empty($_GET['logout'])) {
42    $core->session->destroy();
43    if (isset($_COOKIE['dc_admin'])) {
44        unset($_COOKIE['dc_admin']);
45        setcookie('dc_admin', false, -600, '', '', DC_ADMIN_SSL);
46    }
47    $core->adminurl->redirect("admin.auth");
48    exit;
49}
50
51# Plugin install
52$plugins_install = $core->plugins->installModules();
53
54# Check dashboard module prefs
55$ws = $core->auth->user_prefs->addWorkspace('dashboard');
56if (!$core->auth->user_prefs->dashboard->prefExists('doclinks')) {
57    if (!$core->auth->user_prefs->dashboard->prefExists('doclinks', true)) {
58        $core->auth->user_prefs->dashboard->put('doclinks', true, 'boolean', '', null, true);
59    }
60    $core->auth->user_prefs->dashboard->put('doclinks', true, 'boolean');
61}
62if (!$core->auth->user_prefs->dashboard->prefExists('dcnews')) {
63    if (!$core->auth->user_prefs->dashboard->prefExists('dcnews', true)) {
64        $core->auth->user_prefs->dashboard->put('dcnews', true, 'boolean', '', null, true);
65    }
66    $core->auth->user_prefs->dashboard->put('dcnews', true, 'boolean');
67}
68if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) {
69    if (!$core->auth->user_prefs->dashboard->prefExists('quickentry', true)) {
70        $core->auth->user_prefs->dashboard->put('quickentry', false, 'boolean', '', null, true);
71    }
72    $core->auth->user_prefs->dashboard->put('quickentry', false, 'boolean');
73}
74if (!$core->auth->user_prefs->dashboard->prefExists('nodcupdate')) {
75    if (!$core->auth->user_prefs->dashboard->prefExists('nodcupdate', true)) {
76        $core->auth->user_prefs->dashboard->put('nodcupdate', false, 'boolean', '', null, true);
77    }
78    $core->auth->user_prefs->dashboard->put('nodcupdate', false, 'boolean');
79}
80
81// Handle folded/unfolded sections in admin from user preferences
82$ws = $core->auth->user_prefs->addWorkspace('toggles');
83if (!$core->auth->user_prefs->toggles->prefExists('unfolded_sections')) {
84    $core->auth->user_prefs->toggles->put('unfolded_sections', '', 'string', 'Folded sections in admin', null, true);
85}
86
87# Dashboard icons
88$__dashboard_icons = new ArrayObject();
89
90$favs = $core->favs->getUserFavorites();
91$core->favs->appendDashboardIcons($__dashboard_icons);
92
93# Check plugins and themes update from repository
94$checkStoreUpdate = function ($mod, $url, $img, $icon) {
95    $repo = new dcStore($mod, $url);
96    $upd  = $repo->get(true);
97    if (!empty($upd)) {
98        $icon[0] .= '<br />' . sprintf(__('An update is available', '%s updates are available.', count($upd)), count($upd));
99        $icon[1] .= '#update';
100        $icon[2] = 'images/menu/' . $img . '-b-update.png';
101    }
102};
103if (isset($__dashboard_icons['plugins'])) {
104    $checkStoreUpdate($core->plugins, $core->blog->settings->system->store_plugin_url, 'plugins', $__dashboard_icons['plugins']);
105}
106if (isset($__dashboard_icons['blog_theme'])) {
107    $themes = new dcThemes($core);
108    $themes->loadModules($core->blog->themes_path, null);
109    $checkStoreUpdate($themes, $core->blog->settings->system->store_theme_url, 'blog-theme', $__dashboard_icons['blog_theme']);
110}
111
112# Latest news for dashboard
113$__dashboard_items = new ArrayObject(array(new ArrayObject(), new ArrayObject()));
114
115$dashboardItem = 0;
116
117# Documentation links
118if ($core->auth->user_prefs->dashboard->doclinks) {
119    if (!empty($__resources['doc'])) {
120        $doc_links = '<div class="box small dc-box"><h3>' . __('Documentation and support') . '</h3><ul>';
121
122        foreach ($__resources['doc'] as $k => $v) {
123            $doc_links .= '<li><a class="outgoing" href="' . $v . '" title="' . $k . '">' . $k .
124                ' <img src="images/outgoing-blue.png" alt="" /></a></li>';
125        }
126
127        $doc_links .= '</ul></div>';
128        $__dashboard_items[$dashboardItem][] = $doc_links;
129        $dashboardItem++;
130    }
131}
132
133$core->callBehavior('adminDashboardItems', $core, $__dashboard_items);
134
135# Dashboard content
136$__dashboard_contents = new ArrayObject(array(new ArrayObject, new ArrayObject));
137$core->callBehavior('adminDashboardContents', $core, $__dashboard_contents);
138
139# Editor stuff
140$admin_post_behavior = '';
141if ($core->auth->user_prefs->dashboard->quickentry) {
142    if ($core->auth->check('usage,contentadmin', $core->blog->id)) {
143        $post_format = $core->auth->getOption('post_format');
144        $post_editor = $core->auth->getOption('editor');
145        if ($post_editor && !empty($post_editor[$post_format])) {
146            // context is not post because of tags not available
147            $admin_post_behavior = $core->callBehavior('adminPostEditor', $post_editor[$post_format], 'quickentry', array('#post_content'), $post_format);
148        }
149    }
150}
151
152/* DISPLAY
153-------------------------------------------------------- */
154dcPage::open(__('Dashboard'),
155    dcPage::jsLoad('js/_index.js') .
156    $admin_post_behavior .
157    # --BEHAVIOR-- adminDashboardHeaders
158    $core->callBehavior('adminDashboardHeaders'),
159    dcPage::breadcrumb(
160        array(
161            __('Dashboard') . ' : ' . html::escapeHTML($core->blog->name) => ''
162        ),
163        array('home_link' => false)
164    )
165);
166
167if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->getBlogCount() > 1) {
168    echo
169    '<p><a href="' . $core->adminurl->get("admin.home", array('default_blog' => 1)) . '" class="button">' . __('Make this blog my default blog') . '</a></p>';
170}
171
172if ($core->blog->status == 0) {
173    echo '<p class="static-msg">' . __('This blog is offline') . '.</p>';
174} elseif ($core->blog->status == -1) {
175    echo '<p class="static-msg">' . __('This blog is removed') . '.</p>';
176}
177
178if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
179    echo
180    '<p class="static-msg">' .
181    sprintf(__('%s is not defined, you should edit your configuration file.'), 'DC_ADMIN_URL') .
182    ' ' . __('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.') .
183        '</p>';
184}
185
186if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
187    echo
188    '<p class="static-msg">' .
189    sprintf(__('%s is not defined, you should edit your configuration file.'), 'DC_ADMIN_MAILFROM') .
190    ' ' . __('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.') .
191        '</p>';
192}
193
194$err = array();
195
196# Check cache directory
197if ($core->auth->isSuperAdmin()) {
198    if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) {
199        $err[] = '<p>' . __("The cache directory does not exist or is not writable. You must create this directory with sufficient rights and affect this location to \"DC_TPL_CACHE\" in inc/config.php file.") . '</p>';
200    }
201} else {
202    if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) {
203        $err[] = '<p>' . __("The cache directory does not exist or is not writable. You should contact your administrator.") . '</p>';
204    }
205}
206
207# Check public directory
208if ($core->auth->isSuperAdmin()) {
209    if (!is_dir($core->blog->public_path) || !is_writable($core->blog->public_path)) {
210        $err[] = '<p>' . __("There is no writable directory /public/ at the location set in about:config \"public_path\". You must create this directory with sufficient rights (or change this setting).") . '</p>';
211    }
212} else {
213    if (!is_dir($core->blog->public_path) || !is_writable($core->blog->public_path)) {
214        $err[] = '<p>' . __("There is no writable root directory for the media manager. You should contact your administrator.") . '</p>';
215    }
216}
217
218# Error list
219if (count($err) > 0) {
220    echo '<div class="error"><p><strong>' . __('Error:') . '</strong></p>' .
221    '<ul><li>' . implode("</li><li>", $err) . '</li></ul></div>';
222}
223
224# Plugins install messages
225if (!empty($plugins_install['success'])) {
226    echo '<div class="success">' . __('Following plugins have been installed:') . '<ul>';
227    foreach ($plugins_install['success'] as $k => $v) {
228        echo '<li>' . $k . '</li>';
229    }
230    echo '</ul></div>';
231}
232if (!empty($plugins_install['failure'])) {
233    echo '<div class="error">' . __('Following plugins have not been installed:') . '<ul>';
234    foreach ($plugins_install['failure'] as $k => $v) {
235        echo '<li>' . $k . ' (' . $v . ')</li>';
236    }
237    echo '</ul></div>';
238}
239# Errors modules notifications
240if ($core->auth->isSuperAdmin()) {
241    $list = $core->plugins->getErrors();
242    if (!empty($list)) {
243        echo
244        '<div class="error" id="module-errors" class="error"><p>' . __('Errors have occured with following plugins:') . '</p> ' .
245        '<ul><li>' . implode("</li>\n<li>", $list) . '</li></ul></div>';
246    }
247}
248
249# Dashboard items and contents (processed first, as we need to know the result before displaying the icons.)
250$dashboardItems = '';
251foreach ($__dashboard_items as $i) {
252    foreach ($i as $v) {
253        $dashboardItems .= $v;
254    }
255}
256$dashboardContents = '';
257foreach ($__dashboard_contents as $i) {
258    foreach ($i as $v) {
259        $dashboardContents .= $v;
260    }
261}
262
263# Dashboard elements: icons then boxes (items then contents)
264echo '<div id="dashboard-main">';
265
266if (!$core->auth->user_prefs->dashboard->nofavicons) {
267    # Dashboard icons
268    echo '<div id="icons">';
269    foreach ($__dashboard_icons as $i) {
270        echo
271        '<p><a href="' . $i[1] . '"><img src="' . dc_admin_icon_url($i[2]) . '" alt="" />' .
272            '<br /><span>' . $i[0] . '</span></a></p>';
273    }
274    echo '</div>';
275}
276
277if ($core->auth->user_prefs->dashboard->quickentry) {
278    if ($core->auth->check('usage,contentadmin', $core->blog->id)) {
279        # Getting categories
280        $categories_combo = dcAdminCombos::getCategoriesCombo(
281            $core->blog->getCategories(array())
282        );
283
284        echo
285        '<div id="quick">' .
286        '<h3>' . __('Quick entry') . sprintf(' &rsaquo; %s', $core->auth->getOption('post_format')) . '</h3>' .
287        '<form id="quick-entry" action="' . $core->adminurl->get('admin.post') . '" method="post" class="fieldset">' .
288        '<h4>' . __('New entry') . '</h4>' .
289        '<p class="col"><label for="post_title" class="required"><abbr title="' . __('Required field') . '">*</abbr> ' . __('Title:') . '</label>' .
290        form::field('post_title', 20, 255, array(
291            'class'      => 'maximal',
292            'extra_html' => 'required placeholder="' . __('Title') . '"'
293        )) .
294        '</p>' .
295        '<p class="area"><label class="required" ' .
296        'for="post_content"><abbr title="' . __('Required field') . '">*</abbr> ' . __('Content:') . '</label> ' .
297        form::textarea('post_content', 50, 10, array('extra_html' => 'required placeholder="' . __('Content') . '"')) .
298        '</p>' .
299        '<p><label for="cat_id" class="classic">' . __('Category:') . '</label> ' .
300        form::combo('cat_id', $categories_combo) . '</p>' .
301        ($core->auth->check('categories', $core->blog->id)
302            ? '<div>' .
303            '<p id="new_cat" class="q-cat">' . __('Add a new category') . '</p>' .
304            '<p class="q-cat"><label for="new_cat_title">' . __('Title:') . '</label> ' .
305            form::field('new_cat_title', 30, 255) . '</p>' .
306            '<p class="q-cat"><label for="new_cat_parent">' . __('Parent:') . '</label> ' .
307            form::combo('new_cat_parent', $categories_combo) .
308            '</p>' .
309            '<p class="form-note info clear">' . __('This category will be created when you will save your post.') . '</p>' .
310            '</div>'
311            : '') .
312        '<p><input type="submit" value="' . __('Save') . '" name="save" /> ' .
313        ($core->auth->check('publish', $core->blog->id)
314            ? '<input type="hidden" value="' . __('Save and publish') . '" name="save-publish" />'
315            : '') .
316        $core->formNonce() .
317        form::hidden('post_status', -2) .
318        form::hidden('post_format', $core->auth->getOption('post_format')) .
319        form::hidden('post_excerpt', '') .
320        form::hidden('post_lang', $core->auth->getInfo('user_lang')) .
321        form::hidden('post_notes', '') .
322        '</p>' .
323        '</form>' .
324        '</div>';
325        }
326    }
327
328    if ($dashboardContents != '' || $dashboardItems != '') {
329        echo
330            '<div id="dashboard-boxes">' .
331            ($dashboardItems != '' ? '<div class="db-items">' . $dashboardItems . '</div>' : '') .
332            ($dashboardContents != '' ? '<div class="db-contents">' . $dashboardContents . '</div>' : '') .
333            '</div>';
334    }
335
336    echo '</div>'; #end dashboard-main
337    dcPage::helpBlock('core_dashboard');
338    dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map