Пример #1
0
 /**
  * Converts a simpleXML element into an array. Preserves attributes and everything.
  * You can choose to get your elements either flattened, or stored in a custom index that
  * you define.
  * For example, for a given element
  * <field name="someName" type="someType"/>
  * if you choose to flatten attributes, you would get:
  * $array['field']['name'] = 'someName';
  * $array['field']['type'] = 'someType';
  * If you choose not to flatten, you get:
  * $array['field']['@attributes']['name'] = 'someName';
  * _____________________________________
  * Repeating fields are stored in indexed arrays. so for a markup such as:
  * <parent>
  * <child>a</child>
  * <child>b</child>
  * <child>c</child>
  * </parent>
  * you array would be:
  * $array['parent']['child'][0] = 'a';
  * $array['parent']['child'][1] = 'b';
  * ...And so on.
  * _____________________________________
  * @param simpleXMLElement $xml the XML to convert
  * @param bool $flattenValues    Choose wether to flatten values
  *                                    or to set them under a particular index.
  *                                    defaults to true;
  * @param bool $flattenAttributes Choose wether to flatten attributes
  *                                    or to set them under a particular index.
  *                                    Defaults to true;
  * @param bool $flattenChildren    Choose wether to flatten children
  *                                    or to set them under a particular index.
  *                                    Defaults to true;
  * @param string $valueKey            index for values, in case $flattenValues was set to
  *                            false. Defaults to "@value"
  * @param string $attributesKey        index for attributes, in case $flattenAttributes was set to
  *                            false. Defaults to "@attributes"
  * @param string $childrenKey        index for children, in case $flattenChildren was set to
  *                            false. Defaults to "@children"
  * @return array the resulting array.
  */
 public static function simpleXMLToArray($xml, $flattenValues = true, $flattenAttributes = true, $flattenChildren = true, $valueKey = '@value', $attributesKey = '@attributes', $childrenKey = '@children')
 {
     $return = array();
     if (!$xml instanceof SimpleXMLElement) {
         return $return;
     }
     $name = $xml->getName();
     $_value = trim((string) $xml);
     if (strlen($_value) == 0) {
         $_value = null;
     }
     if ($_value !== null) {
         if (!$flattenValues) {
             $return[$valueKey] = $_value;
         } else {
             $return = $_value;
         }
     }
     $children = array();
     $first = true;
     foreach ($xml->children() as $elementName => $child) {
         $value = ToolsInstall::simpleXMLToArray($child, $flattenValues, $flattenAttributes, $flattenChildren, $valueKey, $attributesKey, $childrenKey);
         if (isset($children[$elementName])) {
             if ($first) {
                 $temp = $children[$elementName];
                 unset($children[$elementName]);
                 $children[$elementName][] = $temp;
                 $first = false;
             }
             $children[$elementName][] = $value;
         } else {
             $children[$elementName] = $value;
         }
     }
     if (count($children) > 0) {
         if (!$flattenChildren) {
             $return[$childrenKey] = $children;
         } else {
             $return = array_merge($return, $children);
         }
     }
     $attributes = array();
     foreach ($xml->attributes() as $name => $value) {
         $attributes[$name] = trim($value);
     }
     if (count($attributes) > 0) {
         if (!$flattenAttributes) {
             $return[$attributesKey] = $attributes;
         } else {
             $return = array_merge($return, $attributes);
         }
     }
     return $return;
 }
Пример #2
0
 /**
  * Import email language
  *
  * @param string $source
  * @param string $path
  * @return bool
  */
 public function importEmail($source, $path = CC_LANGUAGE_DIR)
 {
     //Make sure the path is valid
     if (!$this->_checkPath($path)) {
         trigger_error('Invalid language path ' . $path, E_USER_ERROR);
     }
     //Check to see if the path is the current language directory
     if ($path !== CC_LANGUAGE_DIR) {
         $path = appendDS($path);
     }
     if (!empty($source) && preg_match(self::EMAIL_FILE, $source, $match)) {
         $file = $path . $source;
         if (file_exists($file)) {
             //Get the file data
             $data = file_get_contents($file);
             if (($gz = @gzuncompress($data)) !== false) {
                 $data = $gz;
                 unset($gz);
             }
             try {
                 $xml = new simpleXMLElement($data);
                 if ($xml->email) {
                     foreach ($xml->email as $email) {
                         if ($email->content) {
                             $record['content_type'] = (string) $email->attributes()->name;
                             $record['language'] = (string) $xml->attributes()->language;
                             $record['subject'] = (string) $email->subject;
                             foreach ($email->content as $content) {
                                 $record['content_' . (string) $content->attributes()->type] = trim((string) $content);
                             }
                             if ($GLOBALS['db']->count('CubeCart_email_content', 'content_id', array('language' => $record['language'], 'content_type' => $record['content_type']))) {
                                 $GLOBALS['db']->update('CubeCart_email_content', $record, array('language' => $record['language'], 'content_type' => $record['content_type']));
                             } else {
                                 $GLOBALS['db']->insert('CubeCart_email_content', $record);
                             }
                         }
                         unset($record);
                     }
                     return true;
                 }
             } catch (Exception $e) {
                 return false;
             }
         }
     }
     return false;
 }