/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php
PHP | 309 lines | 273 code | 28 blank | 8 comment | 21 complexity | 750dbae273ad2b9d1b07dd01f4c889c3 MD5 | raw file
Possible License(s): Apache-2.0, IPL-1.0, LGPL-3.0, LGPL-2.1, BSD-3-Clause
- <?php
- /**
- * TScaffoldInputCommon class file.
- *
- * @link http://www.pradosoft.com/
- * @copyright Copyright © 2005-2012 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @package System.Data.ActiveReecord.Scaffold.InputBuilder
- */
- Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputBase');
- class TScaffoldInputCommon extends TScaffoldInputBase
- {
- protected function setDefaultProperty($container, $control, $column, $record)
- {
- $control->setID(self::DEFAULT_ID);
- $control->setEnabled($this->getIsEnabled($column, $record));
- $container->Controls[] = $control;
- }
- protected function setNotNullProperty($container, $control, $column, $record)
- {
- $this->setDefaultProperty($container, $control, $column, $record);
- if(!$column->getAllowNull() && !$column->hasSequence())
- $this->createRequiredValidator($container, $column, $record);
- }
- protected function createBooleanControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $control = new TCheckBox();
- $control->setChecked(TPropertyValue::ensureBoolean($value));
- $control->setCssClass('boolean-checkbox');
- $this->setDefaultProperty($container, $control, $column, $record);
- return $control;
- }
- protected function createDefaultControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $control = new TTextBox();
- $control->setText($value);
- $control->setCssClass('default-textbox scaffold_input');
- if(($len=$column->getColumnSize())!==null)
- $control->setMaxLength($len);
- $this->setNotNullProperty($container, $control, $column, $record);
- return $control;
- }
- protected function getDefaultControlValue($container,$column, $record)
- {
- $control = $container->findControl(self::DEFAULT_ID);
- if($control instanceof TCheckBox)
- return $control->getChecked();
- else if($control instanceof TControl)
- return $control->getText();
- }
- protected function createMultiLineControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $control = new TTextBox();
- $control->setText($value);
- $control->setTextMode(TTextBoxMode::MultiLine);
- $control->setCssClass('multiline-textbox scaffold_input');
- $this->setNotNullProperty($container, $control, $column, $record);
- return $control;
- }
- protected function createYearControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $control = new TDropDownList();
- $years = array();
- $current = intval(@date('Y'));
- $from = $current-10; $to=$current+10;
- for($i = $from; $i <= $to; $i++)
- $years[$i] = $i;
- $control->setDataSource($years);
- $control->setSelectedValue(empty($value) ? $current : $value);
- $control->setCssClass('year-dropdown');
- $this->setNotNullProperty($container, $control, $column, $record);
- return $control;
- }
- protected function createIntegerControl($container, $column, $record)
- {
- $control = $this->createDefaultControl($container, $column, $record);
- $val = $this->createTypeValidator($container, $column, $record);
- $val->setDataType(TValidationDataType::Integer);
- $val->setErrorMessage('Please entery an integer.');
- return $control;
- }
- protected function createFloatControl($container, $column, $record)
- {
- $control = $this->createDefaultControl($container, $column, $record);
- $val = $this->createTypeValidator($container, $column, $record);
- $val->setDataType(TValidationDataType::Float);
- $val->setErrorMessage('Please entery a decimal number.');
- if(($max= $column->getMaxiumNumericConstraint())!==null)
- {
- $val = $this->createRangeValidator($container,$column,$record);
- $val->setDataType(TValidationDataType::Float);
- $val->setMaxValue($max);
- $val->setStrictComparison(true);
- $val->setErrorMessage('Please entery a decimal number strictly less than '.$max.'.');
- }
- return $control;
- }
- protected function createRequiredValidator($container, $column, $record)
- {
- $val = new TRequiredFieldValidator();
- $val->setErrorMessage('*');
- $val->setControlCssClass('required-input');
- $val->setCssClass('required');
- $val->setControlToValidate(self::DEFAULT_ID);
- $val->setValidationGroup($this->getParent()->getValidationGroup());
- $val->setDisplay(TValidatorDisplayStyle::Dynamic);
- $container->Controls[] = $val;
- return $val;
- }
- protected function createTypeValidator($container, $column, $record)
- {
- $val = new TDataTypeValidator();
- $val->setControlCssClass('required-input2');
- $val->setCssClass('required');
- $val->setControlToValidate(self::DEFAULT_ID);
- $val->setValidationGroup($this->getParent()->getValidationGroup());
- $val->setDisplay(TValidatorDisplayStyle::Dynamic);
- $container->Controls[] = $val;
- return $val;
- }
- protected function createRangeValidator($container, $column, $record)
- {
- $val = new TRangeValidator();
- $val->setControlCssClass('required-input3');
- $val->setCssClass('required');
- $val->setControlToValidate(self::DEFAULT_ID);
- $val->setValidationGroup($this->getParent()->getValidationGroup());
- $val->setDisplay(TValidatorDisplayStyle::Dynamic);
- $container->Controls[] = $val;
- return $val;
- }
- protected function createTimeControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $hours=array();
- for($i=0;$i<24;$i++) $hours[] = str_pad($i,2,'0',STR_PAD_LEFT);
- $mins=array();
- for($i=0;$i<60;$i++) $mins[] = str_pad($i,2,'0',STR_PAD_LEFT);
- $hour = intval(@date('H'));
- $min = intval(@date('i'));
- $sec = intval(@date('s'));
- if(!empty($value))
- {
- $match=array();
- if(preg_match('/(\d+):(\d+):?(\d+)?/', $value, $match))
- {
- $hour = $match[1];
- $min = $match[2];
- if(isset($match[3]))
- $sec=$match[3];
- }
- }
- $hcontrol = new TDropDownList();
- $hcontrol->setDataSource($hours);
- $hcontrol->setID(self::DEFAULT_ID);
- $hcontrol->dataBind();
- $hcontrol->setSelectedValue(intval($hour));
- $container->Controls[] = $hcontrol;
- $container->Controls[] = ' : ';
- $mcontrol = new TDropDownList();
- $mcontrol->setDataSource($mins);
- $mcontrol->dataBind();
- $mcontrol->setID('scaffold_time_min');
- $mcontrol->setSelectedValue(intval($min));
- $container->Controls[] = $mcontrol;
- $container->Controls[] = ' : ';
- $scontrol = new TDropDownList();
- $scontrol->setDataSource($mins);
- $scontrol->dataBind();
- $scontrol->setID('scaffold_time_sec');
- $scontrol->setSelectedValue(intval($sec));
- $container->Controls[] = $scontrol;
- return array($hcontrol,$mcontrol,$scontrol);
- }
- protected function createDateControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $control = new TDatePicker();
- $control->setFromYear(1900);
- $control->setInputMode(TDatePickerInputMode::DropDownList);
- $control->setDateFormat('yyyy-MM-dd');
- if(!empty($value))
- $control->setDate(substr($value,0,10));
- $control->setCssClass('date-dropdown');
- $this->setNotNullProperty($container, $control, $column, $record);
- return $control;
- }
- protected function createDateTimeControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $control = $this->createDateControl($container, $column, $record);
- $container->Controls[] = ' @ ';
- $time = $this->createTimeControl($container, $column, $record);
- if(!empty($value))
- {
- $match=array();
- if(preg_match('/(\d+):(\d+):?(\d+)?/', substr($value, 11), $match))
- {
- $time[0]->setSelectedValue(intval($match[1]));
- $time[1]->setSelectedValue(intval($match[2]));
- if(isset($match[3]))
- $time[2]->setSelectedValue(intval($match[3]));
- }
- }
- $time[0]->setID('scaffold_time_hour');
- return array($control, $time[0], $time[1], $time[2]);
- }
- protected function getDateTimeValue($container, $column, $record)
- {
- $date = $container->findControl(self::DEFAULT_ID)->getDate();
- $hour = $container->findControl('scaffold_time_hour')->getSelectedValue();
- $mins = $container->findControl('scaffold_time_min')->getSelectedValue();
- $secs = $container->findControl('scaffold_time_sec')->getSelectedValue();
- return "{$date} {$hour}:{$mins}:{$secs}";
- }
- protected function getTimeValue($container, $column, $record)
- {
- $hour = $container->findControl(self::DEFAULT_ID)->getSelectedValue();
- $mins = $container->findControl('scaffold_time_min')->getSelectedValue();
- $secs = $container->findControl('scaffold_time_sec')->getSelectedValue();
- return "{$hour}:{$mins}:{$secs}";
- }
- protected function createSetControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $selectedValues = preg_split('/\s*,\s*/', $value);
- $control = new TCheckBoxList();
- $values = $column->getDbTypeValues();
- $control->setDataSource($values);
- $control->dataBind();
- $control->setSelectedIndices($this->getMatchingIndices($values,$selectedValues));
- $control->setID(self::DEFAULT_ID);
- $control->setCssClass('set-checkboxes');
- $this->setNotNullProperty($container, $control, $column, $record);
- return $control;
- }
- protected function getMatchingIndices($checks, $values)
- {
- $index=array();
- for($i=0, $k=count($checks); $i<$k; $i++)
- {
- if(in_array($checks[$i], $values))
- $index[] = $i;
- }
- return $index;
- }
- protected function createEnumControl($container, $column, $record)
- {
- $value = $this->getRecordPropertyValue($column, $record);
- $selectedValues = preg_split('/\s*,\s*/', $value);
- $control = new TRadioButtonList();
- $values = $column->getDbTypeValues();
- $control->setDataSource($values);
- $control->dataBind();
- $index = $this->getMatchingIndices($values,$selectedValues);
- if(count($index) > 0)
- $control->setSelectedIndex($index[0]);
- $control->setID(self::DEFAULT_ID);
- $control->setCssClass('enum-radio-buttons');
- $this->setNotNullProperty($container, $control, $column, $record);
- return $control;
- }
- protected function getSetValue($container, $column, $record)
- {
- $value=array();
- foreach($container->findControl(self::DEFAULT_ID)->getItems() as $item)
- {
- if($item->getSelected())
- $value[] = $item->getText();
- }
- return implode(',', $value);
- }
- protected function getEnumValue($container, $column, $record)
- {
- return $container->findControl(self::DEFAULT_ID)->getSelectedItem()->getText();
- }
- }