Seditio Source
Root |
./othercms/dotclear-2.22/admin/blog_theme.php
<?php
/**
 * @package Dotclear
 * @subpackage Backend
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 *
 * @var dcCore $core
 */
require __DIR__ . '/../inc/admin/prepend.php';

dcPage::check('admin');

# -- Loading themes --
$core->themes = new dcThemes($core);
$core->themes->loadModules($core->blog->themes_path, null);

# -- Page helper --
$list = new adminThemesList(
   
$core->themes,
   
$core->blog->themes_path,
   
$core->blog->settings->system->store_theme_url,
    !empty(
$_GET['nocache'])
);
adminThemesList::$distributed_modules = explode(',', DC_DISTRIB_THEMES);

if (
$core->themes->disableDepModules($core->adminurl->get('admin.blog.theme', []))) {
    exit;
}

# -- Theme screenshot --
if (!empty($_GET['shot'])) {
   
$f = path::real(
        empty(
$_GET['src']) ?
       
$core->blog->themes_path . '/' . $_GET['shot'] . '/screenshot.jpg' :
       
$core->blog->themes_path . '/' . $_GET['shot'] . '/' . path::clean($_GET['src'])
    );

    if (!
file_exists($f)) {
       
$f = __DIR__ . '/images/noscreenshot.png';
    }

   
http::cache(array_merge([$f], get_included_files()));

   
header('Content-Type: ' . files::getMimeType($f));
   
header('Content-Length: ' . filesize($f));
   
readfile($f);

    exit;
}

# -- Display module configuration page --
if ($list->setConfiguration($core->blog->settings->system->theme)) {

   
# Get content before page headers
   
include $list->includeConfiguration();

   
# Gather content
   
$list->getConfiguration();

   
# Display page
   
dcPage::open(
       
__('Blog appearance'),
       
dcPage::jsPageTabs() .

       
# --BEHAVIOR-- themesToolsHeaders
       
$core->callBehavior('themesToolsHeaders', $core, true),
       
dcPage::breadcrumb(
            [
               
html::escapeHTML($core->blog->name)                                 => '',
               
__('Blog appearance')                                               => $list->getURL('', false),
               
'<span class="page-title">' . __('Theme configuration') . '</span>' => '',
            ]
        )
    );

   
# Display previously gathered content
   
$list->displayConfiguration();

   
dcPage::helpBlock('core_blog_theme_conf');
   
dcPage::close();

   
# Stop reading code here
   
return;
}

# -- Execute actions --
try {
   
$list->doActions();
} catch (
Exception $e) {
   
$core->error->add($e->getMessage());
}

# -- Page header --
dcPage::open(
   
__('Themes management'),
   
dcPage::jsLoad('js/_blog_theme.js') .
   
dcPage::jsPageTabs() .

   
# --BEHAVIOR-- themesToolsHeaders
   
$core->callBehavior('themesToolsHeaders', $core, false),
   
dcPage::breadcrumb(
        [
           
html::escapeHTML($core->blog->name)                             => '',
           
'<span class="page-title">' . __('Blog appearance') . '</span>' => '',
        ]
    )
);

# -- Display modules lists --
if ($core->auth->isSuperAdmin()) {
    if (!
$core->error->flag()) {
        if (!empty(
$_GET['nocache'])) {
           
dcPage::success(__('Manual checking of themes update done successfully.'));
        }
    }

   
# Updated modules from repo
   
$modules = $list->store->get(true);
    if (!empty(
$modules)) {
        echo
       
'<div class="multi-part" id="update" title="' . html::escapeHTML(__('Update themes')) . '">' .
       
'<h3>' . html::escapeHTML(__('Update themes')) . '</h3>' .
       
'<p>' . sprintf(
           
__('There is one theme to update available from repository.', 'There are %s themes to update available from repository.', count($modules)),
           
count($modules)
        ) .
'</p>';

       
$list
           
->setList('theme-update')
            ->
setTab('themes')
            ->
setModules($modules)
            ->
displayModules(
               
/*cols */
               
['checkbox', 'name', 'sshot', 'desc', 'author', 'version', 'current_version', 'repository', 'parent'],
               
/* actions */
               
['update', 'delete']
            );

        echo
       
'<p class="info vertical-separator">' . sprintf(
           
__('Visit %s repository, the resources center for Dotclear.'),
           
'<a href="https://themes.dotaddict.org/galerie-dc2/">Dotaddict</a>'
       
) .
           
'</p>' .

           
'</div>';
    } else {
        echo
       
'<form action="' . $list->getURL('', false) . '" method="get">' .
       
'<p><input type="hidden" name="nocache" value="1" />' .
       
'<input type="submit" value="' . __('Force checking update of themes') . '" /></p>' .
           
'</form>';
    }
}

