Example #1
1
 /**
  *
  * Ajax render to store in session
  */
 public function ajaxGetRender()
 {
     /** load libraries for the system rener **/
     JSNFactory::localimport('libraries.joomlashine.mode.rawmode');
     JSNFactory::localimport('libraries.joomlashine.menu.menuitems');
     /** get url **/
     $render_url = JRequest::getVar('render_url', '');
     $urlRender = base64_decode($render_url);
     $session = JSession::getInstance('files', array('name' => 'jsnpoweradmin'));
     if ($render_url == '') {
         $urlRender = JSNDatabase::getDefaultPage()->link;
     }
     $currUri = new JURI($urlRender);
     if (!$currUri->hasVar('Itemid')) {
         $currUri->setVar('Itemid', JSNDatabase::getDefaultPage()->id);
     }
     $urlString = $currUri->toString();
     $session->set('rawmode_render_url', base64_encode($urlString));
     $parts = JString::parse_url($urlString);
     if (!empty($parts['query'])) {
         parse_str($parts['query'], $params);
     } else {
         $params = array();
     }
     $jsntemplate = JSNFactory::getTemplate();
     $jsnrawmode = JSNRawmode::getInstance($params);
     $jsnrawmode->setParam('positions', $jsntemplate->loadXMLPositions());
     $jsnrawmode->renderAll();
     $session = JSession::getInstance('files', array('name' => 'jsnajaxgetrender'));
     $session->set('component', $jsnrawmode->getHTML('component'));
     $session->set('jsondata', $jsnrawmode->getScript('positions', 'JSON'));
     jexit('success');
 }
 /**
  * Method to test an external or internal url for all valid parts.
  *
  * @param   SimpleXMLElement  $element  The SimpleXMLElement object representing the `<field>` tag for the form field object.
  * @param   mixed             $value    The form field value to validate.
  * @param   string            $group    The field name group control value. This acts as as an array container for the field.
  *                                      For example if the field has name="foo" and the group value is set to "bar" then the
  *                                      full field name would end up being "bar[foo]".
  * @param   Registry          $input    An optional Registry object with the entire data set to validate against the entire form.
  * @param   JForm             $form     The form object for which the field is being tested.
  *
  * @return  boolean  True if the value is valid, false otherwise.
  *
  * @since   11.1
  * @link    http://www.w3.org/Addressing/URL/url-spec.txt
  * @see	    JString
  */
 public function test(SimpleXMLElement $element, $value, $group = null, Registry $input = null, JForm $form = null)
 {
     // If the field is empty and not required, the field is valid.
     $required = (string) $element['required'] == 'true' || (string) $element['required'] == 'required';
     if (!$required && empty($value)) {
         return true;
     }
     $urlParts = JString::parse_url($value);
     // See http://www.w3.org/Addressing/URL/url-spec.txt
     // Use the full list or optionally specify a list of permitted schemes.
     if ($element['schemes'] == '') {
         $scheme = array('http', 'https', 'ftp', 'ftps', 'gopher', 'mailto', 'news', 'prospero', 'telnet', 'rlogin', 'sftp', 'tn3270', 'wais', 'url', 'mid', 'cid', 'nntp', 'tel', 'urn', 'ldap', 'file', 'fax', 'modem', 'git');
     } else {
         $scheme = explode(',', $element['schemes']);
     }
     /*
      * Note that parse_url() does not always parse accurately without a scheme,
      * but at least the path should be set always. Note also that parse_url()
      * returns False for seriously malformed URLs instead of an associative array.
      * @see https://secure.php.net/manual/en/function.parse-url.php
      */
     if ($urlParts === false or !array_key_exists('scheme', $urlParts)) {
         /*
          * The function parse_url() returned false (seriously malformed URL) or no scheme
          * was found and the relative option is not set: in both cases the field is not valid.
          */
         if ($urlParts === false or !$element['relative']) {
             return false;
         }
         // The best we can do for the rest is make sure that the path exists and is valid UTF-8.
         if (!array_key_exists('path', $urlParts) || !JString::valid((string) $urlParts['path'])) {
             return false;
         }
         // The internal URL seems to be good.
         return true;
     }
     // Scheme found, check all parts found.
     $urlScheme = (string) $urlParts['scheme'];
     $urlScheme = strtolower($urlScheme);
     if (in_array($urlScheme, $scheme) == false) {
         return false;
     }
     // For some schemes here must be two slashes.
     $scheme = array('http', 'https', 'ftp', 'ftps', 'gopher', 'wais', 'prospero', 'sftp', 'telnet', 'git');
     if (in_array($urlScheme, $scheme) && substr($value, strlen($urlScheme), 3) !== '://') {
         return false;
     }
     // The best we can do for the rest is make sure that the strings are valid UTF-8
     // and the port is an integer.
     if (array_key_exists('host', $urlParts) && !JString::valid((string) $urlParts['host'])) {
         return false;
     }
     if (array_key_exists('port', $urlParts) && !is_int((int) $urlParts['port'])) {
         return false;
     }
     if (array_key_exists('path', $urlParts) && !JString::valid((string) $urlParts['path'])) {
         return false;
     }
     return true;
 }
