auth->setPermissionType(initTemplator::PERMISSION_TEMPLATOR, __('manage templates')); dcCore::app()->menu[dcAdmin::MENU_PLUGINS]->addItem( __('Templates engine'), dcCore::app()->adminurl->get('admin.plugin.templator'), urldecode(dcPage::getPF('templator/icon.png')), preg_match('/' . preg_quote(dcCore::app()->adminurl->get('admin.plugin.templator')) . '(&.*)?$/', $_SERVER['REQUEST_URI']), dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ dcAuth::PERMISSION_CONTENT_ADMIN, initTemplator::PERMISSION_TEMPLATOR, ]), dcCore::app()->blog->id) ); if (dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ dcAuth::PERMISSION_CONTENT_ADMIN, initTemplator::PERMISSION_TEMPLATOR, ]), dcCore::app()->blog->id)) { dcCore::app()->addBehavior('adminPostHeaders', ['templatorBehaviors','adminPostHeaders']); dcCore::app()->addBehavior('adminPostFormItems', ['templatorBehaviors','adminPostFormItems']); dcCore::app()->addBehavior('adminPageHeaders', ['templatorBehaviors','adminPostHeaders']); dcCore::app()->addBehavior('adminPageFormItems', ['templatorBehaviors','adminPostFormItems']); dcCore::app()->addBehavior('adminAfterPostCreate', ['templatorBehaviors','adminBeforePostUpdate']); dcCore::app()->addBehavior('adminBeforePostUpdate', ['templatorBehaviors','adminBeforePostUpdate']); dcCore::app()->addBehavior('adminAfterPageCreate', ['templatorBehaviors','adminBeforePostUpdate']); dcCore::app()->addBehavior('adminBeforePageUpdate', ['templatorBehaviors','adminBeforePostUpdate']); dcCore::app()->addBehavior('adminPostsActionsV2', ['templatorBehaviors','adminPostsActionsV2']); dcCore::app()->addBehavior('adminPagesActionsV2', ['templatorBehaviors','adminPostsActionsV2']); dcCore::app()->addBehavior('adminFiltersListsV2', function (ArrayObject $sorts) { $sorts['templator'] = [ __('Templates engine'), [ __('Date') => 'post_upddt', __('Title') => 'post_title', __('Category') => 'cat_id', ], 'post_upddt', 'desc', [__('Entries per page'), 30], ]; }); } class templatorBehaviors { public static function adminPostHeaders() { return dcPage::jsLoad(dcPage::getPF('templator/js/admin.js')); } public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, $post) { $selected = ''; if ($post) { $post_meta = dcCore::app()->meta->getMetadata(['meta_type' => 'template', 'post_id' => $post->post_id]); $selected = $post_meta->isEmpty() ? '' : $post_meta->meta_id; } $sidebar_items['options-box']['items']['templator'] = '
' . '
' . __('Template') . '
' . '

' . form::combo('post_tpl', self::getTemplateCombo(), $selected) . '

' . '
'; } public static function adminBeforePostUpdate($cur, $post_id) { $post_id = (int) $post_id; if (isset($_POST['post_tpl'])) { dcCore::app()->meta->delPostMeta($post_id, 'template'); if (!empty($_POST['post_tpl'])) { dcCore::app()->meta->setPostMeta($post_id, 'template', $_POST['post_tpl']); } } } public static function adminPostsActionsV2(dcPostsActions $pa) { $pa->addAction( [ __('Appearance') => [ __('Select the template') => 'tpl', ], ], ['templatorBehaviors', 'adminPostsActionsCallback'] ); } public static function adminPostsActionsCallback(dcPostsActions $pa, ArrayObject $post) { # No entry $posts_ids = $pa->getIDs(); if (empty($posts_ids)) { throw new Exception(__('No entry selected')); } if (isset($post['post_tpl'])) { try { foreach ($posts_ids as $post_id) { dcCore::app()->meta->delPostMeta($post_id, 'template'); if (!empty($post['post_tpl'])) { dcCore::app()->meta->setPostMeta($post_id, 'template', $post['post_tpl']); } } dcAdminNotices::addSuccessNotice(__('Entries template updated.')); $pa->redirect(true); } catch (Exception $e) { dcCore::app()->error->add($e->getMessage()); } } $pa->beginPage( dcPage::breadcrumb([ html::escapeHTML(dcCore::app()->blog->name) => '', $pa->getCallerTitle() => $pa->getRedirection(true), __('Entry template') => '', ]) ); echo '

' . __('Select template for the selection') . '

' . '
' . $pa->getCheckboxes() . '

' . form::combo('post_tpl', self::getTemplateCombo()) . '

' . '

' . $pa->getHiddenFields() . dcCore::app()->formNonce() . form::hidden(['action'], 'tpl') . '

' . '
'; $pa->endPage(); } private static function getTemplateCombo() { $tpl = [__('No specific template') => '']; foreach (dcCore::app()->templator->tpl as $k => $v) { if (!preg_match('/^category-(.+)$/', $k) && !preg_match('/^list-(.+)$/', $k)) { $tpl[$k] = $k; } } return $tpl; } }