/** * Implements a form checkmark * * @param string $name The name of the form element * @param string $value The value of the element * @param SimpleXMLElement $node The xml element for the parameter * @param string $control_name The control name * @param string $defaultTask The task used for toggleable item * @param string $defaultTitle The title to display when item is not toggleable * @param string $defaultToggleTitle The title displayed when item is toggleable * @return string The html for the element */ function _form_checkmark( $name, $value, &$node, $control_name, $defaultTask = null, $defaultTitle = null, $defaultToggleTitle = null ) { if ( $this->_view ) { $isToggle = ( $node->attributes( 'onclick' ) == 'toggle' ); $checkmarkTask = ( $defaultTask ? $defaultTask : ( $value ? 'disable/' . $name : 'enable/' . $name ) ); $checkmarkTitle = null; $checkmarkToggleTitle = null; $classes = null; $iconClass = null; $iconSize = null; $textClass = null; if ( $node->getChildByNameAttributes( 'option' ) ) { $valueNode = $node->getAnyChildByNameAttr( 'option', 'index', $value ); if ( ! $valueNode ) { $valueNode = $node->getAnyChildByNameAttr( 'option', 'value', $value ); } if ( $valueNode ) { $checkmarkTitle = CBTxt::T( $valueNode->data() ); $classes = RegistryEditView::buildClasses( $valueNode ); $iconClass = $valueNode->attributes( 'iconclass' ); $iconSize = $valueNode->attributes( 'iconsize' ); $textClass = $valueNode->attributes( 'textclass' ); if ( $isToggle ) { $nextOption = $valueNode->xpath( '(./following-sibling::option[not(@selectable="false" or @toggleable="false")])[1]' ); if ( ! $nextOption ) { $nextOption = $valueNode->xpath( '(../child::option[not(@selectable="false" or @toggleable="false")])[1]' ); } if ( $nextOption ) { $checkmarkToggleTitle = CBTxt::T( $nextOption[0]->attributes( 'title' ) ); $checkmarkToggleValue = $nextOption[0]->attributes( 'index' ); if ( ! $checkmarkToggleValue ) { $checkmarkToggleValue = $nextOption[0]->attributes( 'value' ); } if ( $checkmarkToggleValue != $value ) { $checkmarkTask = 'setfield/' . $name . '/' . $checkmarkToggleValue; } else { // There's nothing to toggle to so lets shut off toggling: $isToggle = false; } } else { // There's nothing to toggle to so lets shut off toggling: $isToggle = false; } } } } else { if ( ! $isToggle ) { $checkmarkTitle = CBTxt::T( $node->attributes( 'title' ) ); } } if ( ! $classes ) { $classes = RegistryEditView::buildClasses( $node ); $iconClass = $node->attributes( 'iconclass' ); $iconSize = $node->attributes( 'iconsize' ); $textClass = $node->attributes( 'textclass' ); } if ( ! $iconClass ) { $classes .= ' fa'; if ( $value ) { $classes .= ' fa-check'; } else { $classes .= ' fa-times'; } } if ( ! $iconSize ) { $classes .= ' fa-lg'; } if ( ! $textClass ) { if ( $value ) { $classes .= ' text-success'; } else { $classes .= ' text-danger'; } } if ( $isToggle ) { if ( ! $checkmarkToggleTitle ) { $checkmarkToggleTitle = ( $defaultToggleTitle ? $defaultToggleTitle : ( $value ? CBTxt::T( 'Disable Item' ) : CBTxt::T( 'Enable Item' ) ) ); } $taskName = $this->_controllerView->taskName( false ); $subTaskName = $this->_controllerView->subtaskName( false ); $subTaskValue = $this->_controllerView->subtaskValue( $checkmarkTask, false ); $fieldId = $this->_controllerView->fieldId( 'id', null, false ); $onClick = "return cbListItemTask( this, '" . $taskName . "', '" . $subTaskName . "', '" . $subTaskValue . "', '" . $fieldId . "', '" . $this->_controllerView->pageNav->getRowIndex() . "' );"; $return = '<a href="javascript: void(0);" onclick="' . $onClick . '">' . '<span class="' . htmlspecialchars( trim( $classes ) ) . '" title="' . htmlspecialchars( $checkmarkToggleTitle ) . '"></span>' . '</a>'; return $return; } else { if ( ! $checkmarkTitle ) { $checkmarkTitle = ( $defaultTitle ? $defaultTitle : ( $value ? CBTxt::T( 'Enabled' ) : CBTxt::T( 'Disabled' ) ) ); } return '<span class="' . htmlspecialchars( trim( $classes ) ) . '" title="' . htmlspecialchars( $checkmarkTitle ) . '"></span>'; } } else { if ( $node->getChildByNameAttributes( 'option' ) ) { return $this->_form_list( $name, $value, $node, $control_name, true ); } else { return $this->_form_yesno( $name, $value, $node, $control_name ); } } }