<?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->cb_title = __('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);
}
}