/app/protected/modules/designer/views/AttributesCollectionView.php
PHP | 157 lines | 103 code | 14 blank | 40 comment | 11 complexity | 36e9bfb3f6bdd9b0a2d2899686860eb0 MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, GPL-2.0, LGPL-3.0, LGPL-2.1, BSD-2-Clause
- <?php
- /*********************************************************************************
- * Zurmo is a customer relationship management program developed by
- * Zurmo, Inc. Copyright (C) 2015 Zurmo Inc.
- *
- * Zurmo is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Affero General Public License version 3 as published by the
- * Free Software Foundation with the addition of the following permission added
- * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
- * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
- * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
- *
- * Zurmo is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Affero General Public License along with
- * this program; if not, see http://www.gnu.org/licenses or write to the Free
- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- *
- * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
- * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
- *
- * The interactive user interfaces in original and modified versions
- * of this program must display Appropriate Legal Notices, as required under
- * Section 5 of the GNU Affero General Public License version 3.
- *
- * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
- * these Appropriate Legal Notices must retain the display of the Zurmo
- * logo and Zurmo copyright notice. If the display of the logo is not reasonably
- * feasible for technical reasons, the Appropriate Legal Notices must display the words
- * "Copyright Zurmo Inc. 2015. All rights reserved".
- ********************************************************************************/
- class AttributesCollectionView extends MetadataView
- {
- protected $cssClasses = array( 'TableOfContentsView');
- protected $controllerId;
- protected $moduleId;
- protected $attributesCollection;
- protected $moduleClassName;
- protected $modelClassName;
- public function __construct($controllerId, $moduleId, $attributesCollection, $moduleClassName, $modelClassName, $title)
- {
- $this->controllerId = $controllerId;
- $this->moduleId = $moduleId;
- $this->attributesCollection = $attributesCollection;
- $this->moduleClassName = $moduleClassName;
- $this->modelClassName = $modelClassName;
- $this->modelId = null;
- $this->title = $title;
- }
- protected function renderContent()
- {
- $content = null;
- $content .= $this->renderBeforeTableContent();
- $modelClassName = $this->modelClassName;
- if (count($this->attributesCollection) > 0)
- {
- $content .= '<div>';
- $content .= $this->renderTitleContent();
- $content .= '<ul class="configuration-list">';
- foreach ($this->attributesCollection as $attributeName => $information)
- {
- $route = $this->moduleId . '/' . $this->controllerId . '/AttributeEdit/';
- $attributeFormClassName = AttributesFormFactory::getFormClassNameByAttributeType($information['elementType']);
- if ($information['elementType'] == 'EmailAddressInformation' ||
- $information['elementType'] == 'Address' ||
- $information['elementType'] == 'User' ||
- $information['isReadOnly'] ||
- $attributeName == 'id' ||
- ($this->isAttributeOnModelOrCastedUp($attributeName) && !$this->isCastedUpAttributeConfigurationAllowed($attributeName)) ||
- in_array($attributeName, $modelClassName::getNonConfigurableAttributes()))
- {
- //temporary until we figure out how to handle these types.
- $linkContent = null;
- }
- else
- {
- $url = Yii::app()->createUrl($route,
- array(
- 'moduleClassName' => $this->moduleClassName,
- 'attributeTypeName' => $information['elementType'],
- 'attributeName' => $attributeName)
- );
- $linkContent = static::renderConfigureLinkContent($url, 'edit-link-' . $attributeName);
- }
- $content .= '<li>';
- $content .= '<h4>' . $information['attributeLabel'] . '</h4>';
- $content .= ' - ' . $attributeFormClassName::getAttributeTypeDisplayName();
- $content .= $linkContent;
- $content .= '</li>';
- }
- $content .= '</ul>';
- $content .= '</div>';
- }
- return $content;
- }
- /**
- * If the attribute is not on the same model class but nested up, it should be blocked from being configured
- * in the designer tool since it can have side effects. You can still manually override this in the code if
- * necessary.
- */
- protected function isAttributeOnModelOrCastedUp($attributeName)
- {
- assert('is_string($attributeName)');
- $attributeAdapter = new RedBeanModelAttributeToDataProviderAdapter($this->modelClassName, $attributeName);
- if (!$attributeAdapter->getModel()->isAttribute($attributeName))
- {
- return false;
- }
- if ($attributeAdapter->getAttributeModelClassName() != $this->modelClassName)
- {
- return true;
- }
- return false;
- }
- protected function isCastedUpAttributeConfigurationAllowed($attributeName)
- {
- $modelClassName = $this->modelClassName;
- if (method_exists($modelClassName, 'getAllowedCastedUpAttributeNames') &&
- in_array($attributeName, $modelClassName::getAllowedCastedUpAttributeNames()))
- {
- return true;
- }
- }
- public function isUniqueToAPage()
- {
- return false;
- }
- protected function renderBeforeTableContent()
- {
- }
- protected static function renderConfigureLinkContent($url, $id)
- {
- assert('is_string($url) || $url == null');
- assert('is_string($id)');
- return ZurmoHtml::link(ZurmoHtml::wrapLabel(Zurmo::t('Core', 'Configure')),
- $url, array('id' => $id, 'class' => 'white-button'));
- }
- }
- ?>