Exemplo n.º 1
0
 /**
  * Method to get a form object.
  *
  * @param	string		$xml		The form data. Can be XML string if file flag is set to false.
  * @param	array		$options	Optional array of parameters.
  * @param	boolean		$clear		Optional argument to force load a new form.
  * @return	mixed		JForm object on success, False on error.
  */
 public function &getForm($xml = null, $name = 'form', $options = array(), $clear = false)
 {
     if ($xml === null) {
         $xml = strtolower($this->getName());
     }
     // Handle the optional arguments.
     $options['array'] = array_key_exists('array', $options) ? $options['array'] : 'jform';
     $options['file'] = array_key_exists('file', $options) ? $options['file'] : true;
     $options['event'] = array_key_exists('event', $options) ? $options['event'] : null;
     $options['group'] = array_key_exists('group', $options) ? $options['group'] : null;
     // Create a signature hash.
     $hash = md5($xml . serialize($options));
     // Check if we can use a previously loaded form.
     if (isset($this->_forms[$hash]) && !$clear) {
         return $this->_forms[$hash];
     }
     // Get the form.
     EForm::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . DS . 'models' . DS . 'forms');
     EForm::addFieldPath(JPATH_COMPONENT_ADMINISTRATOR . DS . 'models' . DS . 'fields');
     EFormValidator::addRulePath(JPATH_COMPONENT_ADMINISTRATOR . DS . 'models' . DS . 'rules');
     $app = JFactory::getApplication();
     if ($app->isSite()) {
         EForm::addFormPath(JPATH_COMPONENT_SITE . DS . 'models' . DS . 'forms');
         EForm::addFieldPath(JPATH_COMPONENT_SITE . DS . 'models' . DS . 'fields');
         EFormValidator::addRulePath(JPATH_COMPONENT_SITE . DS . 'models' . DS . 'rules');
     }
     $form =& EForm::getInstance($xml, $name, $options['file'], $options);
     // Check for an error.
     if (JError::isError($form)) {
         $this->setError($form->getMessage());
         $false = false;
         return $form;
     }
     // Look for an event to fire.
     if ($options['event'] !== null) {
         // Get the dispatcher.
         $dispatcher =& JDispatcher::getInstance();
         // Load an optional plugin group.
         if ($options['group'] !== null) {
             JPluginHelper::importPlugin($options['group']);
         }
         // Trigger the form preparation event.
         $results = $dispatcher->trigger($options['event'], array($form->getName(), $form));
         // Check for errors encountered while preparing the form.
         if (count($results) && in_array(false, $results, true)) {
             // Get the last error.
             $error = $dispatcher->getError();
             // Convert to a JException if necessary.
             if (!JError::isError($error)) {
                 $error = new JException($error, 500);
             }
             return $error;
         }
     }
     // Store the form for later.
     $this->_forms[$hash] = $form;
     return $form;
 }
Exemplo n.º 2
0
 /**
  * Method to load the form description from a file or string.
  *
  * If $data is a file name, $file must be set to true. The reset option
  * works on a group basis. If the XML file or string references groups
  * that have already been created they will be replaced with the fields
  * in the new file unless the $reset parameter has been set to false.
  *
  * @param	string		$data		The name of an XML file or an XML string.
  * @param	string		$file		Flag to toggle whether the $data is a file path or a string.
  * @param	string		$reset		Flag to toggle whether the form description should be reset.
  * @return	boolean		True on success, false otherwise.
  * @since	1.6
  */
 public function load($data, $file = true, $reset = true)
 {
     $return = false;
     // Make sure we have data.
     if (!empty($data)) {
         // Get the XML parser and load the data.
         $parser =& JFactory::getXMLParser('Simple');
         // If the data is a file, load the XML from the file.
         if ($file) {
             // If we were not given the absolute path of a form file, attempt to find one.
             if (!is_file($data)) {
                 jimport('joomla.filesystem.path');
                 $data = JPath::find(EForm::addFormPath(), strtolower($data) . '.xml');
             }
             // Attempt to load the XML file.
             $loaded = $parser->loadFile($data);
         } else {
             $loaded = $parser->loadString($data);
         }
         // Make sure the XML was loaded.
         if ($loaded) {
             // Check if any groups exist.
             if (isset($parser->document->fields)) {
                 // Load the form groups.
                 foreach ($parser->document->fields as $group) {
                     $this->loadFieldsXML($group, $reset);
                     $return = true;
                 }
             }
             // Check if a name is set.
             if ($parser->document->attributes('name') && $reset) {
                 $this->setName($parser->document->attributes('name'));
             }
         }
     }
     return $return;
 }