/** * @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 * @return string The html for the element */ function _form_ordering( $name, $value, &$node, $control_name ) { global $_CB_database; $onclick = $node->attributes( 'onclick' ); if ( $onclick ) { $onclickValues = explode( ',', $onclick ); $additionalConditionOrderUp = true; $additionalConditionOrderDown = true; $orderinggroups = $node->getElementByPath( 'orderinggroups'); if ( $orderinggroups ) { $orderings = array(); foreach ( $orderinggroups->children() as $group ) { /** @var $group SimpleXMLElement */ if ( $group->getName() == 'ordering' ) { $orderings[] = $group->attributes( 'name' ); // ignore $group->attributes( 'type' ) here } } if ( count( $orderings ) > 0 ) { foreach ( $orderings as $typeField ) { if ( $this->_modelOfDataRows[$this->_modelOfDataRowsNumber]->get( $typeField ) !== null ) { if ( isset( $this->_modelOfDataRows[$this->_modelOfDataRowsNumber - 1] ) && $this->_modelOfDataRows[$this->_modelOfDataRowsNumber]->get( $typeField ) != $this->_modelOfDataRows[$this->_modelOfDataRowsNumber - 1]->get( $typeField ) ) { $additionalConditionOrderUp = false; } if ( isset( $this->_modelOfDataRows[$this->_modelOfDataRowsNumber + 1] ) && $this->_modelOfDataRows[$this->_modelOfDataRowsNumber]->get( $typeField ) != $this->_modelOfDataRows[$this->_modelOfDataRowsNumber + 1]->get( $typeField ) ) { $additionalConditionOrderDown = false; } } } } } $noordering = ( $node->attributes( 'noordering' ) == 'true' ); $content = ''; if ( in_array( 'arrows', $onclickValues ) && ( ! $noordering ) ) { $content .= $this->_controllerView->pageNav->orderUpIcon( null, ( $value > -10000 && $value < 10000 && $additionalConditionOrderUp ), 'orderup/' . $name ); $content .= ' '; $content .= $this->_controllerView->pageNav->orderDownIcon( null, null, ( $value > -10000 && $value < 10000 && $additionalConditionOrderDown ), 'orderdown/' . $name ); } if ( ( in_array( 'arrows', $onclickValues ) && ( ! $noordering ) ) && in_array( 'number', $onclickValues ) ) { $content .= ' '; } if ( in_array( 'number', $onclickValues ) || $noordering ) { $content .= '<input type="text" name="' . $this->_controllerView->fieldName( $name . '[]' ) . '" size="5" value="' . $value . '" class="form-control text-center"' . ( $noordering ? ' readonly="readonly"' : null ) . ' />'; } } elseif ( $this->_view ) { $content = htmlspecialchars( $value ); } else { if ( ( $value > -10000 ) && ( $value < 10000 ) ) { $dataStorage = $this->_modelOfData[0]->getStorage(); if ( $dataStorage instanceof TableInterface ) { $dataTable = $dataStorage->getTableName(); } else { /** @var \StdClass $dataStorage */ $dataTable = $dataStorage->_tbl; } $xmlsql = new XmlQuery( $_CB_database, $dataTable, $this->_pluginParams ); $xmlsql->setExternalDataTypeValues( 'modelofdata', $this->_modelOfData[0] ); $text = $node->attributes( 'value' ); if ( ! $text ) { $text = $name; } $data = $node->getElementByPath( 'data' ); if ( ! $data ) { $defaultData = '<?xml version="1.0" encoding="UTF-8"?>' . '<data table="' . htmlspecialchars( $dataTable ) . '">' . '<rows>' . '<field name="' . htmlspecialchars( $name ) . '" as="value" />' . '<field name="' . htmlspecialchars( $text ) . '" as="text" />' . '</rows>' . '<orderby>' . '<field name="' . htmlspecialchars( $name ) . '" ordering="ASC" />' . '</orderby>' . '</data>'; $data = new SimpleXMLElement( $defaultData ); $xmlsql->prepare_query( $data ); $xmlsql->addWhere( $name, '>', '-10000', 'sql:int' ); $xmlsql->addWhere( $name, '<', '10000', 'sql:int' ); $orderinggroups = $node->getElementByPath( 'orderinggroups'); if ( $orderinggroups ) { foreach ( $orderinggroups->children() as $group ) { /** @var SimpleXMLElement $group */ $orderingFieldName = $group->attributes( 'name' ); if ( ( $group->getName() == 'ordering' ) && $orderingFieldName && ( $this->_modelOfData[0]->get( $orderingFieldName ) !== null ) ) { $xmlsql->addWhere( $orderingFieldName, '=', $this->_modelOfData[0]->get( $orderingFieldName ), $group->attributes( 'type' ) ); } } } } else { $xmlsql->prepare_query( $data ); } $options = $this->_getOrderingList( $xmlsql->_buildSQLquery() ); if ( $value === '' ) { $value = $options[count( $options ) - 1]->value; } $value = (int) $value; $content = $this->selectList( $options, $node, $control_name, $name, $value ); } else { $content = '<input type="hidden" name="ordering" value="'. $value .'" />' . CBTxt::T( 'This entry cannot be reordered' ); } } return $content; }