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

namespace Croogo\Translate\Controller\Admin;

use
Cake\Core\Configure;
use
Cake\ORM\TableRegistry;
use
Cake\Utility\Inflector;

/**
 * Translate Controller
 *
 * @category Translate.Controller
 * @package  Croogo.Translate.Controller
 * @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 TranslateController extends AppController
{

    public function
initialize()
    {
       
parent::initialize();
       
$this->loadModel('Croogo/Settings.Settings');
       
$this->loadModel('Croogo/Settings.Languages');
    }

   
/**
     * index
     *
     * @return \Cake\Http\Response|void
     */
   
public function index()
    {
       
$id = $this->getRequest()->query('id');
       
$modelAlias = $this->getRequest()->query('model');
        if (
$id == null) {
           
$this->Flash->error(__d('croogo', 'Invalid ID.'));

            return
$this->redirect([
               
'plugin' => null,
               
'controller' => Inflector::pluralize($modelAlias),
               
'action' => 'index',
            ]);
        }

       
$encoded = base64_encode($modelAlias);
       
$config = Configure::read('Translate.models.' . $encoded);
        list(
$plugin, $model) = pluginSplit($modelAlias);

        if (!
is_array($config)) {
           
$this->Flash->error(__d('croogo', 'Invalid model.'));

            return
$this->redirect([
               
'plugin' => $plugin,
               
'controller' => Inflector::pluralize($modelAlias),
               
'action' => 'index',
            ]);
        }

       
$Model = TableRegistry::get($modelAlias);
       
$displayField = $Model->displayField();
       
$record = $Model->get($id);
        if (!isset(
$record->id)) {
           
$this->Flash->error(__d('croogo', 'Invalid record.'));

            return
$this->redirect([
               
'plugin' => $plugin,
               
'controller' => $model,
               
'action' => 'index',
            ]);
        }
       
$this->set('title_for_layout', sprintf(__d('croogo', 'Translations: %s'), $record->get($displayField)));

       
$translations = $Model->find('translations')
            ->
where([
               
$Model->aliasField('id') => $id,
            ])->
first();

       
$languages = $this->Languages->find('list', [
           
'keyField' => 'locale',
           
'valueField' => function ($language) {
                return
$language->get('label');
            },
           
'conditions' => [
               
$this->Languages->aliasField('status') => true,
            ],
        ])->
toArray();

       
$this->set(compact('translations', 'record', 'modelAlias', 'displayField', 'id', 'languages'));
    }

   
/**
     * edit
     *
     * @return \Cake\Http\Response|void
     */
   
public function edit($id = null)
    {
       
$id = $this->getRequest()->getQuery('id', $id);
       
$modelAlias = urldecode($this->getRequest()->query('model'));
       
$locale = $this->getRequest()->query('locale');

        if (!
$id && empty($this->getRequest()->getData())) {
           
$this->Flash->error(__d('croogo', 'Invalid ID.'));

            return
$this->redirect([
               
'plugin' => null,
               
'controller' => Inflector::pluralize($modelAlias),
               
'action' => 'index',
            ]);
        }

        if (!
$this->getRequest()->query('locale')) {
           
$this->Flash->error(__d('croogo', 'Invalid locale'));

            return
$this->redirect([
               
'plugin' => null,
               
'controller' => Inflector::pluralize($modelAlias),
               
'action' => 'index',
            ]);
        }

       
$encoded = base64_encode($modelAlias);
       
$config = Configure::read('Translate.models.' . $encoded);
        list(
$plugin, $model) = pluginSplit($modelAlias);

       
$language = $this->Languages->find()
            ->
where([
               
'locale' => $this->getRequest()->query('locale'),
               
'status' => 1,
            ])->
first();
        if (!
$language->id) {
           
$this->Flash->error(__d('croogo', 'Invalid Language'));

            return
$this->redirect([
               
'plugin' => $plugin,
               
'controller' => $model,
               
'action' => 'index',
            ]);
        }

       
$Model = TableRegistry::get($modelAlias);
       
$displayField = $Model->displayField();
       
$record = $Model->get($id);
        if (!
$record->id) {
           
$this->Flash->error(__d('croogo', 'Invalid record.'));

            return
$this->redirect([
               
'plugin' => $plugin,
               
'controller' => $model,
               
'action' => 'index',
            ]);
        }

       
$fields = $config['fields'];

       
$entity = $Model
           
->find('translations', [
               
'locales' => [$locale],
            ])
            ->
where([$Model->aliasField('id') => $id])
            ->
first();

        if (!empty(
$this->getRequest()->data)) {
           
$entity->_locale = $locale;
           
$entity->accessible('_translations', true);
           
$entity = $Model->patchEntity($entity, $this->getRequest()->getData(), [
               
'translations' => true,
            ]);
            if (
$Model->save($entity)) {
               
$this->Flash->success(__d('croogo', 'Record has been translated'));
               
$redirect = [
                   
'controller' => 'Translate',
                   
'action' => 'index',
                   
'?' => [
                       
'id' => $id,
                       
'model' => $modelAlias,
                       
'locale' => $locale,
                    ],
                ];
                if (isset(
$this->getRequest()->data['_apply'])) {
                   
$redirect['action'] = 'edit';
                }

                return
$this->redirect($redirect);
            } else {
               
$this->Flash->error(__d('croogo', 'Record could not be translated. Please, try again.'));
            }
        }
       
$this->set(compact(
           
'entity',
           
'fields',
           
'language',
           
'model',
           
'modelAlias',
           
'displayField',
           
'id',
           
'locale'
       
));
    }

   
/**
     * delete
     *
     * @param int $id
     * @param string $modelAlias
     * @param string $locale
     * @return \Cake\Http\Response|void
     */
   
public function delete($id = null, $modelAlias = null, $locale = null)
    {
        if (
$locale == null || $id == null) {
           
$this->Flash->error(__d('croogo', 'Invalid Locale or ID'));

            return
$this->redirect([
               
'plugin' => null,
               
'controller' => Inflector::pluralize($modelAlias),
               
'action' => 'index',
            ]);
        }

       
$encoded = base64_encode($modelAlias);
       
$config = Configure::read('Translate.models.' . $encoded);
        list(
$plugin, $model) = pluginSplit($modelAlias);

        if (!
is_array($config)) {
           
$this->Flash->error(__d('croogo', 'Invalid model.'));

            return
$this->redirect([
               
'plugin' => $plugin,
               
'controller' => $model,
               
'action' => 'index',
            ]);
        }

       
$Model = TableRegistry::get($modelAlias);
       
$record = $Model->get($id);
        if (!isset(
$record->id)) {
           
$this->Flash->error(__d('croogo', 'Invalid record.'));

            return
$this->redirect([
               
'plugin' => $plugin,
               
'controller' => $model,
               
'action' => 'index',
            ]);
        }

        if (
$Model->deleteTranslation($record, $locale)) {
           
$this->Flash->success(__d('croogo', 'Translation for the locale deleted successfully.'));
        } else {
           
$this->Flash->error(__d('croogo', 'Translation for the locale could not be deleted.'));
        }

        return
$this->redirect([
           
'action' => 'index',
           
'id' => $id,
           
'model' => $modelAlias,
        ]);
    }
}