Login   Register  
PHP Classes
elePHPant
Icontem

File: class.url.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Dmitry V. Sabanin  >  URL  >  class.url.php  >  Download  
File: class.url.php
Role: Class source
Content type: text/plain
Description: Main class
Class: URL
URL abstraction class
Author: By
Last change: Some changes in description.
Date: 12 years ago
Size: 6,305 bytes
 

Contents

Class file image Download
<?php
/*
* Class that abstracts URL;
* It can easily make URL's for dynamic scripts and also protects ur URL from "junk".
* With the word 'junk' i mean the situation when u add same variables with different values 
* on the different parts of the scripts.

* Example of use:
*     $action = new URL();
*     $action->addVal("form_submitted","1");
*     echo $action->Build();
* This will print ur current URL with new variable called form_submitted and equal to 1.
* If u want link to the URL u can i.e. do this:
*     $newspage = new URL();
*     $newspage->addVal("module","news");
*     echo $newspage->A();

* Changelog
* 14 march: 
*     + added Clear() method
*     + fixed error in Build() method
*     + comments to methods are added
*/


class URL
{
  var 
$Text;
  var 
$Scheme;
  var 
$Host;
  var 
$Port;
  var 
$Path;
  var 
$Query;
  var 
$Fragment;
  var 
$Dynamic;  // TRUE if URL have GET vars
  
var $Valid;
  var 
$Args = array();
  var 
$Cache// cached previous build of URL
  /**
   * URL::URL()
   * 
   * @param mixed $Text U can specify URL that different from current 
   * @return void
   **/
  
function URL($Text FALSE)
  {
    global 
$HTTP_SERVER_VARS;
    if ( 
$Text )
       
$this->Text $Text;
    else
        
$this->Text "http://".$HTTP_SERVER_VARS["HTTP_HOST"].$HTTP_SERVER_VARS["REQUEST_URI"];
    if ( 
$this->parseURL() )
       
$this->Valid TRUE;
    else
       
$this->Valid FALSE;
  }
  
/**
   * URL::parseURL()
   * This method is private, it parses URL on the parts.
   * @return boolean URL is right or not;
   **/
  
function parseURL()
  {
           
$tmp parse_url$this->Text );

           if ( isSet(
$tmp["scheme"]) )
              
$this->Scheme $tmp["scheme"];
           else
               return (
FALSE);

           if ( isSet(
$tmp["host"]) )
              
$this->Host $tmp["host"];
           else
               return (
FALSE);

           if ( isSet(
$tmp["path"]) )
              
$this->Path $tmp["path"];
           else
               return(
FALSE);
        
           if ( isSet(
$tmp["query"]) )
              
$this->Query  $tmp["query"];

           if ( isSet(
$tmp["fragment"]) )
              
$this->Fragment $tmp["fragment"];
    
           if ( isSet(
$tmp["port"]) )
              
$this->Port $tmp["port"];
       
           unset(
$tmp);

            if ( isSet(
$this->Query) )
               
$this->Dynamic TRUE;
            else
                
$this->Dynamic FALSE;
        
            if ( 
$this->Dynamic )
            {
               
$temp explode("&",$this->Query);
               
$i 0;
               while ( list(
$key$val) = each ($temp) )
               {
                     
$tmp explode("=",$val);
                     
$this->Args[$tmp[0]] = $tmp[1];
                     
$i++;
               }
            }
            return (
TRUE);
  }
  
/**
   * URL::dropVal()
   * Drops a key from URL.
   * @param mixed $key A key of value to drop.
   * @return string URL if ok or echo about error.
   **/
  
function dropVal($key)
  {
    if ( isSet(
$this->Args[$key]) )
       
$this->Args[$key] = NULL;
    else
        echo 
"Key not found.";
    return 
$this->Build();
  }
  
/**
   * URL::Clear()
   * Clears previous URL and let u work with another.
   * @param string $Text This can be used to work with specific URL, not the current one.
   * @return void
   **/
  
function Clear()
  {
      
$this->URL();
    empty(
$this->Args);
  }
  
/**
   * URL::getVal()
   * Gets a value from URL. (Even that values that are from 
   * @param $key
   * @return mixed key if everything is OK, or echo'es that key is not found.
   **/
  
function getVal ($key)
  {
    if ( isSet(
$this->Args[$key]) )
       return 
$this->Args[$key];
    else
        echo 
"Key not found.";
  }
  
  
/**
   * URL::addVal()
   * Adds a key to URL.
   * @param mixed $key A key to add.
   * @param mixed $value Value of the key
   * @return string URL
   **/
  
function addVal ($key$value)
  {
    if ( !isSet(
$this->Args[$key]) )
       
$this->Args[$key] = $value;
    else
        echo 
"Key already exists.";
    return 
$this->Build();
  }
  
  
/**
   * URL::setVal()
   * 
   * @param mixed $key Key name for parameter.
   * @param mixed $value Value for parameter.
   * @param boolean $create Create new key if not exists.
   * @return Echo if key not found and builded URL if everything ok.
   **/
  
function setVal ($key$value$create=FALSE)
  {
    if ( isSet(
$this->Args[$key]) or $create == TRUE)
       
$this->Args[$key] = $value;
    else
        echo 
"Key not found.";
    return 
$this->Build();
  }
  
  
/**
   * URL::is_Set()
   * Checks if key is set in the URL.
   * @param mixed $key 
   * @return boolean  
   **/
  
function is_Set ($key)
  {
    if ( isSet(
$this->Args[$key]) )
       return 
TRUE;
    else
        return 
FALSE;
  }
  
  
/**
   * URL::Build()
   * This is can be used to build a URL.
   * @param boolean $full Set to TRUE if u want full URL (with hostname etc)
   * @return string URL
   **/
  
function Build ($full FALSE)
  {
    
$url "";
    if (
$full)
    {
      
$url $this->Scheme."://";
      
$url .= $this->Host;
      if ( isSet(
$this->Port) )
         
$url .= ":".$this->Port;
    }
    
$url .= $this->Path;
    
$i 0;
    foreach ( 
$this->Args as $key => $value )
    {
          if ( 
$i == $url .= "?";
          if ( !
is_Null($value) )
          {
             
$url .= $key."=".$value."&";
          }
          
$i=1;
    } 
    if ( 
$i )
       {
         
$url substr_replace($url'', -1);
       }
    if ( isSet(
$this->Fragment) )
       
$url .= "#".$this->Fragment;
    
$this->Cache $url;
    return 
$url;
  }
  
/**
   * URL::A()
   * Returns builded URL with <A> tags
   * @param string $name Name of link, it will be like this: <A HREF=...>$name</A>
   * @param boolean $full Set to TRUE if u want full URL (with hostname etc)
   * @return string URL with tags
   **/
  
function A($name FALSE$full FALSE)
  {
    
$url $this->Build($full);
    if ( !
$name )
       
$name $url;
    return 
"<A HREF=".$url.">".$name."</A>";
  }
}
?>