primo commit
This commit is contained in:
		| @ -0,0 +1,41 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.API | ||||
|  * @subpackage  com_languages | ||||
|  * | ||||
|  * @copyright   (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Languages\Api\Controller; | ||||
|  | ||||
| use Joomla\CMS\MVC\Controller\ApiController; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * The languages controller | ||||
|  * | ||||
|  * @since  4.0.0 | ||||
|  */ | ||||
| class LanguagesController extends ApiController | ||||
| { | ||||
|     /** | ||||
|      * The content type of the item. | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $contentType = 'languages'; | ||||
|  | ||||
|     /** | ||||
|      * The default view for the display method. | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  3.0 | ||||
|      */ | ||||
|     protected $default_view = 'languages'; | ||||
| } | ||||
| @ -0,0 +1,187 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.API | ||||
|  * @subpackage  com_languages | ||||
|  * | ||||
|  * @copyright   (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Languages\Api\Controller; | ||||
|  | ||||
| use Joomla\CMS\Form\Form; | ||||
| use Joomla\CMS\Language\Text; | ||||
| use Joomla\CMS\MVC\Controller\ApiController; | ||||
| use Joomla\CMS\MVC\Controller\Exception; | ||||
| use Joomla\String\Inflector; | ||||
| use Tobscure\JsonApi\Exception\InvalidParameterException; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * The overrides controller | ||||
|  * | ||||
|  * @since  4.0.0 | ||||
|  */ | ||||
| class OverridesController extends ApiController | ||||
| { | ||||
|     /** | ||||
|      * The content type of the item. | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $contentType = 'overrides'; | ||||
|  | ||||
|     /** | ||||
|      * The default view for the display method. | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  3.0 | ||||
|      */ | ||||
|     protected $default_view = 'overrides'; | ||||
|  | ||||
|     /** | ||||
|      * Basic display of an item view | ||||
|      * | ||||
|      * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request | ||||
|      * | ||||
|      * @return  static  A \JControllerLegacy object to support chaining. | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function displayItem($id = null) | ||||
|     { | ||||
|         $this->modelState->set('filter.language', $this->getLanguageFromInput()); | ||||
|         $this->modelState->set('filter.client', $this->getClientFromInput()); | ||||
|  | ||||
|         return parent::displayItem($id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Basic display of a list view | ||||
|      * | ||||
|      * @return  static  A \JControllerLegacy object to support chaining. | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function displayList() | ||||
|     { | ||||
|         $this->modelState->set('filter.language', $this->getLanguageFromInput()); | ||||
|         $this->modelState->set('filter.client', $this->getClientFromInput()); | ||||
|  | ||||
|         return parent::displayList(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Method to save a record. | ||||
|      * | ||||
|      * @param   integer  $recordKey  The primary key of the item (if exists) | ||||
|      * | ||||
|      * @return  integer  The record ID on success, false on failure | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     protected function save($recordKey = null) | ||||
|     { | ||||
|         /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ | ||||
|         $model = $this->getModel(Inflector::singularize($this->contentType)); | ||||
|  | ||||
|         if (!$model) { | ||||
|             throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); | ||||
|         } | ||||
|  | ||||
|         $model->setState('filter.language', $this->input->post->get('lang_code')); | ||||
|         $model->setState('filter.client', $this->input->post->get('app')); | ||||
|  | ||||
|         $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); | ||||
|  | ||||
|         // @todo: Not the cleanest thing ever but it works... | ||||
|         Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms'); | ||||
|  | ||||
|         // Validate the posted data. | ||||
|         $form = $model->getForm($data, false); | ||||
|  | ||||
|         if (!$form) { | ||||
|             throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_FORM_CREATE')); | ||||
|         } | ||||
|  | ||||
|         // Test whether the data is valid. | ||||
|         $validData = $model->validate($form, $data); | ||||
|  | ||||
|         // Check for validation errors. | ||||
|         if ($validData === false) { | ||||
|             $errors   = $model->getErrors(); | ||||
|             $messages = []; | ||||
|  | ||||
|             for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { | ||||
|                 if ($errors[$i] instanceof \Exception) { | ||||
|                     $messages[] = "{$errors[$i]->getMessage()}"; | ||||
|                 } else { | ||||
|                     $messages[] = "{$errors[$i]}"; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             throw new InvalidParameterException(implode("\n", $messages)); | ||||
|         } | ||||
|  | ||||
|         if (!isset($validData['tags'])) { | ||||
|             $validData['tags'] = []; | ||||
|         } | ||||
|  | ||||
|         if (!$model->save($validData)) { | ||||
|             throw new Exception\Save(Text::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); | ||||
|         } | ||||
|  | ||||
|         return $validData['key']; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Removes an item. | ||||
|      * | ||||
|      * @param   integer  $id  The primary key to delete item. | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function delete($id = null) | ||||
|     { | ||||
|         $id = $this->input->get('id', '', 'string'); | ||||
|  | ||||
|         $this->input->set('model', $this->contentType); | ||||
|  | ||||
|         $this->modelState->set('filter.language', $this->getLanguageFromInput()); | ||||
|         $this->modelState->set('filter.client', $this->getClientFromInput()); | ||||
|  | ||||
|         parent::delete($id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get client code from input | ||||
|      * | ||||
|      * @return string | ||||
|      * | ||||
|      * @since 4.0.0 | ||||
|      */ | ||||
|     private function getClientFromInput() | ||||
|     { | ||||
|         return $this->input->exists('app') ? $this->input->get('app') : $this->input->post->get('app'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get language code from input | ||||
|      * | ||||
|      * @return string | ||||
|      * | ||||
|      * @since 4.0.0 | ||||
|      */ | ||||
|     private function getLanguageFromInput() | ||||
|     { | ||||
|         return $this->input->exists('lang_code') ? | ||||
|             $this->input->get('lang_code') : $this->input->post->get('lang_code'); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,125 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.API | ||||
|  * @subpackage  com_languages | ||||
|  * | ||||
|  * @copyright   (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Languages\Api\Controller; | ||||
|  | ||||
| use Joomla\CMS\Language\Text; | ||||
| use Joomla\CMS\MVC\Controller\ApiController; | ||||
| use Tobscure\JsonApi\Exception\InvalidParameterException; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * The strings controller | ||||
|  * | ||||
|  * @since  4.0.0 | ||||
|  */ | ||||
| class StringsController extends ApiController | ||||
| { | ||||
|     /** | ||||
|      * The content type of the item. | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $contentType = 'strings'; | ||||
|  | ||||
|     /** | ||||
|      * The default view for the display method. | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  3.0 | ||||
|      */ | ||||
|     protected $default_view = 'strings'; | ||||
|  | ||||
|     /** | ||||
|      * Search by languages constants | ||||
|      * | ||||
|      * @return  static  A \JControllerLegacy object to support chaining. | ||||
|      * | ||||
|      * @throws  InvalidParameterException | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function search() | ||||
|     { | ||||
|         $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); | ||||
|  | ||||
|         if (!isset($data['searchstring']) || !\is_string($data['searchstring'])) { | ||||
|             throw new InvalidParameterException("Invalid param 'searchstring'"); | ||||
|         } | ||||
|  | ||||
|         if (!isset($data['searchtype']) || !\in_array($data['searchtype'], ['constant', 'value'])) { | ||||
|             throw new InvalidParameterException("Invalid param 'searchtype'"); | ||||
|         } | ||||
|  | ||||
|         $this->input->set('searchstring', $data['searchstring']); | ||||
|         $this->input->set('searchtype', $data['searchtype']); | ||||
|         $this->input->set('more', 0); | ||||
|  | ||||
|         $viewType   = $this->app->getDocument()->getType(); | ||||
|         $viewName   = $this->input->get('view', $this->default_view); | ||||
|         $viewLayout = $this->input->get('layout', 'default', 'string'); | ||||
|  | ||||
|         try { | ||||
|             /** @var \Joomla\Component\Languages\Api\View\Strings\JsonapiView $view */ | ||||
|             $view = $this->getView( | ||||
|                 $viewName, | ||||
|                 $viewType, | ||||
|                 '', | ||||
|                 ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] | ||||
|             ); | ||||
|         } catch (\Exception $e) { | ||||
|             throw new \RuntimeException($e->getMessage()); | ||||
|         } | ||||
|  | ||||
|         /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ | ||||
|         $model = $this->getModel($this->contentType, '', ['ignore_request' => true]); | ||||
|  | ||||
|         if (!$model) { | ||||
|             throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); | ||||
|         } | ||||
|  | ||||
|         // Push the model into the view (as default) | ||||
|         $view->setModel($model, true); | ||||
|  | ||||
|         $view->document = $this->app->getDocument(); | ||||
|         $view->displayList(); | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Refresh cache | ||||
|      * | ||||
|      * @return  static  A \JControllerLegacy object to support chaining. | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function refresh() | ||||
|     { | ||||
|         /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ | ||||
|         $model = $this->getModel($this->contentType, '', ['ignore_request' => true]); | ||||
|  | ||||
|         if (!$model) { | ||||
|             throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); | ||||
|         } | ||||
|  | ||||
|         $result = $model->refresh(); | ||||
|  | ||||
|         if ($result instanceof \Exception) { | ||||
|             throw $result; | ||||
|         } | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,92 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.API | ||||
|  * @subpackage  com_languages | ||||
|  * | ||||
|  * @copyright   (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Languages\Api\View\Languages; | ||||
|  | ||||
| use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * The languages view | ||||
|  * | ||||
|  * @since  4.0.0 | ||||
|  */ | ||||
| class JsonapiView extends BaseApiView | ||||
| { | ||||
|     /** | ||||
|      * The fields to render item in the documents | ||||
|      * | ||||
|      * @var  array | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $fieldsToRenderItem = [ | ||||
|         'id', | ||||
|         'asset_id', | ||||
|         'lang_code', | ||||
|         'title', | ||||
|         'title_native', | ||||
|         'sef', | ||||
|         'image', | ||||
|         'description', | ||||
|         'metakey', | ||||
|         'metadesc', | ||||
|         'sitename', | ||||
|         'published', | ||||
|         'access', | ||||
|         'ordering', | ||||
|         'access_level', | ||||
|         'home', | ||||
|     ]; | ||||
|  | ||||
|     /** | ||||
|      * The fields to render items in the documents | ||||
|      * | ||||
|      * @var  array | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $fieldsToRenderList = [ | ||||
|         'id', | ||||
|         'asset_id', | ||||
|         'lang_code', | ||||
|         'title', | ||||
|         'title_native', | ||||
|         'sef', | ||||
|         'image', | ||||
|         'description', | ||||
|         'metakey', | ||||
|         'metadesc', | ||||
|         'sitename', | ||||
|         'published', | ||||
|         'access', | ||||
|         'ordering', | ||||
|         'access_level', | ||||
|         'home', | ||||
|     ]; | ||||
|  | ||||
|     /** | ||||
|      * Prepare item before render. | ||||
|      * | ||||
|      * @param   object  $item  The model item | ||||
|      * | ||||
|      * @return  object | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     protected function prepareItem($item) | ||||
|     { | ||||
|         $item->id = $item->lang_id; | ||||
|         unset($item->lang->id); | ||||
|  | ||||
|         return parent::prepareItem($item); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										105
									
								
								api/components/com_languages/src/View/Overrides/JsonapiView.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								api/components/com_languages/src/View/Overrides/JsonapiView.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.API | ||||
|  * @subpackage  com_languages | ||||
|  * | ||||
|  * @copyright   (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Languages\Api\View\Overrides; | ||||
|  | ||||
| use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * The overrides view | ||||
|  * | ||||
|  * @since  4.0.0 | ||||
|  */ | ||||
| class JsonapiView extends BaseApiView | ||||
| { | ||||
|     /** | ||||
|      * The fields to render item in the documents | ||||
|      * | ||||
|      * @var  array | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $fieldsToRenderItem = ['value']; | ||||
|  | ||||
|     /** | ||||
|      * The fields to render items in the documents | ||||
|      * | ||||
|      * @var  array | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $fieldsToRenderList = ['value']; | ||||
|  | ||||
|     /** | ||||
|      * Execute and display a template script. | ||||
|      * | ||||
|      * @param   object  $item  Item | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function displayItem($item = null) | ||||
|     { | ||||
|         /** @var \Joomla\Component\Languages\Administrator\Model\OverrideModel $model */ | ||||
|         $model = $this->getModel(); | ||||
|         $id    = $model->getState($model->getName() . '.id'); | ||||
|         $item  = $this->prepareItem($model->getItem($id)); | ||||
|  | ||||
|         return parent::displayItem($item); | ||||
|     } | ||||
|     /** | ||||
|      * Execute and display a template script. | ||||
|      * | ||||
|      * @param   ?array  $items  Array of items | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function displayList(?array $items = null) | ||||
|     { | ||||
|         /** @var \Joomla\Component\Languages\Administrator\Model\OverridesModel $model */ | ||||
|         $model = $this->getModel(); | ||||
|         $items = []; | ||||
|  | ||||
|         foreach ($model->getOverrides() as $key => $override) { | ||||
|             $item = (object) [ | ||||
|                 'key'      => $key, | ||||
|                 'override' => $override, | ||||
|             ]; | ||||
|  | ||||
|             $items[] = $this->prepareItem($item); | ||||
|         } | ||||
|  | ||||
|         return parent::displayList($items); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Prepare item before render. | ||||
|      * | ||||
|      * @param   object  $item  The model item | ||||
|      * | ||||
|      * @return  object | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     protected function prepareItem($item) | ||||
|     { | ||||
|         $item->id    = $item->key; | ||||
|         $item->value = $item->override; | ||||
|         unset($item->key); | ||||
|         unset($item->override); | ||||
|  | ||||
|         return parent::prepareItem($item); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										101
									
								
								api/components/com_languages/src/View/Strings/JsonapiView.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								api/components/com_languages/src/View/Strings/JsonapiView.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,101 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.API | ||||
|  * @subpackage  com_languages | ||||
|  * | ||||
|  * @copyright   (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Languages\Api\View\Strings; | ||||
|  | ||||
| use Joomla\CMS\Language\Text; | ||||
| use Joomla\CMS\MVC\View\GenericDataException; | ||||
| use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; | ||||
| use Joomla\CMS\Serializer\JoomlaSerializer; | ||||
| use Tobscure\JsonApi\Collection; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * The strings view | ||||
|  * | ||||
|  * @since  4.0.0 | ||||
|  */ | ||||
| class JsonapiView extends BaseApiView | ||||
| { | ||||
|     /** | ||||
|      * The fields to render items in the documents | ||||
|      * | ||||
|      * @var  array | ||||
|      * @since  4.0.0 | ||||
|      */ | ||||
|     protected $fieldsToRenderList = [ | ||||
|         'id', | ||||
|         'string', | ||||
|         'file', | ||||
|     ]; | ||||
|  | ||||
|     /** | ||||
|      * Execute and display a template script. | ||||
|      * | ||||
|      * @param   ?array  $items  Array of items | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     public function displayList(?array $items = null) | ||||
|     { | ||||
|         /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ | ||||
|         $model  = $this->getModel(); | ||||
|         $result = $model->search(); | ||||
|  | ||||
|         if ($result instanceof \Exception) { | ||||
|             throw $result; | ||||
|         } | ||||
|  | ||||
|         $items = []; | ||||
|  | ||||
|         foreach ($result['results'] as $item) { | ||||
|             $items[] = $this->prepareItem($item); | ||||
|         } | ||||
|  | ||||
|         // Check for errors. | ||||
|         if (\count($errors = $this->get('Errors'))) { | ||||
|             throw new GenericDataException(implode("\n", $errors), 500); | ||||
|         } | ||||
|  | ||||
|         if ($this->type === null) { | ||||
|             throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING'), 400); | ||||
|         } | ||||
|  | ||||
|         $collection = (new Collection($items, new JoomlaSerializer($this->type))) | ||||
|             ->fields([$this->type => $this->fieldsToRenderList]); | ||||
|  | ||||
|         // Set the data into the document and render it | ||||
|         $this->getDocument()->setData($collection); | ||||
|  | ||||
|         return $this->getDocument()->render(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Prepare item before render. | ||||
|      * | ||||
|      * @param   object  $item  The model item | ||||
|      * | ||||
|      * @return  object | ||||
|      * | ||||
|      * @since   4.0.0 | ||||
|      */ | ||||
|     protected function prepareItem($item) | ||||
|     { | ||||
|         $item->id = $item->constant; | ||||
|         unset($item->constant); | ||||
|  | ||||
|         return parent::prepareItem($item); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user