Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Api/Controller/Node.php
<?php

namespace XF\Api\Controller;

use
XF\Mvc\Entity\Entity;
use
XF\Mvc\ParameterBag;

/**
 * @api-group Nodes
 */
class Node extends AbstractController
{
    protected function
preDispatchController($action, ParameterBag $params)
    {
       
$this->assertApiScopeByRequestMethod('node', ['delete' => 'delete']);
    }

   
/**
     * @api-desc Gets information about the specified node
     *
     * @api-out Node $node
     */
   
public function actionGet(ParameterBag $params)
    {
       
$node = $this->assertViewableNode($params->node_id);

        return
$this->apiResult([
           
'node' => $node->toApiResult(Entity::VERBOSITY_VERBOSE)
        ]);
    }

   
/**
     * @api-desc Updates the specified node
     *
     * @api-see XF\Api\ControllerPlugin\Node::setupNodeSave()
     *
     * @api-out Node $node The updated node information
     */
   
public function actionPost(ParameterBag $params)
    {
       
$this->assertAdminPermission('node');

       
$node = $this->assertViewableNode($params->node_id);

       
/** @var \XF\Api\ControllerPlugin\Node $nodePlugin */
       
$nodePlugin = $this->plugin('XF:Api:Node');
       
$nodePlugin->setupNodeSave($node)->run();

        return
$this->apiSuccess([
           
'node' => $node->toApiResult(Entity::VERBOSITY_VERBOSE)
        ]);
    }

   
/**
     * @api-desc Deletes the specified node
     *
     * @api-in bool $delete_children If true, child nodes will be deleted. Otherwise, they will be connected to this node's parent.
     *
     * @api-out true $success
     */
   
public function actionDelete(ParameterBag $params)
    {
       
$this->assertAdminPermission('node');

       
$node = $this->assertViewableNode($params->node_id);

       
$deleteChildAction = $this->filter('delete_children', 'bool') ? 'delete' : 'move';
       
$node->getBehavior('XF:TreeStructured')->setOption('deleteChildAction', $deleteChildAction);

       
$node->delete();

        return
$this->apiSuccess();
    }

   
/**
     * @param int $id
     * @param string|array $with
     *
     * @return \XF\Entity\Node
     *
     * @throws \XF\Mvc\Reply\Exception
     */
   
protected function assertViewableNode($id, $with = 'api')
    {
        return
$this->assertViewableApiRecord('XF:Node', $id, $with);
    }
}