Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Taxonomy/src/Controller/Admin/TermsController.php
<?php

namespace Croogo\Taxonomy\Controller\Admin;

use
Cake\Event\Event;
use
Croogo\Taxonomy\Model\Table\TermsTable;
use
Exception;

/**
 * Terms Controller
 *
 * @property TermsTable Terms
 * @category Taxonomy.Controller
 * @package  Croogo
 * @version  1.0
 * @author   Fahad Ibnay Heylaal <contact@fahad19.com>
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class TermsController extends AppController
{

   
/**
     * Controller name
     *
     * @var string
     * @access public
     */
   
public $name = 'Terms';

    protected
$_redirectUrl = [
       
'prefix' => 'admin',
       
'plugin' => 'Croogo/Taxonomy',
       
'controller' => 'Vocabularies',
       
'action' => 'index',
    ];

   
/**
     * Admin index
     *
     * @param int $vocabularyId
     * @access public
     */
   
public function index($vocabularyId = null)
    {
       
$this->Crud->on('beforePaginate', function (Event $event) {
            return
$event->getSubject()->query
               
->contain(['Taxonomies.Vocabularies']);
        });

        return
$this->Crud->execute();
    }

   
/**
     * Admin delete
     *
     * @param int $id
     * @param int $vocabularyId
     * @return \Cake\Http\Response|void
     * @access public
     */
   
public function delete($id = null, $vocabularyId = null)
    {
        if (
$vocabularyId) {
           
$redirectUrl = ['action' => 'index', 'vocabulary_id' => $vocabularyId];
           
$this->Taxonomy->ensureVocabularyIdExists($vocabularyId);
           
$this->Terms->Taxonomies->termInVocabulary($id, $vocabularyId);
        } else {
           
$redirectUrl = $this->referer();
        }
       
$this->Taxonomy->ensureTermExists($id);

       
$success = true;
        try {
            if (
$vocabularyId) {
               
$success = $this->Terms->remove($id, $vocabularyId);
            } else {
               
$term = $this->Terms->get($id);
               
$success = $this->Terms->delete($term);
            }
        } catch (
Exception $e) {
           
$success = false;
           
$error = $e->getMessage();
        }
        if (
$success) {
           
$messageFlash = __d('croogo', 'Term deleted');
           
$flashMethod = 'success';
        } else {
           
$messageFlash = __d('croogo', 'Term could not be deleted. Please, try again.' . ' ' . $error);
           
$flashMethod = 'error';
        }
       
$this->Flash->{$flashMethod}($messageFlash);

        return
$this->redirect($redirectUrl);
    }

   
/**
     * Implements Term edit
     *
     * @param int $id
     * @access public
     */
   
public function edit($id)
    {
       
$request = $this->request;
       
$vocabularyId = $request->getQuery('vocabulary_id');

       
$this->Taxonomy->ensureTermExists($id);
        if (isset(
$vocabularyId)) {
           
$this->Taxonomy->ensureVocabularyIdExists($vocabularyId);
           
$this->Taxonomy->ensureTaxonomyExists($id, $vocabularyId);
           
$vocabulary = $this->Terms->Vocabularies->get($vocabularyId);

           
$term = $this->Terms->get($id, [
               
'contain' => [
                   
'Taxonomies' => function ($q) use ($id, $vocabularyId) {
                        return
$q->where([
                           
'term_id' => $id,
                           
'vocabulary_id' => $vocabularyId,
                        ]);
                    },
                ],
            ]);
           
$taxonomies = $this->Terms->Taxonomies
               
->find('list', [
                   
'keyField' => 'id',
                   
'valueField' => 'title',
                   
'groupField' => 'vocabulary_id',
                ])
                ->
contain(['Vocabularies', 'Terms'])
                ->
where([
                   
'term_id' => $term->id,
                   
'vocabulary_id' => $vocabularyId,
                ]);
        } else {
           
$term = $this->Terms->get($id, [
               
'contain' => [
                   
'Taxonomies',
                ],
            ]);
           
$taxonomies = collection([]);
        }

        if (
$request->is('post') || $request->is('put')) {
           
$term = $this->Terms->patchEntity($term, $request->getData(), [
               
'associated' => 'Taxonomies',
            ]);
            if (isset(
$vocabularyId)) {
               
$saved = $this->Terms->edit($term, $vocabularyId);
            } else {
               
$this->Terms->getAssociation('Taxonomies')->setSaveStrategy('replace');
               
$saved = $this->Terms->save($term);
            }
            if (
$saved) {
               
$this->Flash->success(__d('croogo', 'Term saved successfuly.'));
                if (
$request->getData('_apply')) {
                    return
$this->redirect([
                       
'action' => 'edit',
                       
$term->id,
                       
'vocabulary_id' => $vocabularyId,
                    ]);
                } else {
                    return
$this->redirect([
                       
'controller' => 'Taxonomies',
                       
'action' => 'index',
                       
'vocabulary_id' => $vocabularyId,
                    ]);
                }
            } else {
               
$this->Flash->error(__d('croogo', 'Term could not be added to the vocabulary. Please try again.'));
            }
        }
       
$parentTree = $this->Terms->Taxonomies->getTree($vocabulary->alias, ['taxonomyId' => true]);
       
$this->set(compact('taxonomies', 'vocabulary', 'parentTree', 'term', 'taxonomy', 'vocabularyId'));
    }

   
/**
     * Implements Term add
     *
     * @return \Cake\Http\Response|void
     */
   
public function add()
    {
       
$request = $this->request;
       
$vocabularyId = $request->getQuery('vocabulary_id');
       
$this->Taxonomy->ensureVocabularyIdExists($vocabularyId);
       
$vocabulary = $this->Terms->Vocabularies->get($vocabularyId);

       
$term = $this->Terms->newEntity();
       
$taxonomies = [];

        if (
$request->is('post')) {
           
$existingTerm = $this->Terms->find()
                ->
where(['slug' => $request->getData('slug')])
                ->
first();

           
$term = $existingTerm
               
? $this->Terms->patchEntity($existingTerm, $request->getData())
                :
$this->Terms->patchEntity($term, $request->getData());

           
$taxonomy = $this->Terms->add($term, $vocabularyId);
            if (
$taxonomy) {
               
$this->Flash->success(__d('croogo', 'Term saved successfuly.'));

               
$redirectUrl = [
                   
'action' => 'edit',
                   
$term->id,
                   
'vocabulary_id' => $vocabularyId,
                ];
                if (!
$term->has('_apply')) {
                   
$redirectUrl = [
                       
'controller' => 'Taxonomies',
                       
'action' => 'index',
                       
'vocabulary_id' => $vocabularyId,
                    ];
                }

                return
$this->redirect($redirectUrl);
            } else {
               
$this->Flash->error(__d('croogo', 'Term could not be added to the vocabulary. Please try again.'));
            }
        }

       
$parentTree = $this->Terms->Taxonomies->getTree($vocabulary->alias, ['taxonomyId' => true]);
       
$this->set(compact('taxonomies', 'vocabulary', 'term', 'parentTree', 'vocabularyId'));
    }
}