PageRenderTime 61ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/server/components/controls/forms/ArrowFormCtrlManager.php

http://arrowplatform.googlecode.com/
PHP | 160 lines | 78 code | 23 blank | 59 comment | 3 complexity | f7153cb0afe093ba1964a5c455e62044 MD5 | raw file
  1. <?php
  2. ArrowController::importModel("org.arrowplatform.controls.forms.ctrl.ArrowForm");
  3. ArrowController::importModel("org.arrowplatform.controls.forms.ArrowFormException");
  4. /**
  5. * Class Persistent
  6. *
  7. * FormManager provides API to manage forms
  8. * It's used by ArrowTemplateParser and by user code
  9. *
  10. * @author Artur Kmera
  11. * @version 0.9
  12. * @package Arrow
  13. * @subpackage Forms
  14. */
  15. class ArrowFormCtrlManager implements IArrowCacheable, IArrowControlsManager{
  16. /**
  17. * Constant with conf file
  18. */
  19. //const CONF_FILE = "/conf/forms-conf.xml";
  20. /**
  21. * Array with registred fields
  22. * where key is register name and value is field model
  23. *
  24. * @var array
  25. */
  26. private $registredFields = array(
  27. "text" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormText",
  28. "number" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormNumber",
  29. "radiogroup" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormRadioGroup",
  30. "checkbox" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormCheckbox",
  31. "checkboxgroup" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormCheckboxGroup",
  32. "textarea" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormTextarea",
  33. "password" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormPassword",
  34. "mail" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormMail",
  35. "hidden" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormHidden",
  36. "file" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormFile",
  37. "select" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormSelect",
  38. "option" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormOption",
  39. "imageupload" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormImageupload",
  40. "submit" => "org.arrowplatform.controls.forms.ctrl.simple.ArrowFormSubmit",
  41. "error" => "org.arrowplatform.controls.forms.ctrl.ArrowFormError",
  42. "errorbound" => "org.arrowplatform.controls.forms.ctrl.ArrowFormErrorBound",
  43. "error" => "org.arrowplatform.controls.forms.ctrl.ArrowFormError",
  44. "date" => "org.arrowplatform.controls.forms.ctrl.javascript.ArrowFormDate",
  45. "wyswig" => "org.arrowplatform.controls.forms.ctrl.javascript.ArrowFormWyswig",
  46. "slidebar" => "org.arrowplatform.controls.forms.ctrl.javascript.ArrowFormSlideBar",
  47. "switch" => "org.arrowplatform.controls.forms.ctrl.javascript.ArrowFormSwitch",
  48. "code" => "org.arrowplatform.controls.forms.ctrl.javascript.ArrowFormCode"
  49. );
  50. /**
  51. * Singleton static var
  52. *
  53. * @var ArrowFieldsManager
  54. */
  55. private static $selfInstance = null;
  56. /**
  57. * Singleton
  58. *
  59. * @return ArrowFieldsManager
  60. */
  61. public static function getDefault( ) {
  62. if (self :: $selfInstance == null ) {
  63. self :: $selfInstance = new ArrowFormCtrlManager();
  64. }
  65. return self :: $selfInstance;
  66. }
  67. /**
  68. * Constructor loads external data from ArrowView
  69. *
  70. */
  71. private function __construct(){
  72. //$confFile = ArrowController::$activeProject->getPath()."/".self::CONF_FILE;
  73. //$cacheFile = ArrowCacheProvider::getFileCache( $this, $confFile, array( "file_prefix" => ArrowController::$activeProject->getId()."_forms_config" ) );
  74. //require_once $cacheFile;
  75. //$this->registredFields = array_merge( $this->registredFields, $cache["fields"]);
  76. }
  77. public function getRegistredFields(){
  78. return $this->registredFields;
  79. }
  80. /**
  81. * IArrowCacheable implementation
  82. *
  83. * @param Array $params
  84. * @return Array
  85. */
  86. public function generateCache($params){
  87. $tmp = array();
  88. $conf = ArrowController::$activeProject->getXMLConfig(self::CONF_FILE);
  89. $tmp["fields"] = array();
  90. foreach( $conf->formFields->formField as $field ){
  91. $tmp["fields"][(string) $field["name"]] = (string) $field["model"];
  92. }
  93. return $tmp;
  94. }
  95. /**
  96. * Provides functionality to generate HTML fields.
  97. * Used by ArrowTemplateParser
  98. *
  99. * @param array $params params from tag attributes
  100. * @param array $tagIn detected tag tags
  101. * @return string
  102. */
  103. public function fieldHandle( $params, $prefix, $name, $class ){
  104. if( !isset($this->registredFields[$name] ) ) {
  105. throw new ArrowFormException( "[ArrowFormCtrlManager::fieldHandle] Brak zarejestrowanego pola: {$name}" , 4 ) ;
  106. }
  107. $model = $this->registredFields[$name];
  108. $class = explode(".", $model);
  109. $class = array_pop($class);
  110. ArrowController::importModel($this->registredFields[$name]);
  111. $fieldObj = new $class( $params, $prefix, $name, ArrowView::getCurrentView()->getTemplateDescriptor()->getKey(), $class );
  112. return array( "model" => $model, "object"=>$fieldObj );
  113. }
  114. /**
  115. * Registers new field
  116. *
  117. * @param string $parserName
  118. * @param string $model
  119. */
  120. public function registerField( $parserName, $model ){
  121. $this->registerField[$parserName] = $model;
  122. }
  123. public function getControlVersionsConf($prefix,$tag){
  124. $tmp = array();
  125. foreach($this->registredFields as $param => $action){
  126. $obj = $this->fieldHandle( array(), $prefix, $param, "" );
  127. $obj["object"]->configure();
  128. $params = $obj["object"]->getProperties();
  129. $tmp[$param] = array(
  130. "params" => $params,
  131. "requiredParams" => $obj["object"]->getRequiredProperties()
  132. );
  133. }
  134. return $tmp;
  135. }
  136. }
  137. ?>