Source for file Lib.php

Documentation is available at Lib.php

  1. <?php
  2. /*
  3.  *  $Id: Lib.php 1916 2007-07-01 10:47:44Z meus $
  4.  *
  5.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16.  *
  17.  * This software consists of voluntary contributions made by many individuals
  18.  * and is licensed under the LGPL. For more information, see
  19.  * <http://www.phpdoctrine.com>.
  20.  */
  21. /**
  22.  * Doctrine_Lib has not commonly used static functions, mostly for debugging purposes
  23.  *
  24.  * @package     Doctrine
  25.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  26.  * @category    Object Relational Mapping
  27.  * @link        www.phpdoctrine.com
  28.  * @since       1.0
  29.  * @version     $Revision: 1916 $
  30.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  31.  */
  32. {
  33.     /**
  34.      * @param integer $state                the state of record
  35.      * @see Doctrine_Record::STATE_* constants
  36.      * @return string                       string representation of given state
  37.      */
  38.     public static function getRecordStateAsString($state)
  39.     {
  40.         switch ($state{
  41.         case Doctrine_Record::STATE_PROXY:
  42.             return "proxy";
  43.             break;
  44.         case Doctrine_Record::STATE_CLEAN:
  45.             return "persistent clean";
  46.             break;
  47.         case Doctrine_Record::STATE_DIRTY:
  48.             return "persistent dirty";
  49.             break;
  50.         case Doctrine_Record::STATE_TDIRTY:
  51.             return "transient dirty";
  52.             break;
  53.         case Doctrine_Record::STATE_TCLEAN:
  54.             return "transient clean";
  55.             break;
  56.         }
  57.     }
  58.     /**
  59.      * returns a string representation of Doctrine_Record object
  60.      * @param Doctrine_Record $record 
  61.      * @return string 
  62.      */
  63.     public static function getRecordAsString(Doctrine_Record $record)
  64.     {
  65.         $r['<pre>';
  66.         $r['Component  : ' $record->getTable()->getComponentName();
  67.         $r['ID         : ' $record->obtainIdentifier();
  68.         $r['References : ' count($record->getReferences());
  69.         $r['State      : ' Doctrine_Lib::getRecordStateAsString($record->getState());
  70.         $r['OID        : ' $record->getOID();
  71.         $r['data       : ' Doctrine::dump($record->getData()false);
  72.         $r['</pre>';
  73.         return implode("\n",$r)."<br />";
  74.     }
  75.     /**
  76.      * Return an collection of records as XML.
  77.      * 
  78.      * @see getRecordAsXml for options to set in the record class to control this.
  79.      *
  80.      * @param Doctrine_Collection $collection 
  81.      * @param SimpleXMLElement $xml 
  82.      * @return string Xml as string
  83.      */
  84.  
  85.     public static function getCollectionAsXml(Doctrine_Collection $collectionSimpleXMLElement $incomming_xml null){
  86.  
  87.         $collectionName Doctrine_Lib::plurelize($collection->getTable()->tableName);
  88.                 if $collection->count != 0{
  89.                     $record $collection[0];
  90.             $xml_options $record->option("xml");
  91.                     if isset($xml_options["collection_name"])) {
  92.                         $collectionName $xml_options["collection_name"];
  93.                     }
  94.                 }
  95.  
  96.         if isset($incomming_xml)) {
  97.                         $new_xml_string "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><" $collectionName "></" $collectionName ">";
  98.             $xml new SimpleXMLElement($new_xml_string);
  99.         else {
  100.             $xml $incomming_xml->addChild($collectionName);
  101.         }
  102.         foreach ($collection as $key => $record{
  103.             Doctrine_Lib::getRecordAsXml($record$xml);
  104.         }
  105.         return $xml->asXML();
  106.     }
  107.  
  108.     public static function plurelize($string){
  109.         return $string "s";
  110.     }
  111.  
  112.     /**
  113.      * Return a recrd as XML.
  114.      *
  115.      * In order to control how this is done set the "xml" option in a record.
  116.      * This option is an array that has the keys "ignore_fields" and "include_relations". Both of these are arrays that list the name of fields/relations to include/process.
  117.      *
  118.      * If you want to insert this xml as a part inside another xml send a
  119.      * SimpleXMLElement to the function. Because of the nature of SimpleXML the
  120.      * content you add to this element will be avilable after the function is
  121.      * complete.
  122.      *
  123.      * @param Doctrine_Record $record 
  124.      * @param SimpleXMLElement $xml 
  125.      * @return string Xml as string
  126.      */
  127.     public static function getRecordAsXml(Doctrine_Record $recordSimpleXMlElement $incomming_xml NULL)
  128.     {
  129.         $recordname $record->getTable()->tableName;
  130.         if !isset($incomming_xml)) {
  131.                         $new_xml_string "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><" $recordname "></" $recordname ">";
  132.             $xml new SimpleXMLElement($new_xml_string);
  133.         }else{
  134.             $xml $incomming_xml->addChild($recordname);
  135.         }
  136.                 foreach($record->obtainIdentifier(as $pk_field => $pk_value){
  137.                     $xml->addChild($pk_field,$pk_value)
  138.                 }
  139.         $xml_options $record->option("xml");
  140.                 if isset($xml_options["record_name"])) {
  141.                     $recordname $xml_options["record_name"];
  142.                 }
  143.         foreach ($record->getData(as $field => $value{
  144.             if ((isset($xml_options["ignore_fields"]&& !in_array($field$xml_options["ignore_fields"])) || !isset($xml_options["ignore_fields"])) {
  145.                 if ($value instanceOf Doctrine_Null{
  146.                     $xml->addChild($field);
  147.                 else {    
  148.                     $xml->addChild($field$value);
  149.                 }
  150.             }
  151.         }
  152.         if (!isset($xml_options["include_relations"])) {
  153.             return $xml->asXML();
  154.         }
  155.         $relations $record->getTable()->getRelations();
  156.         foreach ($relations as $name => $relation{
  157.             if (in_array($name$xml_options["include_relations"])) {
  158.                 $relation_type $relation->getType();
  159.                 $related_records $record->get($name);
  160.                 if ($relation_type == Doctrine_Relation::ONE && $related_records instanceOf Doctrine_Record{
  161.                     Doctrine_Lib::getRecordAsXml($related_records$xml);
  162.                 else {
  163.                     Doctrine_Lib::getCollectionAsXml($related_records$xml);
  164.                 }
  165.             }
  166.         }
  167.         return $xml->asXML();
  168.     }
  169.  
  170.  
  171.     /**
  172.      * getStateAsString
  173.      * returns a given connection state as string
  174.      * @param integer $state        connection state
  175.      */
  176.     public static function getConnectionStateAsString($state)
  177.     {
  178.         switch ($state{
  179.         case Doctrine_Transaction::STATE_SLEEP:
  180.             return "open";
  181.             break;
  182.         case Doctrine_Transaction::STATE_BUSY:
  183.             return "busy";
  184.             break;
  185.         case Doctrine_Transaction::STATE_ACTIVE:
  186.             return "active";
  187.             break;
  188.         }
  189.     }
  190.     /**
  191.      * returns a string representation of Doctrine_Connection object
  192.      * @param Doctrine_Connection $connection 
  193.      * @return string 
  194.      */
  195.     public static function getConnectionAsString(Doctrine_Connection $connection)
  196.     {
  197.         $r['<pre>';
  198.         $r['Doctrine_Connection object';
  199.         $r['State               : ' Doctrine_Lib::getConnectionStateAsString($connection->transaction->getState());
  200.         $r['Open Transactions   : ' $connection->transaction->getTransactionLevel();
  201.         $r['Table in memory     : ' $connection->count();
  202.         $r['Driver name         : ' $connection->getAttribute(Doctrine::ATTR_DRIVER_NAME);
  203.  
  204.         $r["</pre>";
  205.         return implode("\n",$r)."<br>";
  206.     }
  207.     /**
  208.      * returns a string representation of Doctrine_Table object
  209.      * @param Doctrine_Table $table 
  210.      * @return string 
  211.      */
  212.     public static function getTableAsString(Doctrine_Table $table)
  213.     {
  214.         $r["<pre>";
  215.         $r["Component   : ".$table->getComponentName();
  216.         $r["Table       : ".$table->getTableName();
  217.         $r["</pre>";
  218.         return implode("\n",$r)."<br>";
  219.     }
  220.     /**
  221.      * @return string 
  222.      */
  223.     public static function formatSql($sql)
  224.     {
  225.         $e explode("\n",$sql);
  226.         $color "367FAC";
  227.         $l $sql;
  228.         $l str_replace("SELECT ""<font color='$color'><b>SELECT </b></font><br \>  ",$l);
  229.         $l str_replace("FROM ""<font color='$color'><b>FROM </b></font><br \>",$l);
  230.         $l str_replace(" LEFT JOIN ""<br \><font color='$color'><bLEFT JOIN </b></font>",$l);
  231.         $l str_replace(" INNER JOIN ""<br \><font color='$color'><bINNER JOIN </b></font>",$l);
  232.         $l str_replace(" WHERE ""<br \><font color='$color'><bWHERE </b></font>",$l);
  233.         $l str_replace(" GROUP BY ""<br \><font color='$color'><bGROUP BY </b></font>",$l);
  234.         $l str_replace(" HAVING ""<br \><font color='$color'><bHAVING </b></font>",$l);
  235.         $l str_replace(" AS ""<font color='$color'><bAS </b></font><br \>  ",$l);
  236.         $l str_replace(" ON ""<font color='$color'><bON </b></font>",$l);
  237.         $l str_replace(" ORDER BY ""<font color='$color'><bORDER BY </b></font><br \>",$l);
  238.         $l str_replace(" LIMIT ""<font color='$color'><bLIMIT </b></font><br \>",$l);
  239.         $l str_replace(" OFFSET ""<font color='$color'><bOFFSET </b></font><br \>",$l);
  240.         $l str_replace("  ""<dd>",$l);
  241.  
  242.         return $l;
  243.     }
  244.     /**
  245.      * returns a string representation of Doctrine_Collection object
  246.      * @param Doctrine_Collection $collection 
  247.      * @return string 
  248.      */
  249.     public static function getCollectionAsString(Doctrine_Collection $collection)
  250.     {
  251.         $r["<pre>";
  252.         $r[get_class($collection);
  253.         $r['data : ' Doctrine::dump($collection->getData()false);
  254.         //$r[] = 'snapshot : ' . Doctrine::dump($collection->getSnapshot());
  255.  
  256.         $r["</pre>";
  257.         return implode("\n",$r);
  258.     }
  259. }