# Activated modules
$modules = $list->modules->getModules();
if (!empty(
$modules)) {
    echo
   
'<div class="multi-part" id="themes" title="' . __('Installed themes') . '">' .
   
'<h3>' . __('Installed themes') . '</h3>' .
   
'<p class="more-info">' . __('You can configure and manage installed themes from this list.') . '</p>';

   
$list
       
->setList('theme-activate')
        ->
setTab('themes')
        ->
setModules($modules)
        ->
displayModules(
           
/* cols */
           
['sshot', 'distrib', 'name', 'config', 'desc', 'author', 'version', 'parent'],
           
/* actions */
           
['select', 'behavior', 'deactivate', 'clone', 'delete']
        );

    echo
       
'</div>';
}

# Deactivated modules
$modules = $list->modules->getDisabledModules();
if (!empty(
$modules)) {
    echo
   
'<div class="multi-part" id="deactivate" title="' . __('Deactivated themes') . '">' .
   
'<h3>' . __('Deactivated themes') . '</h3>' .
   
'<p class="more-info">' . __('Deactivated themes are installed but not usable. You can activate them from here.') . '</p>';

   
$list
       
->setList('theme-deactivate')
        ->
setTab('themes')
        ->
setModules($modules)
        ->
displayModules(
           
/* cols */
           
['sshot', 'name', 'distrib', 'desc', 'author', 'version'],
           
/* actions */
           
['activate', 'delete']
        );

    echo
       
'</div>';
}

if (
$core->auth->isSuperAdmin() && $list->isWritablePath()) {

   
# New modules from repo
   
$search  = $list->getSearch();
   
$modules = $search ? $list->store->search($search) : $list->store->get();

    if (!empty(
$search) || !empty($modules)) {
        echo
       
'<div class="multi-part" id="new" title="' . __('Add themes') . '">' .
       
'<h3>' . __('Add themes from repository') . '</h3>';
//        '<p>'.__('Search and install themes directly from repository.').'</p>';

       
$list
           
->setList('theme-new')
            ->
setTab('new')
            ->
setModules($modules)
            ->
displaySearch()
            ->
displayIndex()
            ->
displayModules(
               
/* cols */
               
['expander', 'sshot', 'name', 'score', 'config', 'desc', 'author', 'version', 'parent', 'details', 'support'],
               
/* actions */
               
['install'],
               
/* nav limit */
               
true
           
);

        echo
       
'<p class="info vertical-separator">' . sprintf(
           
__('Visit %s repository, the resources center for Dotclear.'),
           
'<a href="https://themes.dotaddict.org/galerie-dc2/">Dotaddict</a>'
       
) .
           
'</p>' .

           
'</div>';
    }

   
# Add a new plugin
   
echo
   
'<div class="multi-part" id="addtheme" title="' . __('Install or upgrade manually') . '">' .
   
'<h3>' . __('Add themes from a package') . '</h3>' .
   
'<p class="more-info">' . __('You can install themes by uploading or downloading zip files.') . '</p>';

   
$list->displayManualForm();

    echo
       
'</div>';
}

# --BEHAVIOR-- themesToolsTabs
$core->callBehavior('themesToolsTabs', $core);

# -- Notice for super admin --
if ($core->auth->isSuperAdmin() && !$list->isWritablePath()) {
    echo
   
'<p class="warning">' . __('Some functions are disabled, please give write access to your themes directory to enable them.') . '</p>';
}

dcPage::helpBlock('core_blog_theme');
dcPage::close();