Example #3
0
	/**
	 * Method to test an external url for a valid parts.
	 *
	 * @param   object  &$element  The JXmlElement object representing the <field /> tag for the form field object.
	 * @param   mixed   $value     The form field value to validate.
	 * @param   string  $group     The field name group control value. This acts as as an array container for the field.
	 *                             For example if the field has name="foo" and the group value is set to "bar" then the
	 *                             full field name would end up being "bar[foo]".
	 * @param   object  &$input    An optional JRegistry object with the entire data set to validate against the entire form.
	 * @param   object  &$form     The form object for which the field is being tested.
	 *
	 * @return  boolean  True if the value is valid, false otherwise.
	 *
	 * @since   11.1
	 * @throws  JException on invalid rule.
	 * @link    http://www.w3.org/Addressing/URL/url-spec.txt
	 * @see	    Jstring
	 */
	public function test(&$element, $value, $group = null, &$input = null, &$form = null)
	{
		// If the field is empty and not required, the field is valid.
		$required = ((string) $element['required'] == 'true' || (string) $element['required'] == 'required');
		if (!$required && empty($value))
		{
			return true;
		}
		$urlParts = JString::parse_url($value);
		// See http://www.w3.org/Addressing/URL/url-spec.txt
		// Use the full list or optionally specify a list of permitted schemes.
		if ($element['schemes'] == '')
		{
			$scheme = array('http', 'https', 'ftp', 'ftps', 'gopher', 'mailto', 'news', 'prospero', 'telnet', 'rlogin', 'tn3270', 'wais', 'url',
				'mid', 'cid', 'nntp', 'tel', 'urn', 'ldap', 'file', 'fax', 'modem');
		}
		else
		{
			$scheme = explode(',', $element['schemes']);

		}
		// This rule is only for full URLs with schemes because  parse_url does not parse
		// accurately without a scheme.
		// @see http://php.net/manual/en/function.parse-url.php
		if (!array_key_exists('scheme', $urlParts))
		{
			return false;
		}
		$urlScheme = (string) $urlParts['scheme'];
		$urlScheme = strtolower($urlScheme);
		if (in_array($urlScheme, $scheme) == false)
		{
			return false;
		}
		// For some schemes here must be two slashes.
		if (($urlScheme == 'http' || $urlScheme == 'https' || $urlScheme == 'ftp' || $urlScheme == 'sftp' || $urlScheme == 'gopher'
			|| $urlScheme == 'wais' || $urlScheme == 'gopher' || $urlScheme == 'prospero' || $urlScheme == 'telnet')
			&& ((substr($value, strlen($urlScheme), 3)) !== '://'))
		{
			return false;
		}
		// The best we can do for the rest is make sure that the strings are valid UTF-8
		// and the port is an integer.
		if (array_key_exists('host', $urlParts) && !JString::valid((string) $urlParts['host']))
		{
			return false;
		}
		if (array_key_exists('port', $urlParts) && !is_int((int) $urlParts['port']))
		{
			return false;
		}
		if (array_key_exists('path', $urlParts) && !JString::valid((string) $urlParts['path']))
		{
			return false;
		}
		return true;
	}
