PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/app/code/core/Mage/XmlConnect/Model/Simplexml/Form.php

https://gitlab.com/blingbang2016/shop
PHP | 412 lines | 180 code | 31 blank | 201 comment | 13 complexity | 9743116b7bc9f347ce627a9183dc5e2f MD5 | raw file
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magento.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magento.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_XmlConnect
  23. * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * XmlConnect simple xml form class
  28. *
  29. * @category Mage
  30. * @package Mage_XmlConnect
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. */
  33. class Mage_XmlConnect_Model_Simplexml_Form extends Mage_XmlConnect_Model_Simplexml_Form_Abstract
  34. {
  35. /**
  36. * All form elements collection
  37. *
  38. * @var Mage_XmlConnect_Model_Simplexml_Form_Element_Collection
  39. */
  40. protected $_allElements;
  41. /**
  42. * form elements index
  43. *
  44. * @var array
  45. */
  46. protected $_elementsIndex;
  47. /**#@+
  48. * Custom form components renderer
  49. *
  50. * @var object
  51. */
  52. static protected $_defaultElementRenderer;
  53. static protected $_defaultFieldsetRenderer;
  54. static protected $_defaultValidatorRenderer;
  55. static protected $_defaultValidatorRuleRenderer;
  56. static protected $_defaultFieldsetElementRenderer;
  57. /**#@-*/
  58. /**
  59. * Init simple xml form
  60. *
  61. * @param array $attributes
  62. */
  63. public function __construct($attributes = array())
  64. {
  65. parent::__construct($attributes);
  66. $this->setType('form');
  67. $this->_allElements = Mage::getModel('xmlconnect/simplexml_form_element_collection', $this);
  68. }
  69. /**
  70. * Set element renderer
  71. *
  72. * @static $_defaultElementRenderer
  73. * @param Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  74. * @return null
  75. */
  76. public static function setElementRenderer(
  77. Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  78. ) {
  79. self::$_defaultElementRenderer = $renderer;
  80. }
  81. /**
  82. * Set validator renderer
  83. *
  84. * @static $_defaultValidatorRenderer
  85. * @param Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  86. * @return null
  87. */
  88. public static function setValidatorRenderer(
  89. Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  90. ) {
  91. self::$_defaultValidatorRenderer = $renderer;
  92. }
  93. /**
  94. * Set validator rule renderer
  95. *
  96. * @static $_defaultValidatorRuleRenderer
  97. * @param Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  98. * @return null
  99. */
  100. public static function setValidatorRuleRenderer(
  101. Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  102. ) {
  103. self::$_defaultValidatorRuleRenderer = $renderer;
  104. }
  105. /**
  106. * Set fieldset renderer
  107. *
  108. * @static $_defaultFieldsetRenderer
  109. * @param Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  110. * @return null
  111. */
  112. public static function setFieldsetRenderer(
  113. Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  114. ) {
  115. self::$_defaultFieldsetRenderer = $renderer;
  116. }
  117. /**
  118. * Set fieldset element renderer
  119. *
  120. * @static $_defaultFieldsetElementRenderer
  121. * @param Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  122. * @return null
  123. */
  124. public static function setFieldsetElementRenderer(
  125. Mage_XmlConnect_Model_Simplexml_Form_Element_Renderer_Interface $renderer
  126. ) {
  127. self::$_defaultFieldsetElementRenderer = $renderer;
  128. }
  129. /**
  130. * Get element renderer
  131. *
  132. * @static $_defaultElementRenderer
  133. * @return object
  134. */
  135. public static function getElementRenderer()
  136. {
  137. return self::$_defaultElementRenderer;
  138. }
  139. /**
  140. * Get validator renderer
  141. *
  142. * @static $_defaultValidatorRenderer
  143. * @return object
  144. */
  145. public static function getValidatorRenderer()
  146. {
  147. return self::$_defaultValidatorRenderer;
  148. }
  149. /**
  150. * Get validator rule renderer
  151. *
  152. * @static $_defaultValidatorRuleRenderer
  153. * @return object
  154. */
  155. public static function getValidatorRuleRenderer()
  156. {
  157. return self::$_defaultValidatorRuleRenderer;
  158. }
  159. /**
  160. * Get fieldset renderer
  161. *
  162. * @static $_defaultFieldsetRenderer
  163. * @return object
  164. */
  165. public static function getFieldsetRenderer()
  166. {
  167. return self::$_defaultFieldsetRenderer;
  168. }
  169. /**
  170. * Get fieldset element renderer
  171. *
  172. * @static $_defaultFieldsetElementRenderer
  173. * @return object
  174. */
  175. public static function getFieldsetElementRenderer()
  176. {
  177. return self::$_defaultFieldsetElementRenderer;
  178. }
  179. /**
  180. * Add form element
  181. *
  182. * @param Mage_XmlConnect_Model_Simplexml_Form_Element_Abstract $element
  183. * @param bool $after
  184. * @return Mage_XmlConnect_Model_Simplexml_Form
  185. */
  186. public function addElement(Mage_XmlConnect_Model_Simplexml_Form_Element_Abstract $element, $after = false)
  187. {
  188. $this->checkElementId($element->getId());
  189. parent::addElement($element, $after);
  190. $this->addElementToCollection($element);
  191. return $this;
  192. }
  193. /**
  194. * Check existing element
  195. *
  196. * @param string $elementId
  197. * @return bool
  198. */
  199. protected function _elementIdExists($elementId)
  200. {
  201. return isset($this->_elementsIndex[$elementId]);
  202. }
  203. /**
  204. * Add form element to collection
  205. *
  206. * @param $element
  207. * @return Mage_XmlConnect_Model_Simplexml_Form
  208. */
  209. public function addElementToCollection($element)
  210. {
  211. $this->_elementsIndex[$element->getId()] = $element;
  212. $this->_allElements->add($element);
  213. return $this;
  214. }
  215. /**
  216. * Insure existing element
  217. *
  218. * @throws Exception
  219. * @param $elementId
  220. * @return bool
  221. */
  222. public function checkElementId($elementId)
  223. {
  224. if ($this->_elementIdExists($elementId)) {
  225. throw new Exception(Mage::helper('xmlconnect')->__('Element with id %s already exists', $elementId));
  226. }
  227. return true;
  228. }
  229. /**
  230. * Get form object
  231. *
  232. * @return Mage_XmlConnect_Model_Simplexml_Form
  233. */
  234. public function getForm()
  235. {
  236. return $this;
  237. }
  238. /**
  239. * Get element object
  240. *
  241. * @param $elementId
  242. * @return null|Mage_XmlConnect_Model_Simplexml_Form_Element_Abstract
  243. */
  244. public function getElement($elementId)
  245. {
  246. if ($this->_elementIdExists($elementId)) {
  247. return $this->_elementsIndex[$elementId];
  248. }
  249. return null;
  250. }
  251. /**
  252. * Set values to the form elements
  253. *
  254. * @param array $values
  255. * @return Mage_XmlConnect_Model_Simplexml_Form
  256. */
  257. public function setValues($values)
  258. {
  259. foreach ($this->_allElements as $element) {
  260. if (isset($values[$element->getId()])) {
  261. $element->setValue($values[$element->getId()]);
  262. } else {
  263. $element->setValue(null);
  264. }
  265. }
  266. return $this;
  267. }
  268. /**
  269. * Add values to the form elements
  270. *
  271. * @param array $values
  272. * @return Mage_XmlConnect_Model_Simplexml_Form
  273. */
  274. public function addValues($values)
  275. {
  276. if (!is_array($values)) {
  277. return $this;
  278. }
  279. foreach ($values as $elementId => $value) {
  280. $element = $this->getElement($elementId);
  281. if ($element) {
  282. $element->setValue($value);
  283. }
  284. }
  285. return $this;
  286. }
  287. /**
  288. * Remove field from collection
  289. *
  290. * @param string $elementId
  291. * @return Mage_XmlConnect_Model_Simplexml_Form
  292. */
  293. public function removeField($elementId)
  294. {
  295. if ($this->_elementIdExists($elementId)) {
  296. unset($this->_elementsIndex[$elementId]);
  297. }
  298. return $this;
  299. }
  300. /**
  301. * Set field id prefix
  302. *
  303. * @param string $prefix
  304. * @return Mage_XmlConnect_Model_Simplexml_Form
  305. */
  306. public function setFieldContainerIdPrefix($prefix)
  307. {
  308. $this->setData('field_container_id_prefix', $prefix);
  309. return $this;
  310. }
  311. /**
  312. * Get field container id prefix
  313. *
  314. * @return mixed
  315. */
  316. public function getFieldContainerIdPrefix()
  317. {
  318. return $this->getData('field_container_id_prefix');
  319. }
  320. /**
  321. * Retrieve form xml object or an array of Simplexml elements
  322. *
  323. * @return array|Mage_XmlConnect_Model_Simplexml_Element
  324. */
  325. public function toXmlObject()
  326. {
  327. $xmlObj = $this->getXmlObject();
  328. $useContainer = $this->getUseContainer();
  329. if ($useContainer) {
  330. $this->_addRequiredAttributes($xmlObj);
  331. foreach ($this->getAttributes() as $key => $val) {
  332. $xmlObj->addAttribute($key, $xmlObj->xmlAttribute($val));
  333. }
  334. }
  335. foreach ($this->getElements() as $element) {
  336. $xmlObj->appendChild($element->toXmlObject());
  337. }
  338. if (!$useContainer) {
  339. $result = array();
  340. foreach ($xmlObj->children() as $child) {
  341. $result[] = $child;
  342. }
  343. }
  344. return isset($result) ? $result : $xmlObj;
  345. }
  346. /**
  347. * Get from xml as string
  348. *
  349. * @throws Mage_Core_Exception
  350. * @return string
  351. */
  352. public function getXml()
  353. {
  354. if ($this->getUseContainer()) {
  355. return $this->toXmlObject()->asNiceXml();
  356. }
  357. Mage::throwException(Mage::helper('xmlconnect')->__('Container is not defined.'));
  358. }
  359. /**
  360. * Add suffix to form element name
  361. *
  362. * @param string $name
  363. * @param string $suffix
  364. * @return string
  365. */
  366. public function addSuffixToName($name, $suffix)
  367. {
  368. if (!$name) {
  369. return $suffix;
  370. }
  371. $vars = explode('[', $name);
  372. $newName = $suffix;
  373. foreach ($vars as $index => $value) {
  374. $newName .= '[' . $value;
  375. if ($index == 0) {
  376. $newName .= ']';
  377. }
  378. }
  379. return $newName;
  380. }
  381. }