creator.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\forms;
  3. use MGModule\DNSManager2 as main;
  4. /**
  5. * Form Creator
  6. *
  7. * @author Michal Czech <michael@modulesgarden.com>
  8. */
  9. class creator{
  10. /**
  11. *
  12. * @var abstractField[]
  13. */
  14. public $fields = array();
  15. public $hidden = array();
  16. public $name;
  17. public $url = null;
  18. public $addFormNameToFields = false;
  19. public $addIDs = true;
  20. public $autoPrepare = true;
  21. public $getHTMLCount = 0;
  22. public $lastID = null;
  23. function __construct($name,$options = array()) {
  24. $this->name = $name;
  25. $this->addIDs = $name;
  26. foreach($options as $name => $value)
  27. {
  28. if(property_exists($this, $name))
  29. {
  30. $this->{$name} = $value;
  31. }
  32. }
  33. $this->hidden[] = new hiddenField(array(
  34. 'name' => 'mg-token'
  35. ,'value' => md5(time())
  36. ));
  37. }
  38. /**
  39. *
  40. * @param \MGModule\DNSManager2\mgLibs\forms\className $field
  41. * @param type $dataOrName
  42. * @param type $data
  43. * @throws main\mgLibs\exceptions\system
  44. */
  45. function addField($field,$dataOrName = null,$data = array()){
  46. if(is_string($dataOrName))
  47. {
  48. $data['name'] = $dataOrName;
  49. }
  50. elseif(is_array($dataOrName))
  51. {
  52. $data = $dataOrName;
  53. }
  54. $data['formName'] = $this->name;
  55. if(is_object($field))
  56. {
  57. if(get_parent_class($field) !== __NAMESPACE__.'\\'.'abstractField')
  58. {
  59. throw new \MGModule\DNSManager2\mgLibs\exceptions\system('Unable to use this object as form field');
  60. }
  61. if($field->type == 'hidden')
  62. {
  63. $this->hidden[] = $field;
  64. }
  65. else
  66. {
  67. $this->fields[] = $field;
  68. }
  69. }
  70. elseif(is_string($field) && is_array($data))
  71. {
  72. $className = __NAMESPACE__.'\\'.$field.'Field';
  73. if(!class_exists($className))
  74. {
  75. throw new \MGModule\DNSManager2\mgLibs\exceptions\system('Unable to crate form field type:'.$className);
  76. }
  77. $field = new $className($data);
  78. $field->formName = $this->name;
  79. if($field->type == 'hidden')
  80. {
  81. $this->hidden[] = $field;
  82. }
  83. else
  84. {
  85. $this->fields[] = $field;
  86. }
  87. }
  88. else
  89. {
  90. throw new \MGModule\DNSManager2\mgLibs\exceptions\system('Unable create form field object');
  91. }
  92. }
  93. function anyField(){
  94. return !empty($this->fields);
  95. }
  96. function prepare(){
  97. foreach($this->fields as &$field)
  98. {
  99. $field->html = null;
  100. $field->addFormNameToFields = $this->addFormNameToFields;
  101. $field->addIDs = $this->addIDs;
  102. $field->formName = $this->name;
  103. }
  104. }
  105. function setIDs($id){
  106. $this->addIDs = $id;
  107. }
  108. function getHTML($container = 'default',$data = array()){
  109. main\mgLibs\lang::stagCurrentContext('generateForm');
  110. main\mgLibs\lang::addToContext($this->name);
  111. if($this->autoPrepare)
  112. {
  113. $this->addIDs .= '_'.$container;
  114. $this->prepare();
  115. }
  116. $closedTag = true;
  117. foreach($this->fields as $field)
  118. {
  119. if(empty($field->html))
  120. {
  121. if($closedTag)
  122. {
  123. $field->opentag = true;
  124. }
  125. else
  126. {
  127. $field->opentag = false;
  128. $closedTag = true;
  129. }
  130. if($field->continue)
  131. {
  132. $closedTag = $field->closetag = false;
  133. }
  134. else
  135. {
  136. $field->closetag = true;
  137. }
  138. $field->generate();
  139. }
  140. }
  141. foreach($this->hidden as $field)
  142. {
  143. if(empty($field->html))
  144. {
  145. $field->generate();
  146. }
  147. }
  148. $data['name'] = $this->name;
  149. $data['url'] = $this->url;
  150. $data['fields'] = $this->fields;
  151. $data['hidden'] = $this->hidden;
  152. $html = main\mgLibs\smarty::I()->view($container, $data, main\mgLibs\process\mainInstance::getModuleTemplatesDir().DS.'formFields'.DS.'containers');
  153. main\mgLibs\lang::unstagContext('generateForm');
  154. $this->getHTMLCount++;
  155. return $html;
  156. }
  157. }