Example #4
0
   /**
    * @param $string
    * @return array
    */
   function Internal_AutoDetectURLs($string)
   {
       $search = preg_split('/(?xi)
	\\b
	(
		(?:
			(?:https?|ftp):\\/\\/
			|
			www\\d{0,3}\\.
			|
			mailto:
			|
			(?:[a-zA-Z0-9._-]{2,}@)
		)
		(?:
			[^\\s()<>]+
			|
			\\((?:[^\\s()<>]+|(\\(?:[^\\s()<>]+\\)))*\\)
		)+
		(?:
			\\((?:[^\\s()<>]+|(\\(?:[^\\s()<>]+\\)))*\\)
			|
			[^\\s`!()\\[\\]{};:\'"\\.,<>?«»“”‘’]
		)
	)/u', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
       $output = array();
       foreach ($search as $index => $token) {
           if ($index & 1) {
               if (preg_match("/^(https?|ftp|mailto):/ui", $token)) {
                   // Protocol has been provided, so just use it as-is.
                   $url = $token;
               } else {
                   // Add scheme to emails and raw domain URLs.
                   $url = (strpos($token, '@') ? 'mailto:' : 'http://') . $token;
               }
               // Never start URL from the middle of text (except for punctuation).
               $invalid = preg_match('#[^\\s`!()\\[\\]{};\'"\\.,<>?«»“”‘’]$#u', $search[$index - 1]);
               $invalid |= !$this->IsValidURL($url, true);
               // We have a full, complete, and properly-formatted URL, with protocol.
               // Now we need to apply the $this->url_pattern template to turn it into HTML.
               $params = JString::parse_url($url);
               if (!$invalid && substr($url, 0, 7) == 'mailto:') {
                   $email = JString::substr($url, 7);
                   $output[$index] = JHtml::_('email.cloak', $email, $this->IsValidEmail($email));
               } elseif ($invalid || empty($params['host']) || !empty($params['pass'])) {
                   $output[$index - 1] .= $token;
                   $output[$index] = '';
               } else {
                   $params['url'] = $url;
                   $params['link'] = $url;
                   $params['text'] = $token;
                   $output[$index] = $this->FillTemplate($this->url_pattern, $params);
               }
           } else {
               $output[$index] = $token;
           }
       }
       return $output;
   }
Example #5
0
 public function buildRule(&$router, &$uri)
 {
     $sef = $uri->getVar('lang');
     if (empty($sef)) {
         $sef = self::$lang_codes[self::$tag]->sef;
     } elseif (!isset(self::$sefs[$sef])) {
         $sef = self::$default_sef;
     }
     $Itemid = $uri->getVar('Itemid');
     if (!is_null($Itemid)) {
         if ($item = JFactory::getApplication()->getMenu()->getItem($Itemid)) {
             if ($item->home && $uri->getVar('option') != 'com_search') {
                 $link = $item->link;
                 $parts = JString::parse_url($link);
                 if (isset($parts['query']) && strpos($parts['query'], '&amp;')) {
                     $parts['query'] = str_replace('&amp;', '&', $parts['query']);
                 }
                 parse_str($parts['query'], $vars);
                 // test if the url contains same vars as in menu link
                 $test = true;
                 foreach ($uri->getQuery(true) as $key => $value) {
                     if (!in_array($key, array('format', 'Itemid', 'lang')) && !(isset($vars[$key]) && $vars[$key] == $value)) {
                         $test = false;
                         break;
                     }
                 }
                 if ($test) {
                     foreach ($vars as $key => $value) {
                         $uri->delVar($key);
                     }
                     $uri->delVar('Itemid');
                 }
             }
         } else {
             $uri->delVar('Itemid');
         }
     }
     if (self::$mode_sef) {
         $uri->delVar('lang');
         if ($this->params->get('remove_default_prefix', 0) == 0 || $sef != self::$default_sef || $sef != self::$lang_codes[self::$tag]->sef || $this->params->get('detect_browser', 1) && JLanguageHelper::detectLanguage() != self::$tag && !self::$cookie) {
             $uri->setPath($uri->getPath() . '/' . $sef . '/');
         } else {
             $uri->setPath($uri->getPath());
         }
     } else {
         $uri->setVar('lang', $sef);
     }
 }
 /**
  * Display function
  */
 public function display($tpl = null)
 {
     if (function_exists('error_reporting')) {
         error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT);
     }
     /** load libraries for the system rener **/
     JSNFactory::localimport('libraries.joomlashine.mode.rawmode');
     JSNFactory::localimport('libraries.joomlashine.menu.menuitems');
     /** Assignment variables **/
     $jsntemplate = JSNFactory::getTemplate();
     $jsnmenuitems = JSNMenuitems::getInstance();
     /** get url **/
     $render_url = JRequest::getVar('render_url', '');
     $session = JSession::getInstance('files', array('name' => 'jsnpoweradmin'));
     if ($render_url == '' && $session->get('rawmode_render_url')) {
         $render_url = $session->get('rawmode_render_url');
     }
     $urlRender = base64_decode($render_url);
     if ($render_url == '') {
         $urlRender = JSNDatabase::getDefaultPage()->link;
     }
     $currUri = new JURI($urlRender);
     if (!$currUri->hasVar('Itemid')) {
         $currUri->setVar('Itemid', JSNDatabase::getDefaultPage()->id);
     }
     $urlString = $currUri->toString();
     $session->set('rawmode_render_url', base64_encode($urlString));
     $parts = JString::parse_url($urlString);
     if (!empty($parts['query'])) {
         parse_str($parts['query'], $params);
     } else {
         $params = array();
     }
     $jsnrawmode = JSNRawmode::getInstance($params);
     $jsnrawmode->setParam('positions', $jsntemplate->loadXMLPositions());
     $jsnrawmode->renderAll();
     $this->assign('component', $jsnrawmode->getHTML('component'));
     $this->assign('modules', $jsnrawmode->getHTML('positions'));
     $this->assign('jsnmenuitems', $jsnmenuitems);
     $this->assign('urlRender', $urlRender);
     /** add toolbar buttons **/
     $this->addToolBar();
     /** add scripts and css **/
     //$this->addMedia( $currUri->getVar('Itemid'), $urlString, array());//$jsnrawmode->getScript('positions', 'Array'));
     $this->addMedia($currUri->getVar('Itemid'), $urlString, $jsnrawmode->getScript('positions', 'Array'));
     return parent::display();
 }
