primo commit
This commit is contained in:
		| @ -0,0 +1,239 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.Administrator | ||||
|  * @subpackage  com_contact | ||||
|  * | ||||
|  * @copyright   (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Contact\Administrator\View\Contact; | ||||
|  | ||||
| use Joomla\CMS\Component\ComponentHelper; | ||||
| use Joomla\CMS\Factory; | ||||
| use Joomla\CMS\Helper\ContentHelper; | ||||
| use Joomla\CMS\Language\Associations; | ||||
| use Joomla\CMS\Language\Text; | ||||
| use Joomla\CMS\MVC\View\GenericDataException; | ||||
| use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; | ||||
| use Joomla\CMS\Toolbar\Toolbar; | ||||
| use Joomla\CMS\Toolbar\ToolbarHelper; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * View to edit a contact. | ||||
|  * | ||||
|  * @since  1.6 | ||||
|  */ | ||||
| class HtmlView extends BaseHtmlView | ||||
| { | ||||
|     /** | ||||
|      * The Form object | ||||
|      * | ||||
|      * @var  \Joomla\CMS\Form\Form | ||||
|      */ | ||||
|     protected $form; | ||||
|  | ||||
|     /** | ||||
|      * The active item | ||||
|      * | ||||
|      * @var  object | ||||
|      */ | ||||
|     protected $item; | ||||
|  | ||||
|     /** | ||||
|      * The model state | ||||
|      * | ||||
|      * @var  \Joomla\Registry\Registry | ||||
|      */ | ||||
|     protected $state; | ||||
|  | ||||
|     /** | ||||
|      * Array of fieldsets not to display | ||||
|      * | ||||
|      * @var    string[] | ||||
|      * | ||||
|      * @since  5.2.0 | ||||
|      */ | ||||
|     public $ignore_fieldsets = []; | ||||
|  | ||||
|     /** | ||||
|      * Display the view. | ||||
|      * | ||||
|      * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths. | ||||
|      * | ||||
|      * @return  void | ||||
|      */ | ||||
|     public function display($tpl = null) | ||||
|     { | ||||
|         // Initialise variables. | ||||
|         $this->form  = $this->get('Form'); | ||||
|         $this->item  = $this->get('Item'); | ||||
|         $this->state = $this->get('State'); | ||||
|  | ||||
|         if ($this->getLayout() === 'modalreturn') { | ||||
|             parent::display($tpl); | ||||
|  | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Check for errors. | ||||
|         if (\count($errors = $this->get('Errors'))) { | ||||
|             throw new GenericDataException(implode("\n", $errors), 500); | ||||
|         } | ||||
|  | ||||
|         // If we are forcing a language in modal (used for associations). | ||||
|         if ($this->getLayout() === 'modal' && $forcedLanguage = Factory::getApplication()->getInput()->get('forcedLanguage', '', 'cmd')) { | ||||
|             // Set the language field to the forcedLanguage and disable changing it. | ||||
|             $this->form->setValue('language', null, $forcedLanguage); | ||||
|             $this->form->setFieldAttribute('language', 'readonly', 'true'); | ||||
|  | ||||
|             // Only allow to select categories with All language or with the forced language. | ||||
|             $this->form->setFieldAttribute('catid', 'language', '*,' . $forcedLanguage); | ||||
|  | ||||
|             // Only allow to select tags with All language or with the forced language. | ||||
|             $this->form->setFieldAttribute('tags', 'language', '*,' . $forcedLanguage); | ||||
|         } | ||||
|  | ||||
|         if ($this->getLayout() !== 'modal') { | ||||
|             $this->addToolbar(); | ||||
|         } else { | ||||
|             $this->addModalToolbar(); | ||||
|         } | ||||
|  | ||||
|         parent::display($tpl); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Add the page title and toolbar. | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   1.6 | ||||
|      */ | ||||
|     protected function addToolbar() | ||||
|     { | ||||
|         Factory::getApplication()->getInput()->set('hidemainmenu', true); | ||||
|  | ||||
|         $user       = $this->getCurrentUser(); | ||||
|         $userId     = $user->id; | ||||
|         $isNew      = ($this->item->id == 0); | ||||
|         $checkedOut = !(\is_null($this->item->checked_out) || $this->item->checked_out == $userId); | ||||
|         $toolbar    = $this->getDocument()->getToolbar(); | ||||
|  | ||||
|         // Since we don't track these assets at the item level, use the category id. | ||||
|         $canDo = ContentHelper::getActions('com_contact', 'category', $this->item->catid); | ||||
|  | ||||
|         ToolbarHelper::title($isNew ? Text::_('COM_CONTACT_MANAGER_CONTACT_NEW') : Text::_('COM_CONTACT_MANAGER_CONTACT_EDIT'), 'address-book contact'); | ||||
|  | ||||
|         // Build the actions for new and existing records. | ||||
|         if ($isNew) { | ||||
|             // For new records, check the create permission. | ||||
|             if (\count($user->getAuthorisedCategories('com_contact', 'core.create')) > 0) { | ||||
|                 $toolbar->apply('contact.apply'); | ||||
|  | ||||
|                 $saveGroup = $toolbar->dropdownButton('save-group'); | ||||
|  | ||||
|                 $saveGroup->configure( | ||||
|                     function (Toolbar $childBar) use ($user) { | ||||
|                         $childBar->save('contact.save'); | ||||
|  | ||||
|                         if ($user->authorise('core.create', 'com_menus.menu')) { | ||||
|                             $childBar->save('contact.save2menu', 'JTOOLBAR_SAVE_TO_MENU'); | ||||
|                         } | ||||
|  | ||||
|                         $childBar->save2new('contact.save2new'); | ||||
|                     } | ||||
|                 ); | ||||
|             } | ||||
|  | ||||
|             $toolbar->cancel('contact.cancel', 'JTOOLBAR_CANCEL'); | ||||
|         } else { | ||||
|             // Since it's an existing record, check the edit permission, or fall back to edit own if the owner. | ||||
|             $itemEditable = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by == $userId); | ||||
|  | ||||
|             // Can't save the record if it's checked out and editable | ||||
|             if (!$checkedOut && $itemEditable) { | ||||
|                 $toolbar->apply('contact.apply'); | ||||
|             } | ||||
|  | ||||
|             $saveGroup = $toolbar->dropdownButton('save-group'); | ||||
|  | ||||
|             $saveGroup->configure( | ||||
|                 function (Toolbar $childBar) use ($checkedOut, $itemEditable, $canDo, $user) { | ||||
|                     // Can't save the record if it's checked out and editable | ||||
|                     if (!$checkedOut && $itemEditable) { | ||||
|                         $childBar->save('contact.save'); | ||||
|  | ||||
|                         // We can save this record, but check the create permission to see if we can return to make a new one. | ||||
|                         if ($canDo->get('core.create')) { | ||||
|                             $childBar->save2new('contact.save2new'); | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|                     // If checked out, we can still save2menu | ||||
|                     if ($user->authorise('core.create', 'com_menus.menu')) { | ||||
|                         $childBar->save('contact.save2menu', 'JTOOLBAR_SAVE_TO_MENU'); | ||||
|                     } | ||||
|  | ||||
|                     // If checked out, we can still save | ||||
|                     if ($canDo->get('core.create')) { | ||||
|                         $childBar->save2copy('contact.save2copy'); | ||||
|                     } | ||||
|                 } | ||||
|             ); | ||||
|  | ||||
|             $toolbar->cancel('contact.cancel'); | ||||
|  | ||||
|             if (ComponentHelper::isEnabled('com_contenthistory') && $this->state->params->get('save_history', 0) && $itemEditable) { | ||||
|                 $toolbar->versions('com_contact.contact', $this->item->id); | ||||
|             } | ||||
|  | ||||
|             if (Associations::isEnabled() && ComponentHelper::isEnabled('com_associations')) { | ||||
|                 $toolbar->standardButton('contract', 'JTOOLBAR_ASSOCIATIONS', 'contact.editAssociations') | ||||
|                     ->icon('icon-contract') | ||||
|                     ->listCheck(false); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $toolbar->divider(); | ||||
|         $toolbar->help('Contacts:_Edit'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Add the modal toolbar. | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   5.1.0 | ||||
|      * | ||||
|      * @throws  \Exception | ||||
|      */ | ||||
|     protected function addModalToolbar() | ||||
|     { | ||||
|         $user       = $this->getCurrentUser(); | ||||
|         $userId     = $user->id; | ||||
|         $isNew      = ($this->item->id == 0); | ||||
|         $toolbar    = $this->getDocument()->getToolbar(); | ||||
|  | ||||
|         // Since we don't track these assets at the item level, use the category id. | ||||
|         $canDo = ContentHelper::getActions('com_contact', 'category', $this->item->catid); | ||||
|  | ||||
|         ToolbarHelper::title($isNew ? Text::_('COM_CONTACT_MANAGER_CONTACT_NEW') : Text::_('COM_CONTACT_MANAGER_CONTACT_EDIT'), 'address-book contact'); | ||||
|  | ||||
|         $canCreate = $isNew && (\count($user->getAuthorisedCategories('com_contact', 'core.create')) > 0); | ||||
|         $canEdit   = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by == $userId); | ||||
|  | ||||
|         // For new records, check the create permission. | ||||
|         if ($canCreate || $canEdit) { | ||||
|             $toolbar->apply('contact.apply'); | ||||
|             $toolbar->save('contact.save'); | ||||
|         } | ||||
|  | ||||
|         $toolbar->cancel('contact.cancel'); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,204 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package     Joomla.Administrator | ||||
|  * @subpackage  com_contact | ||||
|  * | ||||
|  * @copyright   (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Component\Contact\Administrator\View\Contacts; | ||||
|  | ||||
| use Joomla\CMS\Factory; | ||||
| use Joomla\CMS\Helper\ContentHelper; | ||||
| use Joomla\CMS\Language\Multilanguage; | ||||
| use Joomla\CMS\Language\Text; | ||||
| use Joomla\CMS\MVC\View\GenericDataException; | ||||
| use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; | ||||
| use Joomla\CMS\Toolbar\Button\DropdownButton; | ||||
| use Joomla\CMS\Toolbar\ToolbarHelper; | ||||
|  | ||||
| // phpcs:disable PSR1.Files.SideEffects | ||||
| \defined('_JEXEC') or die; | ||||
| // phpcs:enable PSR1.Files.SideEffects | ||||
|  | ||||
| /** | ||||
|  * View class for a list of contacts. | ||||
|  * | ||||
|  * @since  1.6 | ||||
|  */ | ||||
| class HtmlView extends BaseHtmlView | ||||
| { | ||||
|     /** | ||||
|      * An array of items | ||||
|      * | ||||
|      * @var  array | ||||
|      */ | ||||
|     protected $items; | ||||
|  | ||||
|     /** | ||||
|      * The pagination object | ||||
|      * | ||||
|      * @var  \Joomla\CMS\Pagination\Pagination | ||||
|      */ | ||||
|     protected $pagination; | ||||
|  | ||||
|     /** | ||||
|      * The model state | ||||
|      * | ||||
|      * @var  \Joomla\Registry\Registry | ||||
|      */ | ||||
|     protected $state; | ||||
|  | ||||
|     /** | ||||
|      * Form object for search filters | ||||
|      * | ||||
|      * @var  \Joomla\CMS\Form\Form | ||||
|      */ | ||||
|     public $filterForm; | ||||
|  | ||||
|     /** | ||||
|      * The active search filters | ||||
|      * | ||||
|      * @var  array | ||||
|      */ | ||||
|     public $activeFilters; | ||||
|  | ||||
|     /** | ||||
|      * Is this view an Empty State | ||||
|      * | ||||
|      * @var   boolean | ||||
|      * | ||||
|      * @since 4.0.0 | ||||
|      */ | ||||
|     private $isEmptyState = false; | ||||
|  | ||||
|     /** | ||||
|      * Display the view. | ||||
|      * | ||||
|      * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths. | ||||
|      * | ||||
|      * @return  void | ||||
|      */ | ||||
|     public function display($tpl = null) | ||||
|     { | ||||
|         $this->items         = $this->get('Items'); | ||||
|         $this->pagination    = $this->get('Pagination'); | ||||
|         $this->state         = $this->get('State'); | ||||
|         $this->filterForm    = $this->get('FilterForm'); | ||||
|         $this->activeFilters = $this->get('ActiveFilters'); | ||||
|  | ||||
|         if (!\count($this->items) && $this->isEmptyState = $this->get('IsEmptyState')) { | ||||
|             $this->setLayout('emptystate'); | ||||
|         } | ||||
|  | ||||
|         // Check for errors. | ||||
|         if (\count($errors = $this->get('Errors'))) { | ||||
|             throw new GenericDataException(implode("\n", $errors), 500); | ||||
|         } | ||||
|  | ||||
|         // We don't need toolbar in the modal window. | ||||
|         if ($this->getLayout() !== 'modal') { | ||||
|             $this->addToolbar(); | ||||
|  | ||||
|             // We do not need to filter by language when multilingual is disabled | ||||
|             if (!Multilanguage::isEnabled()) { | ||||
|                 unset($this->activeFilters['language']); | ||||
|                 $this->filterForm->removeField('language', 'filter'); | ||||
|             } | ||||
|         } else { | ||||
|             // In article associations modal we need to remove language filter if forcing a language. | ||||
|             // We also need to change the category filter to show show categories with All or the forced language. | ||||
|             if ($forcedLanguage = Factory::getApplication()->getInput()->get('forcedLanguage', '', 'CMD')) { | ||||
|                 // If the language is forced we can't allow to select the language, so transform the language selector filter into a hidden field. | ||||
|                 $languageXml = new \SimpleXMLElement('<field name="language" type="hidden" default="' . $forcedLanguage . '" />'); | ||||
|                 $this->filterForm->setField($languageXml, 'filter', true); | ||||
|  | ||||
|                 // Also, unset the active language filter so the search tools is not open by default with this filter. | ||||
|                 unset($this->activeFilters['language']); | ||||
|  | ||||
|                 // One last changes needed is to change the category filter to just show categories with All language or with the forced language. | ||||
|                 $this->filterForm->setFieldAttribute('category_id', 'language', '*,' . $forcedLanguage, 'filter'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         parent::display($tpl); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Add the page title and toolbar. | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   1.6 | ||||
|      */ | ||||
|     protected function addToolbar() | ||||
|     { | ||||
|         $canDo = ContentHelper::getActions('com_contact', 'category', $this->state->get('filter.category_id')); | ||||
|         $user  = $this->getCurrentUser(); | ||||
|  | ||||
|         // Get the toolbar object instance | ||||
|         $toolbar = $this->getDocument()->getToolbar(); | ||||
|  | ||||
|         ToolbarHelper::title(Text::_('COM_CONTACT_MANAGER_CONTACTS'), 'address-book contact'); | ||||
|  | ||||
|         if ($canDo->get('core.create') || \count($user->getAuthorisedCategories('com_contact', 'core.create')) > 0) { | ||||
|             $toolbar->addNew('contact.add'); | ||||
|         } | ||||
|  | ||||
|         if (!$this->isEmptyState && $canDo->get('core.edit.state')) { | ||||
|             /** @var  DropdownButton $dropdown */ | ||||
|             $dropdown = $toolbar->dropdownButton('status-group', 'JTOOLBAR_CHANGE_STATUS') | ||||
|                 ->toggleSplit(false) | ||||
|                 ->icon('icon-ellipsis-h') | ||||
|                 ->buttonClass('btn btn-action') | ||||
|                 ->listCheck(true); | ||||
|  | ||||
|             $childBar = $dropdown->getChildToolbar(); | ||||
|  | ||||
|             $childBar->publish('contacts.publish')->listCheck(true); | ||||
|             $childBar->unpublish('contacts.unpublish')->listCheck(true); | ||||
|             $childBar->standardButton('featured', 'JFEATURE', 'contacts.featured') | ||||
|                 ->listCheck(true); | ||||
|             $childBar->standardButton('unfeatured', 'JUNFEATURE', 'contacts.unfeatured') | ||||
|                 ->listCheck(true); | ||||
|             $childBar->archive('contacts.archive')->listCheck(true); | ||||
|  | ||||
|             if ($user->authorise('core.admin')) { | ||||
|                 $childBar->checkin('contacts.checkin'); | ||||
|             } | ||||
|  | ||||
|             if ($this->state->get('filter.published') != -2) { | ||||
|                 $childBar->trash('contacts.trash')->listCheck(true); | ||||
|             } | ||||
|  | ||||
|             // Add a batch button | ||||
|             if ( | ||||
|                 $user->authorise('core.create', 'com_contact') | ||||
|                 && $user->authorise('core.edit', 'com_contact') | ||||
|                 && $user->authorise('core.edit.state', 'com_contact') | ||||
|             ) { | ||||
|                 $childBar->popupButton('batch', 'JTOOLBAR_BATCH') | ||||
|                     ->popupType('inline') | ||||
|                     ->textHeader(Text::_('COM_CONTACT_BATCH_OPTIONS')) | ||||
|                     ->url('#joomla-dialog-batch') | ||||
|                     ->modalWidth('800px') | ||||
|                     ->modalHeight('fit-content') | ||||
|                     ->listCheck(true); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (!$this->isEmptyState && $this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { | ||||
|             $toolbar->delete('contacts.delete', 'JTOOLBAR_DELETE_FROM_TRASH') | ||||
|                 ->message('JGLOBAL_CONFIRM_DELETE') | ||||
|                 ->listCheck(true); | ||||
|         } | ||||
|  | ||||
|         if ($user->authorise('core.admin', 'com_contact') || $user->authorise('core.options', 'com_contact')) { | ||||
|             $toolbar->preferences('com_contact'); | ||||
|         } | ||||
|  | ||||
|         $toolbar->help('Contacts'); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user