PageRenderTime 25ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/app/protected/modules/designer/views/AttributesCollectionView.php

https://bitbucket.org/zurmo/zurmo/
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
  1. <?php
  2. /*********************************************************************************
  3. * Zurmo is a customer relationship management program developed by
  4. * Zurmo, Inc. Copyright (C) 2015 Zurmo Inc.
  5. *
  6. * Zurmo is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU Affero General Public License version 3 as published by the
  8. * Free Software Foundation with the addition of the following permission added
  9. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  10. * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
  11. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  12. *
  13. * Zurmo is distributed in the hope that it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public License along with
  19. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  20. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  21. * 02110-1301 USA.
  22. *
  23. * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
  24. * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
  25. *
  26. * The interactive user interfaces in original and modified versions
  27. * of this program must display Appropriate Legal Notices, as required under
  28. * Section 5 of the GNU Affero General Public License version 3.
  29. *
  30. * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
  31. * these Appropriate Legal Notices must retain the display of the Zurmo
  32. * logo and Zurmo copyright notice. If the display of the logo is not reasonably
  33. * feasible for technical reasons, the Appropriate Legal Notices must display the words
  34. * "Copyright Zurmo Inc. 2015. All rights reserved".
  35. ********************************************************************************/
  36. class AttributesCollectionView extends MetadataView
  37. {
  38. protected $cssClasses = array( 'TableOfContentsView');
  39. protected $controllerId;
  40. protected $moduleId;
  41. protected $attributesCollection;
  42. protected $moduleClassName;
  43. protected $modelClassName;
  44. public function __construct($controllerId, $moduleId, $attributesCollection, $moduleClassName, $modelClassName, $title)
  45. {
  46. $this->controllerId = $controllerId;
  47. $this->moduleId = $moduleId;
  48. $this->attributesCollection = $attributesCollection;
  49. $this->moduleClassName = $moduleClassName;
  50. $this->modelClassName = $modelClassName;
  51. $this->modelId = null;
  52. $this->title = $title;
  53. }
  54. protected function renderContent()
  55. {
  56. $content = null;
  57. $content .= $this->renderBeforeTableContent();
  58. $modelClassName = $this->modelClassName;
  59. if (count($this->attributesCollection) > 0)
  60. {
  61. $content .= '<div>';
  62. $content .= $this->renderTitleContent();
  63. $content .= '<ul class="configuration-list">';
  64. foreach ($this->attributesCollection as $attributeName => $information)
  65. {
  66. $route = $this->moduleId . '/' . $this->controllerId . '/AttributeEdit/';
  67. $attributeFormClassName = AttributesFormFactory::getFormClassNameByAttributeType($information['elementType']);
  68. if ($information['elementType'] == 'EmailAddressInformation' ||
  69. $information['elementType'] == 'Address' ||
  70. $information['elementType'] == 'User' ||
  71. $information['isReadOnly'] ||
  72. $attributeName == 'id' ||
  73. ($this->isAttributeOnModelOrCastedUp($attributeName) && !$this->isCastedUpAttributeConfigurationAllowed($attributeName)) ||
  74. in_array($attributeName, $modelClassName::getNonConfigurableAttributes()))
  75. {
  76. //temporary until we figure out how to handle these types.
  77. $linkContent = null;
  78. }
  79. else
  80. {
  81. $url = Yii::app()->createUrl($route,
  82. array(
  83. 'moduleClassName' => $this->moduleClassName,
  84. 'attributeTypeName' => $information['elementType'],
  85. 'attributeName' => $attributeName)
  86. );
  87. $linkContent = static::renderConfigureLinkContent($url, 'edit-link-' . $attributeName);
  88. }
  89. $content .= '<li>';
  90. $content .= '<h4>' . $information['attributeLabel'] . '</h4>';
  91. $content .= ' - ' . $attributeFormClassName::getAttributeTypeDisplayName();
  92. $content .= $linkContent;
  93. $content .= '</li>';
  94. }
  95. $content .= '</ul>';
  96. $content .= '</div>';
  97. }
  98. return $content;
  99. }
  100. /**
  101. * If the attribute is not on the same model class but nested up, it should be blocked from being configured
  102. * in the designer tool since it can have side effects. You can still manually override this in the code if
  103. * necessary.
  104. */
  105. protected function isAttributeOnModelOrCastedUp($attributeName)
  106. {
  107. assert('is_string($attributeName)');
  108. $attributeAdapter = new RedBeanModelAttributeToDataProviderAdapter($this->modelClassName, $attributeName);
  109. if (!$attributeAdapter->getModel()->isAttribute($attributeName))
  110. {
  111. return false;
  112. }
  113. if ($attributeAdapter->getAttributeModelClassName() != $this->modelClassName)
  114. {
  115. return true;
  116. }
  117. return false;
  118. }
  119. protected function isCastedUpAttributeConfigurationAllowed($attributeName)
  120. {
  121. $modelClassName = $this->modelClassName;
  122. if (method_exists($modelClassName, 'getAllowedCastedUpAttributeNames') &&
  123. in_array($attributeName, $modelClassName::getAllowedCastedUpAttributeNames()))
  124. {
  125. return true;
  126. }
  127. }
  128. public function isUniqueToAPage()
  129. {
  130. return false;
  131. }
  132. protected function renderBeforeTableContent()
  133. {
  134. }
  135. protected static function renderConfigureLinkContent($url, $id)
  136. {
  137. assert('is_string($url) || $url == null');
  138. assert('is_string($id)');
  139. return ZurmoHtml::link(ZurmoHtml::wrapLabel(Zurmo::t('Core', 'Configure')),
  140. $url, array('id' => $id, 'class' => 'white-button'));
  141. }
  142. }
  143. ?>