Example #7
0
 /**
  * Get image type for input url or path of file.
  * @return mixed
  */
 protected function getInputType()
 {
     if (!isset($this->in['type'])) {
         $this->debug && JFactory::getApplication()->enqueueMessage('ImageHelper::getInputType');
         if (is_string($this->image)) {
             $path = $this->image;
         } else {
             $path = @$this->image['src'];
         }
         if (is_string($path)) {
             $ps = JString::parse_url($path);
             if (array_key_exists('path', $ps) && !empty($ps['path'])) {
                 $isHttp = isset($ps['scheme']) && in_array($ps['scheme'], array('http', 'https'));
                 if (!$isHttp || JURI::isInternal($path)) {
                     $path = $ps['path'];
                 } else {
                     // is extenal url.
                     $this->in['type'] = 'url';
                     $this->in['src'] = $path;
                     return $this->in['type'];
                 }
             }
         } else {
             if (!$path) {
                 $this->errors[] = 'Image path must be string or stored in array_argument[src]!';
             }
         }
         //var_dump('Path: ', $path);
         if (!file_exists($path)) {
             $this->errors[] = 'Image path is not exists!';
         } else {
             //var_dump('EXISTS');
             $this->in['src'] = realpath($path);
             $infor = array();
             if (!function_exists('exif_imagetype')) {
                 $intype = exif_imagetype($path);
             } else {
                 $infor = getimagesize($path);
                 $intype = @$infor[2];
             }
             switch ($intype) {
                 case IMAGETYPE_PNG:
                     $this->in['type'] = IMAGETYPE_PNG;
                     break;
                 case IMAGETYPE_GIF:
                     $this->in['type'] = IMAGETYPE_GIF;
                     break;
                 case IMAGETYPE_JPEG:
                     $this->in['type'] = IMAGETYPE_JPEG;
                     break;
                 default:
             }
         }
     }
     return $this->in['type'];
 }
 /**
  * Transforms a Punycode URL to a UTF-8 URL
  *
  * @param   string  $uri  The Punycode URL to transform
  *
  * @return  string  The UTF-8 URL
  *
  * @since   3.1.2
  */
 public static function urlToUTF8($uri)
 {
     if (empty($uri)) {
         return;
     }
     $parsed = JString::parse_url($uri);
     if (!isset($parsed['host']) || $parsed['host'] == '') {
         // If there is no host we do not need to convert it.
         return $uri;
     }
     $host = $parsed['host'];
     $hostExploded = explode('.', $host);
     $newhost = '';
     foreach ($hostExploded as $hostex) {
         $hostex = self::fromPunycode($hostex);
         $newhost .= $hostex . '.';
     }
     $newhost = substr($newhost, 0, -1);
     $newuri = '';
     if (!empty($parsed['scheme'])) {
         // Assume :// is required although it is not always.
         $newuri .= $parsed['scheme'] . '://';
     }
     if (!empty($newhost)) {
         $newuri .= $newhost;
     }
     if (!empty($parsed['port'])) {
         $newuri .= ':' . $parsed['port'];
     }
     if (!empty($parsed['path'])) {
         $newuri .= $parsed['path'];
     }
     if (!empty($parsed['query'])) {
         $newuri .= '?' . $parsed['query'];
     }
     if (!empty($parsed['fragment'])) {
         $newuri .= '#' . $parsed['fragment'];
     }
     return $newuri;
 }
