Файл: concrete5.7.5.6/concrete/controllers/single_page/dashboard/system/attributes/topics.php
Строк: 169
<?php
namespace ConcreteControllerSinglePageDashboardSystemAttributes;
use ConcreteCorePageControllerDashboardPageController;
use ConcreteCoreTreeTree;
use Config;
use Loader;
use Core;
use ConcreteCoreTreeTypeTopic as TopicTree;
use ConcreteCoreTreeNodeNode as TreeNode;
use ConcreteCoreTreeNodeTypeTopic as TopicTreeNode;
use ConcreteCoreTreeNodeTypeTopicCategory as TopicCategoryTreeNode;
use Permissions;
class Topics extends DashboardPageController {
public function view($treeID = false) {
$defaultTree = TopicTree::getDefault();
$tree = TopicTree::getByID(Loader::helper('security')->sanitizeInt($treeID));
if (!$tree) {
$tree = $defaultTree;
}
$this->set('tree', $tree);
$this->requireAsset('core/topics');
$trees = array();
if (is_object($defaultTree)) {
$trees[] = $defaultTree;
foreach(TopicTree::getList() as $ctree) {
if ($ctree->getTreeID() != $defaultTree->getTreeID()) {
$trees[] = $ctree;
}
}
}
$this->set('trees', $trees);
}
public function tree_added($treeID) {
$this->set('success', t('Tree added successfully.'));
$this->view($treeID);
}
public function add_category_node($treeNodeParentID) {
if ($this->token->validate('add_category_node')) {
$parent = TreeNode::getByID($treeNodeParentID);
$tree = $parent->getTreeObject();
$title = $_POST['treeNodeCategoryName'];
if (!$title) {
$this->error->add(t('Invalid title for category'));
}
if (!is_object($parent)) {
$this->error->add(t('Invalid parent category'));
}
$np = new Permissions($parent);
if (!$np->canAddTopicCategoryTreeNode()) {
$this->error->add(t('You may not add a category here.'));
}
if (!$this->error->has()) {
$category = TopicCategoryTreeNode::add($title, $parent);
$r = $category->getTreeNodeJSON();
Loader::helper('ajax')->sendResult($r);
}
} else {
$this->error->add($this->token->getErrorMessage());
}
if ($this->error->has()) {
Loader::helper('ajax')->sendError($this->error);
}
}
public function update_topic_node() {
if ($this->token->validate('update_topic_node')) {
$node = TreeNode::getByID(Loader::helper('security')->sanitizeInt($_POST['treeNodeID']));
if (!($node instanceof TopicTreeNode)) {
$this->error->add(t('Invalid node.'));
}
$title = $_POST['treeNodeTopicName'];
if (!$title) {
$this->error->add(t('Invalid title for topic'));
}
$np = new Permissions($node);
if (!$np->canEditTreeNode()) {
$this->error->add(t('You may not edit this node.'));
}
if (!$this->error->has()) {
$node->setTreeNodeTopicName($title);
$r = $node->getTreeNodeJSON();
Loader::helper('ajax')->sendResult($r);
}
} else {
$this->error->add($this->token->getErrorMessage());
}
if ($this->error->has()) {
Loader::helper('ajax')->sendError($this->error);
}
}
public function update_category_node() {
if ($this->token->validate('update_category_node')) {
$node = TreeNode::getByID(Loader::helper('security')->sanitizeInt($_POST['treeNodeID']));
if (!($node instanceof TopicCategoryTreeNode)) {
$this->error->add(t('Invalid node.'));
}
$title = $_POST['treeNodeCategoryName'];
if (!$title) {
$this->error->add(t('Invalid title for category'));
}
$np = new Permissions($node);
if (!$np->canEditTreeNode()) {
$this->error->add(t('You may not edit this node.'));
}
if (!$this->error->has()) {
$node->setTreeNodeCategoryName($title);
$r = $node->getTreeNodeJSON();
Loader::helper('ajax')->sendResult($r);
}
} else {
$this->error->add($this->token->getErrorMessage());
}
if ($this->error->has()) {
Loader::helper('ajax')->sendError($this->error);
}
}
public function add_topic_node($treeNodeParentID) {
if ($this->token->validate('add_topic_node')) {
$parent = TreeNode::getByID($treeNodeParentID);
$tree = $parent->getTreeObject();
$title = $_POST['treeNodeTopicName'];
if (!$title) {
$this->error->add(t('Invalid title for topic'));
}
if (!is_object($parent)) {
$this->error->add(t('Invalid parent category'));
}
$np = new Permissions($parent);
if (!$np->canAddTopicTreeNode()) {
$this->error->add(t('You may not add a topic here.'));
}
if (!$this->error->has()) {
$category = TopicTreeNode::add($title, $parent);
$r = $category->getTreeNodeJSON();
Loader::helper('ajax')->sendResult($r);
}
} else {
$this->error->add($this->token->getErrorMessage());
}
if ($this->error->has()) {
Loader::helper('ajax')->sendError($this->error);
}
}
public function tree_deleted() {
$this->set('message', t('Tree deleted successfully.'));
$this->view();
}
public function remove_tree() {
if ($this->token->validate('remove_tree')) {
$tree = Tree::getByID(Loader::helper('security')->sanitizeInt($_REQUEST['treeID']));
$treeType = $tree->getTreeTypeObject();
if (is_object($treeType)) {
$treeTypeHandle = $treeType->getTreeTypeHandle();
}
if (is_object($tree) && $treeTypeHandle == 'topic') {
if (PermissionKey::getByHandle('remove_topic_tree')->validate()) {
$tree->delete();
$this->redirect('/dashboard/system/attributes/topics', 'tree_deleted');
}
}
}
}
public function remove_tree_node() {
if ($this->token->validate('remove_tree_node')) {
$node = TreeNode::getByID(Loader::helper('security')->sanitizeInt($_POST['treeNodeID']));
$tree = $node->getTreeObject();
$treeNodeID = $node->getTreeNodeID();
if (!is_object($node)) {
$this->error->add(t('Invalid node.'));
}
if ($node->getTreeNodeParentID() == 0) {
$this->error->add(t('You may not remove the top level node.'));
}
$np = new Permissions($node);
if (!$np->canDeleteTreeNode()) {
$this->error->add(t('You may not remove this node.'));
}
if ($tree->getTreeTypeHandle() != 'topic') {
$this->error->add(t('Invalid tree type.'));
}
if (!$this->error->has()) {
$node->delete();
$r = new stdClass;
$r->treeNodeID = $treeNodeID;
Loader::helper('ajax')->sendResult($r);
}
} else {
$this->error->add($this->token->getErrorMessage());
}
if ($this->error->has()) {
Loader::helper('ajax')->sendError($this->error);
}
}
}