first commit
This commit is contained in:
135
admin/artsections.php
Normal file
135
admin/artsections.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
class Artsections extends Window
|
||||
{
|
||||
protected $tableName = 'articles_branches';
|
||||
protected $show_on_web = 'articlesSection';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->defaults = ['date' => date('Y-m-d H:i'),
|
||||
'behaviour' => '1',
|
||||
'orderby' => 'date',
|
||||
'orderdir' => 'ASC',
|
||||
'top_branch' => null,
|
||||
];
|
||||
}
|
||||
|
||||
public function get_vars()
|
||||
{
|
||||
$vars = parent::get_vars();
|
||||
$pageVars = getVal('body', $vars);
|
||||
|
||||
$acn = $this->getAction();
|
||||
$ID = $this->getID();
|
||||
$pageVars['tree'] = $this->articlesSections(null, 0, $ID);
|
||||
|
||||
if ($acn == 'remove') {
|
||||
$SQL = sqlQuery('SELECT * FROM '.getTableName('articles_branches')." WHERE id='{$ID}' ");
|
||||
foreach ($SQL as $row) {
|
||||
$pageVars['data'] = $row;
|
||||
}
|
||||
$pageVars['acn'] = 'erase';
|
||||
}
|
||||
|
||||
$vars['body'] = $pageVars;
|
||||
|
||||
return $vars;
|
||||
}
|
||||
|
||||
public function getData()
|
||||
{
|
||||
$data = parent::getData();
|
||||
if (isset($data['template'])) {
|
||||
$data['template'] = !preg_match('/^[a-zA-Z0-9_\-.]+$/', $data['template']) ? null : $data['template'];
|
||||
}
|
||||
if (isset($data['items_per_page'])) {
|
||||
$data['items_per_page'] = empty($data['items_per_page']) || !is_numeric($data['items_per_page']) ? null : (int) $data['items_per_page'];
|
||||
}
|
||||
if (empty($data['top_branch'])) {
|
||||
$data['top_branch'] = null;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function handleUpdate()
|
||||
{
|
||||
clearCache('article-sections-', true);
|
||||
|
||||
$newBranchId = $_POST['data']['top_branch'] ?? null;
|
||||
$childrenIds = $this->getDescendantCategories($this->getID());
|
||||
|
||||
if (in_array($newBranchId, $childrenIds)) {
|
||||
$this->returnError('Nelze zvolit jako nadřazenou sekci některou z podsekcí!');
|
||||
}
|
||||
|
||||
return parent::handleUpdate();
|
||||
}
|
||||
|
||||
public function getDescendantCategories($topBranch): array
|
||||
{
|
||||
return sqlFetchAll(sqlQuery(
|
||||
'WITH RECURSIVE cte (level, id) AS (
|
||||
SELECT 0, SR1.top_branch
|
||||
FROM articles_branches SR1
|
||||
WHERE SR1.top_branch = :top_branch
|
||||
UNION ALL
|
||||
SELECT cte.level + 1, SR2.id
|
||||
FROM articles_branches SR2
|
||||
INNER JOIN cte ON (cte.id = SR2.top_branch)
|
||||
WHERE cte.level < 50
|
||||
)
|
||||
SELECT id
|
||||
FROM cte ORDER BY level', ['top_branch' => $topBranch]), ['id' => 'id']);
|
||||
}
|
||||
|
||||
public function handleDelete()
|
||||
{
|
||||
clearCache('article-sections-', true);
|
||||
|
||||
$IDsec = $this->getID();
|
||||
$IDsecSel = getVal('IDsecSel');
|
||||
if ($IDsecSel > 0) {
|
||||
@sqlQuery('UPDATE '.getTableName('articles_relation')."
|
||||
SET id_branch='".$IDsecSel."'
|
||||
WHERE id_branch='".$IDsec."' ");
|
||||
} elseif ($IDsecSel == 0) {
|
||||
@sqlQuery('DELETE
|
||||
FROM '.getTableName('articles_relation')."
|
||||
WHERE id_branch='".$IDsec."' ");
|
||||
}
|
||||
|
||||
$SQL = @sqlQuery('DELETE
|
||||
FROM '.getTableName('articles_branches')."
|
||||
WHERE id='".$IDsec."' ");
|
||||
writeDownActivity(sprintf(translate('activityDeleted'), $IDsec));
|
||||
redirect('launch.php?s=artsections.php&acn=erased&ErrStr='.urlencode(translate('note_5')));
|
||||
}
|
||||
|
||||
public function articlesSections($topCat, $Pos = 0, $ignored = null)
|
||||
{
|
||||
$SQL = sqlQueryBuilder()
|
||||
->select('ab.id, ab.name, ab.descr, ab.figure')
|
||||
->from('articles_branches', 'ab')
|
||||
->where(\Query\Operator::equalsNullable(['ab.top_branch' => $topCat]))
|
||||
->orderBy('ab.name', 'ASC')
|
||||
->execute();
|
||||
|
||||
$data = [];
|
||||
foreach ($SQL as $key => $row) {
|
||||
if ($ignored == null || $ignored != $row['id']) {
|
||||
$data[$key]['id'] = $row['id'];
|
||||
$data[$key]['title'] = $row['name'];
|
||||
$data[$key]['figure'] = $row['figure'];
|
||||
$data[$key]['level'] = $Pos;
|
||||
$data[$key]['submenu'] = $this->articlesSections($row['id'], $Pos + 1, $ignored = null);
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
$artsections = new Artsections();
|
||||
$artsections->run();
|
||||
Reference in New Issue
Block a user