Example #9
0
 public function buildRule(&$router, &$uri)
 {
     $sef = $uri->getVar('lang');
     if (empty($sef)) {
         $sef = self::$lang_codes[self::$tag]->sef;
     } elseif (!isset(self::$sefs[$sef])) {
         $sef = self::$default_sef;
     }
     $Itemid = $uri->getVar('Itemid');
     if (!is_null($Itemid)) {
         if ($item = JFactory::getApplication()->getMenu()->getItem($Itemid)) {
             if ($item->home && $uri->getVar('option') != 'com_search') {
                 $link = $item->link;
                 $parts = JString::parse_url($link);
                 if (isset($parts['query']) && strpos($parts['query'], '&amp;')) {
                     $parts['query'] = str_replace('&amp;', '&', $parts['query']);
                 }
                 parse_str($parts['query'], $vars);
                 // test if the url contains same vars as in menu link
                 $test = true;
                 foreach ($vars as $key => $value) {
                     if ($uri->hasVar($key) && $uri->getVar($key) != $value) {
                         $test = false;
                         break;
                     }
                 }
                 if ($test) {
                     foreach ($vars as $key => $value) {
                         $uri->delVar($key);
                     }
                     $uri->delVar('Itemid');
                 }
             }
         } else {
             $uri->delVar('Itemid');
         }
     }
     if (self::$mode_sef) {
         $uri->delVar('lang');
         $uri->setPath($uri->getPath() . '/' . $sef . '/');
     } else {
         $uri->setVar('lang', $sef);
     }
 }
Example #10
0
 /**
  * @group String
  * @covers JString::parse_url
  */
 public function testParse_Url()
 {
     $url = 'http://localhost/joomla_development/j16_trunk/administrator/index.php?option=com_contact&view=contact&layout=edit&id=5';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     $url = 'http://joomla.org/mytestpath/È';
     $expected = parse_url($url);
     // Fix up path for UTF-8 characters
     $expected['path'] = '/mytestpath/È';
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test special characters in URL
     $url = 'http://mydomain.com/!*\'();:@&=+$,/?%#[]';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
 }
