'two', 4 => 'four', 6 => 'six', 8 => 'eight', 12 => 'twelve', 20 => 'medium', 30 => 'big', 45 => 'huge', ); /** * Constructor * * @access public */ function __construct() { $template = CRM_Core_Smarty::singleton(); parent::__construct($template); } /** * Static instance provider. * * Method providing static instance of as in Singleton pattern. */ static function &singleton() { if (!isset(self::$_singleton)) { self::$_singleton = new CRM_Core_Form_Renderer(); } return self::$_singleton; } /** * Creates an array representing an element containing * the key for storing this. We allow the parent to do most of the * work, but then we add some CiviCRM specific enhancements to * make the html compliant with our css etc * * @access private * * @param $element HTML_QuickForm_element * @param $required bool - Whether an element is required * @param $error string - Error associated with the element * * @return array */ function _elementToArray(&$element, $required, $error) { self::updateAttributes($element, $required, $error); $el = parent::_elementToArray($element, $required, $error); // add label html if (!empty($el['label'])) { $id = $element->getAttribute('id'); if (!empty($id)) { $el['label'] = ''; } else { $el['label'] = ""; } } // Display-only (frozen) elements if (!empty($el['frozen'])) { if ($element->getAttribute('data-api-params') && $element->getAttribute('data-entity-value')) { $this->renderFrozenEntityRef($el, $element); } $el['html'] = '
' . $el['html'] . '
'; } // Active form elements else { if ($element->getType() == 'select' && $element->getAttribute('data-option-group-url')) { $this->addOptionsEditLink($el, $element); } if ($element->getType() == 'group' && $element->getAttribute('unselectable')) { $this->appendUnselectButton($el, $element); } } return $el; } /** * Update the attributes of this element and add a few CiviCRM * based attributes so we can style this form element better * * @access private * * @param $element HTML_QuickForm_element object * @param $required bool Whether an element is required * @param $error string Error associated with the element * * @return array * @static */ static function updateAttributes(&$element, $required, $error) { // lets create an id for all input elements, so we can generate nice label tags // to make it nice and clean, we'll just use the elementName if it is non null $attributes = array(); if (!$element->getAttribute('id')) { $name = $element->getAttribute('name'); if ($name) { $attributes['id'] = str_replace(array(']', '['), array('', '_'), $name ); } } $class = $element->getAttribute('class'); $type = $element->getType(); if (!$class) { if ($type == 'text') { $size = $element->getAttribute('size'); if (!empty($size)) { $class = CRM_Utils_Array::value($size, self::$_sizeMapper); } } } if ($type == 'select' && $element->getAttribute('multiple')) { $type = 'multiselect'; } $class = ($class ? "$class " : '') . 'crm-form-' . $type; if ($required) { $class .= ' required'; } if ($error) { $class .= ' error'; } $attributes['class'] = $class; $element->updateAttributes($attributes); } /** * Render entity references as text. * If user has permission, format as link (or now limited to contacts). * @param $el array * @param $field HTML_QuickForm_element */ function renderFrozenEntityRef(&$el, $field) { $api = json_decode($field->getAttribute('data-api-params'), TRUE); $vals = json_decode($field->getAttribute('data-entity-value'), TRUE); if (isset($vals['id'])) { $vals = array($vals); } $display = array(); foreach ($vals as $val) { // Format contact as link if ($api['entity'] == 'contact' && CRM_Contact_BAO_Contact_Permission::allow($val['id'], CRM_Core_Permission::VIEW)) { $url = CRM_Utils_System::url("civicrm/contact/view", array('reset' => 1, 'cid' => $val['id'])); $val['text'] = '' . $val['text'] . ''; } $display[] = $val['text']; } $el['html'] = implode('; ', $display) . ''; } /** * @param array $el * @param HTML_QuickForm_element $field */ function addOptionsEditLink(&$el, $field) { if (CRM_Core_Permission::check('administer CiviCRM')) { $el['html'] .= ' '; } } /** * @param array $el * @param HTML_QuickForm_element $field */ function appendUnselectButton(&$el, $field) { // Initially hide if not needed // Note: visibility:hidden prevents layout jumping around unlike display:none $display = $field->getValue() !== NULL ? '' : ' style="visibility:hidden;"'; $el['html'] .= ' '; } }