206 lines
5.8 KiB
PHP
206 lines
5.8 KiB
PHP
<?php
|
|
/**
|
|
* @package Dotclear
|
|
* @subpackage Backend
|
|
*
|
|
* @copyright Olivier Meunier & Association Dotclear
|
|
* @copyright GPL-2.0-only
|
|
*/
|
|
|
|
if (!defined('DC_RC_PATH')) {return;}
|
|
|
|
class dcBlogsActionsPage extends dcActionsPage
|
|
{
|
|
public function __construct($core, $uri, $redirect_args = [])
|
|
{
|
|
parent::__construct($core, $uri, $redirect_args);
|
|
$this->redirect_fields = ['status', 'sortby', 'order', 'page', 'nb'];
|
|
$this->field_entries = 'blogs';
|
|
$this->title_cb = __('Blogs');
|
|
$this->loadDefaults();
|
|
$core->callBehavior('adminBlogsActionsPage', $core, $this);
|
|
}
|
|
|
|
protected function loadDefaults()
|
|
{
|
|
// We could have added a behavior here, but we want default action
|
|
// to be setup first
|
|
dcDefaultBlogActions::adminBlogsActionsPage($this->core, $this);
|
|
}
|
|
|
|
public function beginPage($breadcrumb = '', $head = '')
|
|
{
|
|
if ($this->in_plugin) {
|
|
echo '<html><head><title>' . __('Blogs') . '</title>' .
|
|
dcPage::jsLoad('js/_blogs_actions.js') .
|
|
$head .
|
|
'</script></head><body>' .
|
|
$breadcrumb;
|
|
} else {
|
|
dcPage::open(
|
|
__('Blogs'),
|
|
dcPage::jsLoad('js/_blogs_actions.js') .
|
|
$head,
|
|
$breadcrumb
|
|
);
|
|
}
|
|
echo '<p><a class="back" href="' . $this->getRedirection(true) . '">' . __('Back to blogs list') . '</a></p>';
|
|
}
|
|
|
|
public function endPage()
|
|
{
|
|
dcPage::close();
|
|
}
|
|
|
|
public function error(Exception $e)
|
|
{
|
|
$this->core->error->add($e->getMessage());
|
|
$this->beginPage(dcPage::breadcrumb(
|
|
[
|
|
html::escapeHTML($this->core->blog->name) => '',
|
|
__('Blogs') => $this->core->adminurl->get('admin.blogs'),
|
|
__('Blogs actions') => ''
|
|
])
|
|
);
|
|
$this->endPage();
|
|
}
|
|
|
|
public function getCheckboxes()
|
|
{
|
|
$ret = '';
|
|
foreach ($this->entries as $id => $res) {
|
|
$ret .=
|
|
'<tr>' .
|
|
'<td class="minimal">' . form::checkbox([$this->field_entries . '[]'], $id,
|
|
[
|
|
'checked' => true
|
|
]) .
|
|
'</td>' .
|
|
'<td>' . $res['blog'] . '</td>' .
|
|
'<td>' . $res['name'] . '</td>' .
|
|
'</tr>';
|
|
}
|
|
|
|
return
|
|
'<table class="blogs-list"><tr>' .
|
|
'<th colspan="2">' . __('Blog id') . '</th><th>' . __('Blog name') . '</th>' .
|
|
'</tr>' . $ret . '</table>';
|
|
}
|
|
|
|
protected function fetchEntries($from)
|
|
{
|
|
$params = [];
|
|
if (!empty($from['blogs'])) {
|
|
$params['blog_id'] = $from['blogs'];
|
|
}
|
|
|
|
$bl = $this->core->getBlogs($params);
|
|
while ($bl->fetch()) {
|
|
$this->entries[$bl->blog_id] = [
|
|
'blog' => $bl->blog_id,
|
|
'name' => $bl->blog_name
|
|
];
|
|
}
|
|
$this->rs = $bl;
|
|
}
|
|
}
|
|
|
|
class dcDefaultBlogActions
|
|
{
|
|
public static function adminBlogsActionsPage($core, dcBlogsActionsPage $ap)
|
|
{
|
|
if (!$core->auth->isSuperAdmin()) {
|
|
return;
|
|
}
|
|
|
|
$ap->addAction(
|
|
[__('Status') => [
|
|
__('Set online') => 'online',
|
|
__('Set offline') => 'offline',
|
|
__('Set as removed') => 'remove'
|
|
]],
|
|
['dcDefaultBlogActions', 'doChangeBlogStatus']
|
|
);
|
|
$ap->addAction(
|
|
[__('Delete') => [
|
|
__('Delete') => 'delete']],
|
|
['dcDefaultBlogActions', 'doDeleteBlog']
|
|
);
|
|
}
|
|
|
|
public static function doChangeBlogStatus($core, dcBlogsActionsPage $ap, $post)
|
|
{
|
|
if (!$core->auth->isSuperAdmin()) {
|
|
return;
|
|
}
|
|
|
|
$action = $ap->getAction();
|
|
$ids = $ap->getIDs();
|
|
if (empty($ids)) {
|
|
throw new Exception(__('No blog selected'));
|
|
}
|
|
switch ($action) {
|
|
case 'online':$status = 1;
|
|
break;
|
|
case 'offline':$status = 0;
|
|
break;
|
|
case 'remove':$status = -1;
|
|
break;
|
|
default:$status = 1;
|
|
break;
|
|
}
|
|
|
|
$cur = $core->con->openCursor($core->prefix . 'blog');
|
|
$cur->blog_status = $status;
|
|
//$cur->blog_upddt = date('Y-m-d H:i:s');
|
|
$cur->update('WHERE blog_id ' . $core->con->in($ids));
|
|
|
|
dcPage::addSuccessNotice(__('Selected blogs have been successfully updated.'));
|
|
$ap->redirect(true);
|
|
}
|
|
|
|
public static function doDeleteBlog($core, dcBlogsActionsPage $ap, $post)
|
|
{
|
|
if (!$core->auth->isSuperAdmin()) {
|
|
return;
|
|
}
|
|
|
|
$ap_ids = $ap->getIDs();
|
|
if (empty($ap_ids)) {
|
|
throw new Exception(__('No blog selected'));
|
|
}
|
|
|
|
if (!$core->auth->checkPassword($_POST['pwd'])) {
|
|
throw new Exception(__('Password verification failed'));
|
|
}
|
|
|
|
$ids = [];
|
|
foreach ($ap_ids as $id) {
|
|
if ($id == $core->blog->id) {
|
|
dcPage::addWarningNotice(__('The current blog cannot be deleted.'));
|
|
} else {
|
|
$ids[] = $id;
|
|
}
|
|
}
|
|
|
|
if (!empty($ids)) {
|
|
# --BEHAVIOR-- adminBeforeBlogsDelete
|
|
$core->callBehavior('adminBeforeBlogsDelete', $ids);
|
|
|
|
foreach ($ids as $id) {
|
|
$core->delBlog($id);
|
|
}
|
|
|
|
dcPage::addSuccessNotice(sprintf(
|
|
__(
|
|
'%d blog has been successfully deleted',
|
|
'%d blogs have been successfully deleted',
|
|
count($ids)
|
|
),
|
|
count($ids))
|
|
);
|
|
}
|
|
$ap->redirect(false);
|
|
}
|
|
}
|