Example #11
0
 /**
  * Parse a given URI and populate the class fields.
  *
  * @param   string  $uri  The URI string to parse.
  *
  * @return  boolean  True on success.
  *
  * @since   11.1
  */
 public function parse($uri)
 {
     // Initialise variables
     $retval = false;
     // Set the original URI to fall back on
     $this->_uri = $uri;
     // Parse the URI and populate the object fields.  If URI is parsed properly,
     // set method return value to true.
     if ($_parts = JString::parse_url($uri)) {
         $retval = true;
     }
     // We need to replace &amp; with & for parse_str to work right...
     if (isset($_parts['query']) && strpos($_parts['query'], '&amp;')) {
         $_parts['query'] = str_replace('&amp;', '&', $_parts['query']);
     }
     $this->_scheme = isset($_parts['scheme']) ? $_parts['scheme'] : null;
     $this->_user = isset($_parts['user']) ? $_parts['user'] : null;
     $this->_pass = isset($_parts['pass']) ? $_parts['pass'] : null;
     $this->_host = isset($_parts['host']) ? $_parts['host'] : null;
     $this->_port = isset($_parts['port']) ? $_parts['port'] : null;
     $this->_path = isset($_parts['path']) ? $_parts['path'] : null;
     $this->_query = isset($_parts['query']) ? $_parts['query'] : null;
     $this->_fragment = isset($_parts['fragment']) ? $_parts['fragment'] : null;
     // Parse the query
     if (isset($_parts['query'])) {
         parse_str($_parts['query'], $this->_vars);
     }
     return $retval;
 }
Example #12
0
 /**
  * Downloads the file from remote server to specified location on local server. Uses regular file operations or cURL or sockets (whichever available first) to download the file.
  * 
  * @param url $source_url url of the source file
  * @param string $target_folder target folder name, should end with DS 
  * @param string $target_file target file name.
  */
 public static function download_file($source_url, $target_folder, $target_file)
 {
     if (file_exists($target_file)) {
         JFile::delete($target_file);
     } else {
         JFolder::create($target_folder);
     }
     //try to connect via fopen
     if (function_exists('fopen') && ini_get('allow_url_fopen')) {
         //set socket timeout
         ini_set('default_socket_timeout', 5);
         $handle = fopen($source_url, 'rb');
         if ($handle) {
             $download = fopen($target_folder . $target_file, "wb");
             if ($download) {
                 while (!feof($handle)) {
                     fwrite($download, fread($handle, 1024 * 8), 1024 * 8);
                 }
             }
         }
         if ($handle) {
             fclose($handle);
         }
     } else {
         if (function_exists('curl_init') && function_exists('curl_exec')) {
             $fh = fopen($target_folder . $target_file, "w");
             $options = array(CURLOPT_FILE => $fh, CURLOPT_URL => $source_url, CURLOPT_TIMEOUT => 28800, CURLOPT_FAILONERROR => 1, CURLOPT_HEADER => 0, CURLOPT_TIMEOUT => 5);
             $ch = curl_init();
             curl_setopt_array($ch, $options);
             curl_exec($ch);
             curl_close($ch);
             fclose($fh);
         } else {
             if (function_exists('fsockopen') && $data == '') {
                 $errno = 0;
                 $errstr = '';
                 $parts = JString::parse_url($source_url);
                 $hostname = $parts['host'];
                 unset($parts['scheme']);
                 unset($parts['host']);
                 $filename = CJFunctions::join_url($parts);
                 //timeout handling: 5s for the socket and 5s for the stream = 10s
                 $fsock = fsockopen($hostname, 80, $errno, $errstr, 5);
                 if ($fsock) {
                     fputs($fsock, 'GET ' . $filename . ' HTTP/1.1\\r\\n');
                     fputs($fsock, 'HOST: ' . $hostname . '\\r\\n');
                     fputs($fsock, 'Connection: close\\r\\n\\r\\n');
                     //force stream timeout...
                     stream_set_blocking($fsock, 1);
                     stream_set_timeout($fsock, 5);
                     $get_info = false;
                     $download = fopen($target_folder . $target_file, 'wb');
                     while (!feof($fsock)) {
                         if ($get_info) {
                             fwrite($download, fread($handle, 1024 * 8), 1024 * 8);
                         } else {
                             if (fgets($fsock, 8192) == '\\r\\n') {
                                 $get_info = true;
                             }
                         }
                     }
                     fclose($fsock);
                 }
             }
         }
     }
 }
 /**
  * @return  array
  *
  * @since   11.2
  * @covers  JString::parse_url
  */
 public function testParse_Url()
 {
     $url = 'http://localhost/joomla_development/j16_trunk/administrator/index.php?option=com_contact&view=contact&layout=edit&id=5';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test all parts of query
     $url = 'https://john:doe@www.google.com:80/folder/page.html#id?var=kay&var2=key&true';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test special characters in URL
     $url = 'http://joomla.org/mytestpath/È';
     $expected = parse_url($url);
     // Fix up path for UTF-8 characters
     $expected['path'] = '/mytestpath/È';
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test special characters in URL
     $url = 'http://mydomain.com/!*\'();:@&=+$,/?%#[]" \\';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test url encoding in URL
     $url = 'http://mydomain.com/%21%2A%27%28%29%3B%3A%40%26%3D%24%2C%2F%3F%25%23%5B%22%20%5C';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test a mix of the above
     $url = 'http://john:doe@mydomain.com:80/%È21%25È3*%(';
     $expected = parse_url($url);
     // Fix up path for UTF-8 characters
     $expected['path'] = '/%È21%25È3*%(';
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
     // Test invalild URL
     $url = 'http:///mydomain.com';
     $expected = parse_url($url);
     $actual = JString::parse_url($url);
     $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
 }
