AAAAPK:_?\®)ÕÐ .htaccessnuW+A„¶ Order allow,deny Deny from all PK:_?\$~ð¢ïïformat/json.phpnuW+A„¶ false)) { // Fix legacy API. if (is_bool($options)) { $options = array('processSections' => $options); // Deprecation warning. JLog::add('JRegistryFormatJSON::stringToObject() second argument should not be a boolean.', JLog::WARNING, 'deprecated'); } $data = trim($data); if ((substr($data, 0, 1) != '{') && (substr($data, -1, 1) != '}')) { $ini = JRegistryFormat::getInstance('INI'); $obj = $ini->stringToObject($data, $options); } else { $obj = json_decode($data); } return $obj; } } PK:_?\®)ÕÐformat/.htaccessnuW+A„¶ Order allow,deny Deny from all PK:_?\ù5Œà  format/xml.phpnuW+A„¶'); // Iterate over the object members. $this->getXmlChildren($root, $object, $nodeName); return $root->asXML(); } /** * Parse a XML formatted string and convert it into an object. * * @param string $data XML formatted string to convert. * @param array $options Options used by the formatter. * * @return object Data object. * * @since 11.1 */ public function stringToObject($data, $options = array()) { // Initialize variables. $obj = new stdClass; // Parse the XML string. $xml = simplexml_load_string($data); foreach ($xml->children() as $node) { $obj->$node['name'] = $this->getValueFromNode($node); } return $obj; } /** * Method to get a PHP native value for a SimpleXMLElement object. -- called recursively * * @param object $node SimpleXMLElement object for which to get the native value. * * @return mixed Native value of the SimpleXMLElement object. * * @since 11.1 */ protected function getValueFromNode($node) { switch ($node['type']) { case 'integer': $value = (string) $node; return (int) $value; break; case 'string': return (string) $node; break; case 'boolean': $value = (string) $node; return (bool) $value; break; case 'double': $value = (string) $node; return (float) $value; break; case 'array': $value = array(); foreach ($node->children() as $child) { $value[(string) $child['name']] = $this->getValueFromNode($child); } break; default: $value = new stdClass; foreach ($node->children() as $child) { $value->$child['name'] = $this->getValueFromNode($child); } break; } return $value; } /** * Method to build a level of the XML string -- called recursively * * @param SimpleXMLElement &$node SimpleXMLElement object to attach children. * @param object $var Object that represents a node of the XML document. * @param string $nodeName The name to use for node elements. * * @return void * * @since 11.1 */ protected function getXmlChildren(&$node, $var, $nodeName) { // Iterate over the object members. foreach ((array) $var as $k => $v) { if (is_scalar($v)) { $n = $node->addChild($nodeName, $v); $n->addAttribute('name', $k); $n->addAttribute('type', gettype($v)); } else { $n = $node->addChild($nodeName); $n->addAttribute('name', $k); $n->addAttribute('type', gettype($v)); $this->getXmlChildren($n, $v, $nodeName); } } } } PK:_?\¦V‰format/index.htmlnuW+A„¶ PK:_?\ý¥»  format/php.phpnuW+A„¶ $v) { if (is_scalar($v)) { $vars .= "\tpublic $" . $k . " = '" . addcslashes($v, '\\\'') . "';\n"; } elseif (is_array($v) || is_object($v)) { $vars .= "\tpublic $" . $k . " = " . $this->getArrayString((array) $v) . ";\n"; } } $str = ""; } return $str; } /** * Parse a PHP class formatted string and convert it into an object. * * @param string $data PHP Class formatted string to convert. * @param array $options Options used by the formatter. * * @return object Data object. * * @since 11.1 */ public function stringToObject($data, $options = array()) { return true; } /** * Method to get an array as an exported string. * * @param array $a The array to get as a string. * * @return array * * @since 11.1 */ protected function getArrayString($a) { $s = 'array('; $i = 0; foreach ($a as $k => $v) { $s .= ($i) ? ', ' : ''; $s .= '"' . $k . '" => '; if (is_array($v) || is_object($v)) { $s .= $this->getArrayString((array) $v); } else { $s .= '"' . addslashes($v) . '"'; } $i++; } $s .= ')'; return $s; } } PK:_?\µ)p ààformat/ini.phpnuW+A„¶ $value) { // If the value is an object then we need to put it in a local section. if (is_object($value)) { // Add the section line. $local[] = ''; $local[] = '[' . $key . ']'; // Add the properties for this section. foreach (get_object_vars($value) as $k => $v) { $local[] = $k . '=' . $this->getValueAsINI($v); } } else { // Not in a section so add the property to the global array. $global[] = $key . '=' . $this->getValueAsINI($value); } } return implode("\n", array_merge($global, $local)); } /** * Parse an INI formatted string and convert it into an object. * * @param string $data INI formatted string to convert. * @param mixed $options An array of options used by the formatter, or a boolean setting to process sections. * * @return object Data object. * * @since 11.1 */ public function stringToObject($data, $options = array()) { // Initialise options. if (is_array($options)) { $sections = (isset($options['processSections'])) ? $options['processSections'] : false; } else { // Backward compatibility for 1.5 usage. //@deprecated $sections = (boolean) $options; } // Check the memory cache for already processed strings. $hash = md5($data . ':' . (int) $sections); if (isset(self::$cache[$hash])) { return self::$cache[$hash]; } // If no lines present just return the object. if (empty($data)) { return new stdClass; } // Initialize variables. $obj = new stdClass; $section = false; $lines = explode("\n", $data); // Process the lines. foreach ($lines as $line) { // Trim any unnecessary whitespace. $line = trim($line); // Ignore empty lines and comments. if (empty($line) || ($line{0} == ';')) { continue; } if ($sections) { $length = strlen($line); // If we are processing sections and the line is a section add the object and continue. if (($line[0] == '[') && ($line[$length - 1] == ']')) { $section = substr($line, 1, $length - 2); $obj->$section = new stdClass; continue; } } elseif ($line{0} == '[') { continue; } // Check that an equal sign exists and is not the first character of the line. if (!strpos($line, '=')) { // Maybe throw exception? continue; } // Get the key and value for the line. list ($key, $value) = explode('=', $line, 2); // Validate the key. if (preg_match('/[^A-Z0-9_]/i', $key)) { // Maybe throw exception? continue; } // If the value is quoted then we assume it is a string. $length = strlen($value); if ($length && ($value[0] == '"') && ($value[$length - 1] == '"')) { // Strip the quotes and Convert the new line characters. $value = stripcslashes(substr($value, 1, ($length - 2))); $value = str_replace('\n', "\n", $value); } else { // If the value is not quoted, we assume it is not a string. // If the value is 'false' assume boolean false. if ($value == 'false') { $value = false; } // If the value is 'true' assume boolean true. elseif ($value == 'true') { $value = true; } // If the value is numeric than it is either a float or int. elseif (is_numeric($value)) { // If there is a period then we assume a float. if (strpos($value, '.') !== false) { $value = (float) $value; } else { $value = (int) $value; } } } // If a section is set add the key/value to the section, otherwise top level. if ($section) { $obj->$section->$key = $value; } else { $obj->$key = $value; } } // Cache the string to save cpu cycles -- thus the world :) self::$cache[$hash] = clone ($obj); return $obj; } /** * Method to get a value in an INI format. * * @param mixed $value The value to convert to INI format. * * @return string The value in INI format. * * @since 11.1 */ protected function getValueAsINI($value) { // Initialize variables. $string = ''; switch (gettype($value)) { case 'integer': case 'double': $string = $value; break; case 'boolean': $string = $value ? 'true' : 'false'; break; case 'string': // Sanitize any CRLF characters.. $string = '"' . str_replace(array("\r\n", "\n"), '\\n', $value) . '"'; break; } return $string; } } PK:_?\¦V‰ index.htmlnuW+A„¶ PK:_?\"náûTT format.phpnuW+A„¶data = new stdClass; // Optionally load supplied data. if (is_array($data) || is_object($data)) { $this->bindData($this->data, $data); } elseif (!empty($data) && is_string($data)) { $this->loadString($data); } } /** * Magic function to clone the registry object. * * @return JRegistry * * @since 11.1 */ public function __clone() { $this->data = unserialize(serialize($this->data)); } /** * Magic function to render this object as a string using default args of toString method. * * @return string * * @since 11.1 */ public function __toString() { return $this->toString(); } /** * Sets a default value if not already assigned. * * @param string $key The name of the parameter. * @param string $default An optional value for the parameter. * * @return string The value set, or the default if the value was not previously set (or null). * * @since 11.1 */ public function def($key, $default = '') { $value = $this->get($key, (string) $default); $this->set($key, $value); return $value; } /** * Check if a registry path exists. * * @param string $path Registry path (e.g. joomla.content.showauthor) * * @return boolean * * @since 11.1 */ public function exists($path) { // Explode the registry path into an array if ($nodes = explode('.', $path)) { // Initialize the current node to be the registry root. $node = $this->data; // Traverse the registry to find the correct node for the result. for ($i = 0, $n = count($nodes); $i < $n; $i++) { if (isset($node->$nodes[$i])) { $node = $node->$nodes[$i]; } else { break; } if ($i + 1 == $n) { return true; } } } return false; } /** * Get a registry value. * * @param string $path Registry path (e.g. joomla.content.showauthor) * @param mixed $default Optional default value, returned if the internal value is null. * * @return mixed Value of entry or null * * @since 11.1 */ public function get($path, $default = null) { // Initialise variables. $result = $default; if (!strpos($path, '.')) { return (isset($this->data->$path) && $this->data->$path !== null && $this->data->$path !== '') ? $this->data->$path : $default; } // Explode the registry path into an array $nodes = explode('.', $path); // Initialize the current node to be the registry root. $node = $this->data; $found = false; // Traverse the registry to find the correct node for the result. foreach ($nodes as $n) { if (isset($node->$n)) { $node = $node->$n; $found = true; } else { $found = false; break; } } if ($found && $node !== null && $node !== '') { $result = $node; } return $result; } /** * Returns a reference to a global JRegistry object, only creating it * if it doesn't already exist. * * This method must be invoked as: *
$registry = JRegistry::getInstance($id);
* * @param string $id An ID for the registry instance * * @return object The JRegistry object. * * @since 11.1 */ public static function getInstance($id) { if (empty(self::$instances[$id])) { self::$instances[$id] = new JRegistry; } return self::$instances[$id]; } /** * Load a associative array of values into the default namespace * * @param array $array Associative array of value to load * * @return boolean True on success * * @since 11.1 */ public function loadArray($array) { $this->bindData($this->data, $array); return true; } /** * Load the public variables of the object into the default namespace. * * @param object $object The object holding the publics to load * * @return boolean True on success * * @since 11.1 */ public function loadObject($object) { $this->bindData($this->data, $object); return true; } /** * Load the contents of a file into the registry * * @param string $file Path to file to load * @param string $format Format of the file [optional: defaults to JSON] * @param mixed $options Options used by the formatter * * @return boolean True on success * * @since 11.1 */ public function loadFile($file, $format = 'JSON', $options = array()) { // Get the contents of the file jimport('joomla.filesystem.file'); $data = JFile::read($file); return $this->loadString($data, $format, $options); } /** * Load a string into the registry * * @param string $data String to load into the registry * @param string $format Format of the string * @param mixed $options Options used by the formatter * * @return boolean True on success * * @since 11.1 */ public function loadString($data, $format = 'JSON', $options = array()) { // Load a string into the given namespace [or default namespace if not given] $handler = JRegistryFormat::getInstance($format); $obj = $handler->stringToObject($data, $options); $this->loadObject($obj); return true; } /** * Merge a JRegistry object into this one * * @param JRegistry &$source Source JRegistry object to merge. * * @return boolean True on success * * @since 11.1 */ public function merge(&$source) { if ($source instanceof JRegistry) { // Load the variables into the registry's default namespace. foreach ($source->toArray() as $k => $v) { if (($v !== null) && ($v !== '')) { $this->data->$k = $v; } } return true; } return false; } /** * Set a registry value. * * @param string $path Registry Path (e.g. joomla.content.showauthor) * @param mixed $value Value of entry * * @return mixed The value of the that has been set. * * @since 11.1 */ public function set($path, $value) { $result = null; // Explode the registry path into an array if ($nodes = explode('.', $path)) { // Initialize the current node to be the registry root. $node = $this->data; // Traverse the registry to find the correct node for the result. for ($i = 0, $n = count($nodes) - 1; $i < $n; $i++) { if (!isset($node->$nodes[$i]) && ($i != $n)) { $node->$nodes[$i] = new stdClass; } $node = $node->$nodes[$i]; } // Get the old value if exists so we can return it $result = $node->$nodes[$i] = $value; } return $result; } /** * Transforms a namespace to an array * * @return array An associative array holding the namespace data * * @since 11.1 */ public function toArray() { return (array) $this->asArray($this->data); } /** * Transforms a namespace to an object * * @return object An an object holding the namespace data * * @since 11.1 */ public function toObject() { return $this->data; } /** * Get a namespace in a given string format * * @param string $format Format to return the string in * @param mixed $options Parameters used by the formatter, see formatters for more info * * @return string Namespace in string format * * @since 11.1 */ public function toString($format = 'JSON', $options = array()) { // Return a namespace in a given format $handler = JRegistryFormat::getInstance($format); return $handler->objectToString($this->data, $options); } /** * Method to recursively bind data to a parent object. * * @param object &$parent The parent object on which to attach the data values. * @param mixed $data An array or object of data to bind to the parent object. * * @return void * * @since 11.1 */ protected function bindData(&$parent, $data) { // Ensure the input data is an array. if (is_object($data)) { $data = get_object_vars($data); } else { $data = (array) $data; } foreach ($data as $k => $v) { if ((is_array($v) && JArrayHelper::isAssociative($v)) || is_object($v)) { $parent->$k = new stdClass; $this->bindData($parent->$k, $v); } else { $parent->$k = $v; } } } /** * Method to recursively convert an object of data to an array. * * @param object $data An object of data to return as an array. * * @return array Array representation of the input object. * * @since 11.1 */ protected function asArray($data) { $array = array(); foreach (get_object_vars((object) $data) as $k => $v) { if (is_object($v)) { $array[$k] = $this->asArray($v); } else { $array[$k] = $v; } } return $array; } // // Following methods are deprecated // /** * Load an XML string into the registry into the given namespace [or default if a namespace is not given] * * @param string $data XML formatted string to load into the registry * @param string $namespace Namespace to load the XML string into [optional] * * @return boolean True on success * * @since 11.1 * * @deprecated 12.1 Use loadString passing XML as the format instead. * @note */ public function loadXML($data, $namespace = null) { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::loadXML() is deprecated.', JLog::WARNING, 'deprecated'); return $this->loadString($data, 'XML'); // @codeCoverageIgnoreEnd } /** * Load an INI string into the registry into the given namespace [or default if a namespace is not given] * * @param string $data INI formatted string to load into the registry * @param string $namespace Namespace to load the INI string into [optional] * @param mixed $options An array of options for the formatter, or boolean to process sections. * * @return boolean True on success * * @since 11.1 * * @deprecated 12.1 Use loadString passing INI as the format instead. */ public function loadINI($data, $namespace = null, $options = array()) { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::loadINI() is deprecated.', JLog::WARNING, 'deprecated'); return $this->loadString($data, 'INI', $options); // @codeCoverageIgnoreEnd } /** * Load an JSON string into the registry into the given namespace [or default if a namespace is not given] * * @param string $data JSON formatted string to load into the registry * * @return boolean True on success * * @deprecated 12.1 Use loadString passing JSON as the format instead. * @note Use loadString instead. * @since 11.1 */ public function loadJSON($data) { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::loadJSON() is deprecated.', JLog::WARNING, 'deprecated'); return $this->loadString($data, 'JSON'); // @codeCoverageIgnoreEnd } /** * Create a namespace * * @param string $namespace Name of the namespace to create * * @return boolean True on success * * @deprecated 12.1 * @note Namespaces are no longer supported. * @since 11.1 */ public function makeNameSpace($namespace) { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::makeNameSpace() is deprecated.', JLog::WARNING, 'deprecated'); //$this->_registry[$namespace] = array('data' => new stdClass()); return true; // @codeCoverageIgnoreEnd } /** * Get the list of namespaces * * @return array List of namespaces * * @deprecated 12.1 * @note Namespaces are no longer supported. * @since 11.1 */ public function getNameSpaces() { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::getNameSpaces() is deprecated.', JLog::WARNING, 'deprecated'); //return array_keys($this->_registry); return array(); // @codeCoverageIgnoreEnd } /** * Get a registry value * * @param string $path Registry path (e.g. joomla.content.showauthor) * @param mixed $default Optional default value * * @return mixed Value of entry or null * * @deprecated 12.1 * @note Use get instead. * @since 11.1 */ public function getValue($path, $default = null) { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::getValue() is deprecated. Use get instead.', JLog::WARNING, 'deprecated'); $parts = explode('.', $path); if (count($parts) > 1) { unset($parts[0]); $path = implode('.', $parts); } return $this->get($path, $default); // @codeCoverageIgnoreEnd } /** * Set a registry value * * @param string $path Registry Path (e.g. joomla.content.showauthor) * @param mixed $value Value of entry * * @return mixed The value after setting. * * @deprecated 12.1 * @note Use set instead. * @since 11.1 */ public function setValue($path, $value) { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::setValue() is deprecated. Use set instead.', JLog::WARNING, 'deprecated'); $parts = explode('.', $path); if (count($parts) > 1) { unset($parts[0]); $path = implode('.', $parts); } return $this->set($path, $value); // @codeCoverageIgnoreEnd } /** * This method is added as an interim solution for API references in the Joomla! CMS 1.6 to the JRegistry * object where in 1.5 a JParameter object existed. Because many extensions may call this method * we add it here as a means of "pain relief" until the 1.8 release. * * @return boolean True. * * @deprecated 12.1 * @note Load no longer supported. * @since 11.1 */ public function loadSetupFile() { // @codeCoverageIgnoreStart // Deprecation warning. JLog::add('JRegistry::loadSetupFile() is deprecated.', JLog::WARNING, 'deprecated'); return true; // @codeCoverageIgnoreEnd } } PK:_?\®)ÕÐ .htaccessnuW+A„¶PK:_?\$~ð¢ïï¸format/json.phpnuW+A„¶PK:_?\®)ÕÐæformat/.htaccessnuW+A„¶PK:_?\ù5Œà  ¥format/xml.phpnuW+A„¶PK:_?\¦V‰ƒformat/index.htmlnuW+A„¶PK:_?\ý¥»  ãformat/php.phpnuW+A„¶PK:_?\µ)p àà(!format/ini.phpnuW+A„¶PK:_?\¦V‰ F7index.htmlnuW+A„¶PK:_?\"náûTT Ÿ7format.phpnuW+A„¶PK:_?\aÞè¬9¬9 -@registry.phpnuW+A„¶PK z