PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php

http://prado3.googlecode.com/
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
  1. <?php
  2. /**
  3. * TScaffoldInputCommon class file.
  4. *
  5. * @link http://www.pradosoft.com/
  6. * @copyright Copyright &copy; 2005-2012 PradoSoft
  7. * @license http://www.pradosoft.com/license/
  8. * @package System.Data.ActiveReecord.Scaffold.InputBuilder
  9. */
  10. Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputBase');
  11. class TScaffoldInputCommon extends TScaffoldInputBase
  12. {
  13. protected function setDefaultProperty($container, $control, $column, $record)
  14. {
  15. $control->setID(self::DEFAULT_ID);
  16. $control->setEnabled($this->getIsEnabled($column, $record));
  17. $container->Controls[] = $control;
  18. }
  19. protected function setNotNullProperty($container, $control, $column, $record)
  20. {
  21. $this->setDefaultProperty($container, $control, $column, $record);
  22. if(!$column->getAllowNull() && !$column->hasSequence())
  23. $this->createRequiredValidator($container, $column, $record);
  24. }
  25. protected function createBooleanControl($container, $column, $record)
  26. {
  27. $value = $this->getRecordPropertyValue($column, $record);
  28. $control = new TCheckBox();
  29. $control->setChecked(TPropertyValue::ensureBoolean($value));
  30. $control->setCssClass('boolean-checkbox');
  31. $this->setDefaultProperty($container, $control, $column, $record);
  32. return $control;
  33. }
  34. protected function createDefaultControl($container, $column, $record)
  35. {
  36. $value = $this->getRecordPropertyValue($column, $record);
  37. $control = new TTextBox();
  38. $control->setText($value);
  39. $control->setCssClass('default-textbox scaffold_input');
  40. if(($len=$column->getColumnSize())!==null)
  41. $control->setMaxLength($len);
  42. $this->setNotNullProperty($container, $control, $column, $record);
  43. return $control;
  44. }
  45. protected function getDefaultControlValue($container,$column, $record)
  46. {
  47. $control = $container->findControl(self::DEFAULT_ID);
  48. if($control instanceof TCheckBox)
  49. return $control->getChecked();
  50. else if($control instanceof TControl)
  51. return $control->getText();
  52. }
  53. protected function createMultiLineControl($container, $column, $record)
  54. {
  55. $value = $this->getRecordPropertyValue($column, $record);
  56. $control = new TTextBox();
  57. $control->setText($value);
  58. $control->setTextMode(TTextBoxMode::MultiLine);
  59. $control->setCssClass('multiline-textbox scaffold_input');
  60. $this->setNotNullProperty($container, $control, $column, $record);
  61. return $control;
  62. }
  63. protected function createYearControl($container, $column, $record)
  64. {
  65. $value = $this->getRecordPropertyValue($column, $record);
  66. $control = new TDropDownList();
  67. $years = array();
  68. $current = intval(@date('Y'));
  69. $from = $current-10; $to=$current+10;
  70. for($i = $from; $i <= $to; $i++)
  71. $years[$i] = $i;
  72. $control->setDataSource($years);
  73. $control->setSelectedValue(empty($value) ? $current : $value);
  74. $control->setCssClass('year-dropdown');
  75. $this->setNotNullProperty($container, $control, $column, $record);
  76. return $control;
  77. }
  78. protected function createIntegerControl($container, $column, $record)
  79. {
  80. $control = $this->createDefaultControl($container, $column, $record);
  81. $val = $this->createTypeValidator($container, $column, $record);
  82. $val->setDataType(TValidationDataType::Integer);
  83. $val->setErrorMessage('Please entery an integer.');
  84. return $control;
  85. }
  86. protected function createFloatControl($container, $column, $record)
  87. {
  88. $control = $this->createDefaultControl($container, $column, $record);
  89. $val = $this->createTypeValidator($container, $column, $record);
  90. $val->setDataType(TValidationDataType::Float);
  91. $val->setErrorMessage('Please entery a decimal number.');
  92. if(($max= $column->getMaxiumNumericConstraint())!==null)
  93. {
  94. $val = $this->createRangeValidator($container,$column,$record);
  95. $val->setDataType(TValidationDataType::Float);
  96. $val->setMaxValue($max);
  97. $val->setStrictComparison(true);
  98. $val->setErrorMessage('Please entery a decimal number strictly less than '.$max.'.');
  99. }
  100. return $control;
  101. }
  102. protected function createRequiredValidator($container, $column, $record)
  103. {
  104. $val = new TRequiredFieldValidator();
  105. $val->setErrorMessage('*');
  106. $val->setControlCssClass('required-input');
  107. $val->setCssClass('required');
  108. $val->setControlToValidate(self::DEFAULT_ID);
  109. $val->setValidationGroup($this->getParent()->getValidationGroup());
  110. $val->setDisplay(TValidatorDisplayStyle::Dynamic);
  111. $container->Controls[] = $val;
  112. return $val;
  113. }
  114. protected function createTypeValidator($container, $column, $record)
  115. {
  116. $val = new TDataTypeValidator();
  117. $val->setControlCssClass('required-input2');
  118. $val->setCssClass('required');
  119. $val->setControlToValidate(self::DEFAULT_ID);
  120. $val->setValidationGroup($this->getParent()->getValidationGroup());
  121. $val->setDisplay(TValidatorDisplayStyle::Dynamic);
  122. $container->Controls[] = $val;
  123. return $val;
  124. }
  125. protected function createRangeValidator($container, $column, $record)
  126. {
  127. $val = new TRangeValidator();
  128. $val->setControlCssClass('required-input3');
  129. $val->setCssClass('required');
  130. $val->setControlToValidate(self::DEFAULT_ID);
  131. $val->setValidationGroup($this->getParent()->getValidationGroup());
  132. $val->setDisplay(TValidatorDisplayStyle::Dynamic);
  133. $container->Controls[] = $val;
  134. return $val;
  135. }
  136. protected function createTimeControl($container, $column, $record)
  137. {
  138. $value = $this->getRecordPropertyValue($column, $record);
  139. $hours=array();
  140. for($i=0;$i<24;$i++) $hours[] = str_pad($i,2,'0',STR_PAD_LEFT);
  141. $mins=array();
  142. for($i=0;$i<60;$i++) $mins[] = str_pad($i,2,'0',STR_PAD_LEFT);
  143. $hour = intval(@date('H'));
  144. $min = intval(@date('i'));
  145. $sec = intval(@date('s'));
  146. if(!empty($value))
  147. {
  148. $match=array();
  149. if(preg_match('/(\d+):(\d+):?(\d+)?/', $value, $match))
  150. {
  151. $hour = $match[1];
  152. $min = $match[2];
  153. if(isset($match[3]))
  154. $sec=$match[3];
  155. }
  156. }
  157. $hcontrol = new TDropDownList();
  158. $hcontrol->setDataSource($hours);
  159. $hcontrol->setID(self::DEFAULT_ID);
  160. $hcontrol->dataBind();
  161. $hcontrol->setSelectedValue(intval($hour));
  162. $container->Controls[] = $hcontrol;
  163. $container->Controls[] = ' : ';
  164. $mcontrol = new TDropDownList();
  165. $mcontrol->setDataSource($mins);
  166. $mcontrol->dataBind();
  167. $mcontrol->setID('scaffold_time_min');
  168. $mcontrol->setSelectedValue(intval($min));
  169. $container->Controls[] = $mcontrol;
  170. $container->Controls[] = ' : ';
  171. $scontrol = new TDropDownList();
  172. $scontrol->setDataSource($mins);
  173. $scontrol->dataBind();
  174. $scontrol->setID('scaffold_time_sec');
  175. $scontrol->setSelectedValue(intval($sec));
  176. $container->Controls[] = $scontrol;
  177. return array($hcontrol,$mcontrol,$scontrol);
  178. }
  179. protected function createDateControl($container, $column, $record)
  180. {
  181. $value = $this->getRecordPropertyValue($column, $record);
  182. $control = new TDatePicker();
  183. $control->setFromYear(1900);
  184. $control->setInputMode(TDatePickerInputMode::DropDownList);
  185. $control->setDateFormat('yyyy-MM-dd');
  186. if(!empty($value))
  187. $control->setDate(substr($value,0,10));
  188. $control->setCssClass('date-dropdown');
  189. $this->setNotNullProperty($container, $control, $column, $record);
  190. return $control;
  191. }
  192. protected function createDateTimeControl($container, $column, $record)
  193. {
  194. $value = $this->getRecordPropertyValue($column, $record);
  195. $control = $this->createDateControl($container, $column, $record);
  196. $container->Controls[] = ' @ ';
  197. $time = $this->createTimeControl($container, $column, $record);
  198. if(!empty($value))
  199. {
  200. $match=array();
  201. if(preg_match('/(\d+):(\d+):?(\d+)?/', substr($value, 11), $match))
  202. {
  203. $time[0]->setSelectedValue(intval($match[1]));
  204. $time[1]->setSelectedValue(intval($match[2]));
  205. if(isset($match[3]))
  206. $time[2]->setSelectedValue(intval($match[3]));
  207. }
  208. }
  209. $time[0]->setID('scaffold_time_hour');
  210. return array($control, $time[0], $time[1], $time[2]);
  211. }
  212. protected function getDateTimeValue($container, $column, $record)
  213. {
  214. $date = $container->findControl(self::DEFAULT_ID)->getDate();
  215. $hour = $container->findControl('scaffold_time_hour')->getSelectedValue();
  216. $mins = $container->findControl('scaffold_time_min')->getSelectedValue();
  217. $secs = $container->findControl('scaffold_time_sec')->getSelectedValue();
  218. return "{$date} {$hour}:{$mins}:{$secs}";
  219. }
  220. protected function getTimeValue($container, $column, $record)
  221. {
  222. $hour = $container->findControl(self::DEFAULT_ID)->getSelectedValue();
  223. $mins = $container->findControl('scaffold_time_min')->getSelectedValue();
  224. $secs = $container->findControl('scaffold_time_sec')->getSelectedValue();
  225. return "{$hour}:{$mins}:{$secs}";
  226. }
  227. protected function createSetControl($container, $column, $record)
  228. {
  229. $value = $this->getRecordPropertyValue($column, $record);
  230. $selectedValues = preg_split('/\s*,\s*/', $value);
  231. $control = new TCheckBoxList();
  232. $values = $column->getDbTypeValues();
  233. $control->setDataSource($values);
  234. $control->dataBind();
  235. $control->setSelectedIndices($this->getMatchingIndices($values,$selectedValues));
  236. $control->setID(self::DEFAULT_ID);
  237. $control->setCssClass('set-checkboxes');
  238. $this->setNotNullProperty($container, $control, $column, $record);
  239. return $control;
  240. }
  241. protected function getMatchingIndices($checks, $values)
  242. {
  243. $index=array();
  244. for($i=0, $k=count($checks); $i<$k; $i++)
  245. {
  246. if(in_array($checks[$i], $values))
  247. $index[] = $i;
  248. }
  249. return $index;
  250. }
  251. protected function createEnumControl($container, $column, $record)
  252. {
  253. $value = $this->getRecordPropertyValue($column, $record);
  254. $selectedValues = preg_split('/\s*,\s*/', $value);
  255. $control = new TRadioButtonList();
  256. $values = $column->getDbTypeValues();
  257. $control->setDataSource($values);
  258. $control->dataBind();
  259. $index = $this->getMatchingIndices($values,$selectedValues);
  260. if(count($index) > 0)
  261. $control->setSelectedIndex($index[0]);
  262. $control->setID(self::DEFAULT_ID);
  263. $control->setCssClass('enum-radio-buttons');
  264. $this->setNotNullProperty($container, $control, $column, $record);
  265. return $control;
  266. }
  267. protected function getSetValue($container, $column, $record)
  268. {
  269. $value=array();
  270. foreach($container->findControl(self::DEFAULT_ID)->getItems() as $item)
  271. {
  272. if($item->getSelected())
  273. $value[] = $item->getText();
  274. }
  275. return implode(',', $value);
  276. }
  277. protected function getEnumValue($container, $column, $record)
  278. {
  279. return $container->findControl(self::DEFAULT_ID)->getSelectedItem()->getText();
  280. }
  281. }