Example #14
0
 public function getAssociatedArticle($id)
 {
     $associated_id = 0;
     require_once JPATH_SITE . '/components/com_content/helpers/route.php';
     require_once JPATH_SITE . '/components/com_content/helpers/association.php';
     $result = ContentHelperAssociation::getAssociations($id, 'article');
     $tag = JFactory::getLanguage()->getTag();
     if (isset($result[$tag])) {
         $parts = JString::parse_url($result[$tag]);
         parse_str($parts['query'], $vars);
         if (isset($vars['id'])) {
             $splits = explode(':', $vars['id']);
         }
         $associated_id = (int) $splits[0];
     }
     if (isset($associated_id) && $associated_id) {
         $id = $associated_id;
     }
     return $id;
 }
 /**
  * Parse a given URI and populate the class fields.
  *
  * @param   string  $uri  The URI string to parse.
  *
  * @return  boolean  True on success.
  *
  * @since   11.1
  */
 public function parse($uri)
 {
     // Set the original URI to fall back on
     $this->uri = $uri;
     /*
      * Parse the URI and populate the object fields. If URI is parsed properly,
      * set method return value to true.
      */
     $parts = JString::parse_url($uri);
     $retval = $parts ? true : false;
     // We need to replace &amp; with & for parse_str to work right...
     if (isset($parts['query']) && strpos($parts['query'], '&amp;')) {
         $parts['query'] = str_replace('&amp;', '&', $parts['query']);
     }
     $this->scheme = isset($parts['scheme']) ? $parts['scheme'] : null;
     $this->user = isset($parts['user']) ? $parts['user'] : null;
     $this->pass = isset($parts['pass']) ? $parts['pass'] : null;
     $this->host = isset($parts['host']) ? $parts['host'] : null;
     $this->port = isset($parts['port']) ? $parts['port'] : null;
     $this->path = isset($parts['path']) ? $parts['path'] : null;
     $this->query = isset($parts['query']) ? $parts['query'] : null;
     $this->fragment = isset($parts['fragment']) ? $parts['fragment'] : null;
     // Parse the query
     if (isset($parts['query'])) {
         parse_str($parts['query'], $this->vars);
     }
     return $retval;
 }
Example #16
0
 /**
  *
  * @param string $path
  * @return multitype:multitype:unknown  |Ambigous <multitype:, boolean, multitype:unknown multitype:unknown  >
  */
 public static function getExternalImages($path)
 {
     $files = array();
     $ps = JString::parse_url($path);
     if (array_key_exists('path', $ps) && !empty($ps['path'])) {
         $isHttp = isset($ps['scheme']) && in_array($ps['scheme'], array('http', 'https'));
         if (!$isHttp || JURI::isInternal($path)) {
             // image on server
             $path = $ps['path'];
         } else {
             $files[] = array('src' => $path);
             return $files;
         }
     }
     if (is_file($path)) {
         $files[] = $path;
     } else {
         if (is_dir($path)) {
             $files = JFolder::files($path, '.jpg|.png|.gif', false, true);
         } else {
             $ext = substr($path, -4);
             $search = substr($path, 0, -4);
             $lext = strtolower($ext);
             if (is_dir($search) && in_array($lext, array('.jpg', '.png', '.gif'))) {
                 $files = JFolder::files($search, $ext, false, true);
             }
         }
     }
     return $files;
 }