home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / OLE / PPS.php < prev   
Encoding:
PHP Script  |  2008-07-02  |  6.4 KB  |  223 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2002 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Author: Xavier Noguer <xnoguer@php.net>                              |
  17. // | Based on OLE::Storage_Lite by Kawai, Takanori                        |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: PPS.php,v 1.7 2007/02/13 21:00:42 schmidt Exp $
  21.  
  22.  
  23. require_once 'PEAR.php';
  24. require_once 'OLE.php';
  25.  
  26. /**
  27. * Class for creating PPS's for OLE containers
  28. *
  29. * @author   Xavier Noguer <xnoguer@php.net>
  30. * @category Structures
  31. * @package  OLE
  32. */
  33. class OLE_PPS extends PEAR
  34. {
  35.     /**
  36.     * The PPS index
  37.     * @var integer
  38.     */
  39.     var $No;
  40.  
  41.     /**
  42.     * The PPS name (in Unicode)
  43.     * @var string
  44.     */
  45.     var $Name;
  46.  
  47.     /**
  48.     * The PPS type. Dir, Root or File
  49.     * @var integer
  50.     */
  51.     var $Type;
  52.  
  53.     /**
  54.     * The index of the previous PPS
  55.     * @var integer
  56.     */
  57.     var $PrevPps;
  58.  
  59.     /**
  60.     * The index of the next PPS
  61.     * @var integer
  62.     */
  63.     var $NextPps;
  64.  
  65.     /**
  66.     * The index of it's first child if this is a Dir or Root PPS
  67.     * @var integer
  68.     */
  69.     var $DirPps;
  70.  
  71.     /**
  72.     * A timestamp
  73.     * @var integer
  74.     */
  75.     var $Time1st;
  76.  
  77.     /**
  78.     * A timestamp
  79.     * @var integer
  80.     */
  81.     var $Time2nd;
  82.  
  83.     /**
  84.     * Starting block (small or big) for this PPS's data  inside the container
  85.     * @var integer
  86.     */
  87.     var $_StartBlock;
  88.  
  89.     /**
  90.     * The size of the PPS's data (in bytes)
  91.     * @var integer
  92.     */
  93.     var $Size;
  94.  
  95.     /**
  96.     * The PPS's data (only used if it's not using a temporary file)
  97.     * @var string
  98.     */
  99.     var $_data;
  100.  
  101.     /**
  102.     * Array of child PPS's (only used by Root and Dir PPS's)
  103.     * @var array
  104.     */
  105.     var $children = array();
  106.  
  107.     /**
  108.     * Pointer to OLE container
  109.     * @var OLE
  110.     */
  111.     var $ole;
  112.  
  113.     /**
  114.     * The constructor
  115.     *
  116.     * @access public
  117.     * @param integer $No   The PPS index
  118.     * @param string  $name The PPS name
  119.     * @param integer $type The PPS type. Dir, Root or File
  120.     * @param integer $prev The index of the previous PPS
  121.     * @param integer $next The index of the next PPS
  122.     * @param integer $dir  The index of it's first child if this is a Dir or Root PPS
  123.     * @param integer $time_1st A timestamp
  124.     * @param integer $time_2nd A timestamp
  125.     * @param string  $data  The (usually binary) source data of the PPS
  126.     * @param array   $children Array containing children PPS for this PPS
  127.     */
  128.     function OLE_PPS($No, $name, $type, $prev, $next, $dir, $time_1st, $time_2nd, $data, $children)
  129.     {
  130.         $this->No      = $No;
  131.         $this->Name    = $name;
  132.         $this->Type    = $type;
  133.         $this->PrevPps = $prev;
  134.         $this->NextPps = $next;
  135.         $this->DirPps  = $dir;
  136.         $this->Time1st = $time_1st;
  137.         $this->Time2nd = $time_2nd;
  138.         $this->_data      = $data;
  139.         $this->children   = $children;
  140.         if ($data != '') {
  141.             $this->Size = strlen($data);
  142.         } else {
  143.             $this->Size = 0;
  144.         }
  145.     }
  146.  
  147.     /**
  148.     * Returns the amount of data saved for this PPS
  149.     *
  150.     * @access private
  151.     * @return integer The amount of data (in bytes)
  152.     */
  153.     function _DataLen()
  154.     {
  155.         if (!isset($this->_data)) {
  156.             return 0;
  157.         }
  158.         if (isset($this->_PPS_FILE)) {
  159.             fseek($this->_PPS_FILE, 0);
  160.             $stats = fstat($this->_PPS_FILE);
  161.             return $stats[7];
  162.         } else {
  163.             return strlen($this->_data);
  164.         }
  165.     }
  166.  
  167.     /**
  168.     * Returns a string with the PPS's WK (What is a WK?)
  169.     *
  170.     * @access private
  171.     * @return string The binary string
  172.     */
  173.     function _getPpsWk()
  174.     {
  175.         $ret = $this->Name;
  176.         for ($i = 0; $i < (64 - strlen($this->Name)); $i++) {
  177.             $ret .= "\x00";
  178.         }
  179.         $ret .= pack("v", strlen($this->Name) + 2)  // 66
  180.               . pack("c", $this->Type)              // 67
  181.               . pack("c", 0x00) //UK                // 68
  182.               . pack("V", $this->PrevPps) //Prev    // 72
  183.               . pack("V", $this->NextPps) //Next    // 76
  184.               . pack("V", $this->DirPps)  //Dir     // 80
  185.               . "\x00\x09\x02\x00"                  // 84
  186.               . "\x00\x00\x00\x00"                  // 88
  187.               . "\xc0\x00\x00\x00"                  // 92
  188.               . "\x00\x00\x00\x46"                  // 96 // Seems to be ok only for Root
  189.               . "\x00\x00\x00\x00"                  // 100
  190.               . OLE::LocalDate2OLE($this->Time1st)       // 108
  191.               . OLE::LocalDate2OLE($this->Time2nd)       // 116
  192.               . pack("V", isset($this->_StartBlock)? 
  193.                         $this->_StartBlock:0)        // 120
  194.               . pack("V", $this->Size)               // 124
  195.               . pack("V", 0);                        // 128
  196.         return $ret;
  197.     }
  198.  
  199.     /**
  200.     * Updates index and pointers to previous, next and children PPS's for this
  201.     * PPS. I don't think it'll work with Dir PPS's.
  202.     *
  203.     * @access private
  204.     * @param array &$pps_array Reference to the array of PPS's for the whole OLE
  205.     *                          container 
  206.     * @return integer          The index for this PPS
  207.     */
  208.     function _savePpsSetPnt(&$pps_array) 
  209.     {
  210.         $pps_array[count($pps_array)] = &$this;
  211.         $this->No = count($pps_array) - 1;
  212.         $this->PrevPps = 0xFFFFFFFF;
  213.         $this->NextPps = 0xFFFFFFFF;
  214.         if (count($this->children) > 0) {
  215.             $this->DirPps = $this->children[0]->_savePpsSetPnt($pps_array);
  216.         } else {
  217.             $this->DirPps = 0xFFFFFFFF;
  218.         }
  219.         return $this->No;
  220.     }
  221. }
  222. ?>
  223.