!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

C:\dmz\php\pear\DB\DataObject\   drwxrwxrwx
Free 4.1 GB of 39.52 GB (10.37%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     Links.php (14.43 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * Link tool for DB_DataObject
 *
 * PHP versions 5
 *
 * LICENSE: This source file is subject to version 3.01 of the PHP license
 * that is available through the world-wide-web at the following URI:
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of
 * the PHP License and are unable to obtain it through the web, please
 * send a note to license@php.net so we can mail you a copy immediately.
 *
 * @category   Database
 * @package    DB_DataObject
 * @author     Alan Knowles <alan@akbkhome.com>
 * @copyright  1997-2006 The PHP Group
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
 * @version    : FIXME
 * @link       http://pear.php.net/package/DB_DataObject
 */


/**
 *
 * Example of how this could be used..
 * 
 * The lind method are now in here.
 *
 * Currenly only supports existing methods, and new 'link()' method
 *
 */
  
  
/**
 * Links class
 *
 * @package DB_DataObject
 */
class DB_DataObject_Links 
{
     
/**
     * @property {DB_DataObject}      do   DataObject to apply this to.
     */
    
var $do false;
    
    
    
/**
     * @property {Array|String} load    What to load, 'all' or an array of properties. (default all)
     */
    
var $load 'all';
    
/**
     * @property {String|Boolean}       scanf   use part of column name as resulting
     *                                          property name. (default false)
     */
    
var $scanf false;
    
/**
     * @property {String|Boolean}       printf  use column name as sprintf for resulting property name..
     *                                     (default %s_link if apply is true, otherwise it is %s)
     */
    
var $printf false;
    
/**
     * @property {Boolean}      cached  cache the result, so future queries will use cache rather
     *                                  than running the expensive sql query.
     */
    
var $cached false;
    
/**
     * @property {Boolean}      apply   apply the result to this object, (default true)
     */
    
var $apply true;
   
    
    
//------------------------- RETURN ------------------------------------
    /**
     * @property {Array}      links    key value associative array of links.
     */
    
var $links;
    
    
    
/**
     * Constructor
     *   -- good ole style..
     *  @param {DB_DataObject}           do  DataObject to apply to.
     *  @param {Array}           cfg  Configuration (basically properties of this object)
     */
    
    
function DB_DataObject_Links($do,$cfg= array())
    {
        
// check if do is set!!!?
        
$this->do $do;
        
        foreach(
$cfg as $k=>$v) {
            
$this->$k $v;
        }
       
        
    }
     
    
/**
     * return name from related object
     *
     * The relies on  a <dbname>.links.ini file, unless you specify the arguments.
     * 
     * you can also use $this->getLink('thisColumnName','otherTable','otherTableColumnName')
     *
     *
     * @param string $field|array    either row or row.xxxxx or links spec.
     * @param string|DB_DataObject $table  (optional) name of table to look up value in
     * @param string $link   (optional)  name of column in other table to match
     * @author Tim White <tim@cyface.com>
     * @access public
     * @return mixed object on success false on failure or '0' when not linked
     */
    
function getLink($field$tablefalse$link='')
    {
        
        static 
$cache = array();
        
        
// GUESS THE LINKED TABLE.. (if found - recursevly call self)
        
        
if ($table == false) {
            
            
            
$info $this->linkInfo($field);
            
            if (
$info) {
                return 
$this->getLink($field$info[0],  $link === false $info[1] : $link );
            }
            
            
// no links defined.. - use borked BC method...
                  // use the old _ method - this shouldnt happen if called via getLinks()
            
if (!($p strpos($field'_'))) {
                return 
false;
            }
            
$table substr($field0$p);
            return 
$this->getLink($field$table);
            
            

        }
         
        
$tn is_string($table) ? $table $table->tableName();
         
            
 
        if (!isset(
$this->do->$field)) {
            
$this->do->raiseError("getLink: row not set $field"DB_DATAOBJECT_ERROR_NODATA);
            return 
false;
        }
        
        
// check to see if we know anything about this table..
        
      
        
if (empty($this->do->$field) || $this->do->$field 0) {
            return 
0// no record. 
        
}
        
        if (
$this->cached && isset($cache[$tn.':'$link .':'$this->do->$field])) {
            return 
$cache[$tn.':'$link .':'$this->do->$field];    
        }
        
        
$obj is_string($table) ? $this->do->factory($tn) : $table;;
        
        if (!
is_a($obj,'DB_DataObject')) {
            
$this->do->raiseError(
                
"getLink:Could not find class for row $field, table $tn"
                
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
            return 
false;
        }
        
// -1 or 0 -- no referenced record..
       
        
$ret false;
        if (
$link) {
            
            if (
$obj->get($link$this->do->$field)) {
                
$ret $obj;
            }
            
            
        
// this really only happens when no link config is set (old BC stuff)    
        
} else if ($obj->get($this->do->$field)) {
            
$ret$obj;
             
        }
        if (
$this->cached) {
            
$cache[$tn.':'$link .':'$this->do->$field] = $ret;
        }
        return 
$ret;
        
    }
    
/**
     * get link information for a field or field specification
     *
     * alll link (and join methods accept the 'link' info ) in various ways
     * string : 'field' = which field to get (uses ???.links.ini to work out what)
     * array(2) : 'field', 'table:remote_col' << just like the links.ini def.
     * array(3) : 'field', $dataobject, 'remote_col'  (handy for joinAdd to do nested joins.)
     *
     * @param string|array $field or link spec to use. 
     * @return (false|array) array of dataobject and linked field or false.
     *
     *
     */
    
    
function linkInfo($field)
    {
         
        if (
is_array($field)) {
            if (
count($field) == 3) {
                
// array with 3 args:
                // local_col , dataobject, remote_col
                
return array(
                    
$field[1],
                    
$field[2],
                    
$field[0]
                );
                
            } 
            list(
$table,$link) = explode(':'$field[1]);
            
            return array(
                
$this->do->factory($table),
                
$link,
                
$field[0]
            );
            
        }
        
// work out the link.. (classic way)
        
        
$links $this->do->links();
        
        if (empty(
$links) || !is_array($links)) {
             
            return 
false;
        }
            
            
        if (!isset(
$links[$field])) {
            
            return 
false;
        }
        list(
$table,$link) = explode(':'$links[$field]);
    
        
        
//??? needed???
        
if ($p strpos($field,".")) {
            
$field substr($field,0,$p);
        }
        
        return array(
            
$this->do->factory($table),
            
$link,
            
$field
        
);
        
        
         
        
    }
    
    
        
    
/**
     *  a generic geter/setter provider..
     *
     *  provides a generic getter setter for the referenced object
     *  eg.
     *  $link->link('company_id') returns getLink for the object
     *  if nothing is linked (it will return an empty dataObject)
     *  $link->link('company_id', array(1)) - just sets the 
     *
     *  also array as the field speck supports
     *      $link->link(array('company_id', 'company:id'))
     *  
     *
     *  @param  string|array   $field   the field to fetch or link spec.
     *  @params array          $args    the arguments sent to the getter setter
     *  @return mixed true of false on set, the object on getter.
     *
     */
    
function link($field$args = array())
    {
        
$info $this->linkInfo($field);
         
        if (!
$info) {
            
$this->do->raiseError(
                
"getLink:Could not find link for row $field"
                
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
            return 
false;
        }
        
$field $info[2];
        
        
        if (empty(
$args)) { // either an empty array or really empty....
            
            
if (!isset($this->do->$field)) {
                return 
$info[0]; // empty dataobject.
            
}
            
            
$ret $this->getLink($field);
            
// nothing linked -- return new object..
            
return ($ret === 0) ? $info[0] : $ret;
            
        }
        
$assign is_array($args) ? $args[0] : $args;
         
        
// otherwise it's a set call..
        
if (!is_a($assign 'DB_DataObject')) {
            
            if (
is_numeric($assign) && is_integer($assign 1)) {
                if (
$assign  0) {
                    
                    if (!
$info) {
                        return 
false;
                    }
                    
// check that record exists..
                    
if (!$info[0]->get($info[1], $assign )) {
                        return 
false;
                    }
                    
                }
                
                
$this->do->$field $assign ;
                return 
true;
            }
            
            return 
false;
        }
        
        
// otherwise we are assigning it ...
        
        
$this->do->$field $assign->{$info[1]};
        return 
true;
        
        
    }
    
/**
     * load related objects
     *
     * Generally not recommended to use this.
     * The generator should support creating getter_setter methods which are better suited.
     *
     * Relies on  <dbname>.links.ini
     *
     * Sets properties on the calling dataobject  you can change what
     * object vars the links are stored in by  changeing the format parameter
     *
     *
     * @param  string format (default _%s) where %s is the table name.
     * @author Tim White <tim@cyface.com>
     * @access public
     * @return boolean , true on success
     */
    
    
function applyLinks($format '_%s')
    {
         
        
// get table will load the options.
        
if ($this->do->_link_loaded) {
            return 
true;
        }
        
        
$this->do->_link_loaded false;
        
$cols  $this->do->table();
        
$links $this->do->links();
         
        
$loaded = array();
        
        if (
$links) {   
            foreach(
$links as $key => $match) {
                list(
$table,$link) = explode(':'$match);
                
$k sprintf($formatstr_replace('.''_'$key));
                
// makes sure that '.' is the end of the key;
                
if ($p strpos($key,'.')) {
                      
$key substr($key0$p);
                }
                
                
$this->do->$k $this->getLink($key$table$link);
                
                if (
is_object($this->do->$k)) {
                    
$loaded[] = $k
                }
            }
            
$this->do->_link_loaded $loaded;
            return 
true;
        }
        
// this is the autonaming stuff..
        // it sends the column name down to getLink and lets that sort it out..
        // if there is a links file then it is not used!
        // IT IS DEPRECATED!!!! - DO NOT USE 
        
if (!is_null($links)) {    
            return 
false;
        }
        
        
        foreach (
array_keys($cols) as $key) {
            if (!(
$p strpos($key'_'))) {
                continue;
            }
            
// does the table exist.
            
$k =sprintf($format$key);
            
$this->do->$k $this->getLink($key);
            if (
is_object($this->do->$k)) {
                
$loaded[] = $k
            }
        }
        
$this->do->_link_loaded $loaded;
        return 
true;
    }
    
    
/**
     * getLinkArray
     * Fetch an array of related objects. This should be used in conjunction with a
     * <dbname>.links.ini file configuration (see the introduction on linking for details on this).
     *
     * You may also use this with all parameters to specify, the column and related table.
     * 
     * @access public
     * @param string $field- either column or column.xxxxx
     * @param string $table (optional) name of table to look up value in
     * @param string $fkey (optional) fetchall key see DB_DataObject::fetchAll()
     * @param string $fval (optional)fetchall val DB_DataObject::fetchAll()
     * @param string $fval (optional) fetchall method DB_DataObject::fetchAll()
     * @return array - array of results (empty array on failure)
     * 
     * Example - Getting the related objects
     * 
     * $person = new DataObjects_Person;
     * $person->get(12);
     * $children = $person->getLinkArray('children');
     * 
     * echo 'There are ', count($children), ' descendant(s):<br />';
     * foreach ($children as $child) {
     *     echo $child->name, '<br />';
     * }
     * 
     */
    
function getLinkArray($field$table null$fkey false$fval false$fmethod false)
    {
        
        
$ret = array();
        if (!
$table)  {
            
            
            
$links $this->do->links();
            
            if (
is_array($links)) {
                if (!isset(
$links[$field])) {
                    
// failed..
                    
return $ret;
                }
                list(
$table,$link) = explode(':',$links[$field]);
                return 
$this->getLinkArray($field,$table);
            } 
            if (!(
$p strpos($field,'_'))) {
                return 
$ret;
            }
            return 
$this->getLinkArray($field,substr($field,0,$p));


        }
        
        
$c  $this->do->factory($table);
        
        if (!
is_object($c) || !is_a($c,'DB_DataObject')) {
            
$this->do->raiseError(
                
"getLinkArray:Could not find class for row $field, table $table"
                
DB_DATAOBJECT_ERROR_INVALIDCONFIG
            
);
            return 
$ret;
        }

        
// if the user defined method list exists - use it...
        
if (method_exists($c'listFind')) {
            
$c->listFind($this->id);
            while (
$c->fetch()) {
                
$ret[] = clone($c);
            }
            return 
$ret;
        } 
        return 
$c->fetchAll($fkey$fval$fmethod);
        
        
    }

}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]--