Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Admin/Controller/ContentType.php
<?php

namespace XF\Admin\Controller;

use
XF\Mvc\ParameterBag;

class
ContentType extends AbstractController
{
   
/**
     * @param $action
     * @param ParameterBag $params
     * @throws \XF\Mvc\Reply\Exception
     */
   
protected function preDispatchController($action, ParameterBag $params)
    {
       
$this->assertDevelopmentMode();
    }

    public function
actionIndex()
    {
       
/** @var \XF\Repository\ContentTypeField $fieldRepo */
       
$fieldRepo = $this->repository('XF:ContentTypeField');

       
$fields = $fieldRepo->findContentTypeFieldsForList()->fetch();
       
$fieldsGrouped = $fields->groupBy('content_type');

       
$viewParams = [
           
'fieldsGrouped' => $fieldsGrouped
       
];
        return
$this->view('XF:ContentType\Listing', 'content_type_list', $viewParams);
    }

    protected function
fieldAddEdit(\XF\Entity\ContentTypeField $field)
    {
       
$viewParams = [
           
'field' => $field
       
];
        return
$this->view('XF:ContentType\Edit', 'content_type_edit', $viewParams);
    }

    public function
actionEdit(ParameterBag $params)
    {
       
$field = $this->assertFieldExists($params['content_type'], $params['field_name']);
        return
$this->fieldAddEdit($field);
    }

    public function
actionAdd()
    {
       
$field = $this->em()->create('XF:ContentTypeField');

        if (
$contentType = $this->filter('content_type', 'string'))
        {
           
$field->content_type = $contentType;
        }

        return
$this->fieldAddEdit($field);
    }

    protected function
fieldSaveProcess(\XF\Entity\ContentTypeField $field)
    {
       
$form = $this->formAction();

       
$input = $this->filter([
           
'content_type' => 'str',
           
'field_name' => 'str',
           
'field_value' => 'str',
           
'addon_id' => 'str'
       
]);

       
$form->basicEntitySave($field, $input);

        return
$form;
    }

    public function
actionSave(ParameterBag $params)
    {
       
$this->assertPostOnly();

        if (
$params['content_type'] && $params['field_name'])
        {
           
$field = $this->assertFieldExists($params['content_type'], $params['field_name']);
        }
        else
        {
           
$field = $this->em()->create('XF:ContentTypeField');
        }

       
$this->fieldSaveProcess($field)->run();

        return
$this->redirect(
           
$this->buildLink('content-types')
            .
$this->buildLinkHash("{$field->content_type}_{$field->field_name}")
        );
    }

    public function
actionDelete(ParameterBag $params)
    {
       
$field = $this->assertFieldExists($params['content_type'], $params['field_name']);

       
/** @var \XF\ControllerPlugin\Delete $plugin */
       
$plugin = $this->plugin('XF:Delete');
        return
$plugin->actionDelete(
           
$field,
           
$this->buildLink('content-types/delete', $field),
           
$this->buildLink('content-types/edit', $field),
           
$this->buildLink('content-types'),
           
"{$field->content_type} - {$field->field_name}"
       
);
    }

   
/**
     * @param string $contentType
     * @param string $fieldName
     * @param array|string|null $with
     * @param null|string $phraseKey
     *
     * @return \XF\Entity\ContentTypeField
     */
   
protected function assertFieldExists($contentType, $fieldName, $with = null, $phraseKey = null)
    {
       
$id = ['content_type' => $contentType, 'field_name' => $fieldName];
        return
$this->assertRecordExists('XF:ContentTypeField', $id, $with, $phraseKey);
    }
}