System_Folders
[ class tree: System_Folders ] [ index: System_Folders ] [ all elements ]

Source for file Cached.php

Documentation is available at Cached.php

  1. <?php
  2. /**
  3. * Provides a cached version of System_Folders.
  4. * It also has methods to read folder settings from an ini file.
  5. *
  6. * Simpe example:
  7. *     require_once 'System/Folders/Cached.php';
  8. *     $sf = new System_Folders_Cached();
  9. *
  10. *     //load the stored settings from last time
  11. *     $sf->loadFromFile();
  12. *     echo $sf->getHome();
  13. *
  14. *     //Set an own documents directory
  15. *     $sf->setDocuments('/home/cweiske/MyDocuments/');
  16. *     //Save the settings for next time
  17. *     $sf->saveToFile();
  18. *
  19. * PHP version 4
  20. *
  21. @category System
  22. @package  System_Folders
  23. @author   Christian Weiske <cweiske@php.net>
  24. @license  http://www.gnu.org/copyleft/lesser.html LGPL
  25. @version  CVS: $Id$
  26. @link     http://pear.php.net/package/System_Folders
  27. */
  28.  
  29. require_once 'System/Folders.php';
  30. require_once 'Config.php';
  31. require_once 'Config/Container.php';
  32.  
  33. /**
  34. * Provides a cached version of System_Folders.
  35. * It also has methods to read folder settings from an ini file.
  36. *
  37. * Be very careful when overriding the AppData setting with
  38. *  setAppData()! When loading a config file without specifying the file
  39. *  name, the default app data directory will be used. After loading,
  40. *  the file will be saved to the new app data directory, thus it won't
  41. *  be available the next time, as the app data folder is the old one again.
  42. *
  43. @category System
  44. @package  System_Folders
  45. @author   Christian Weiske <cweiske@php.net>
  46. @license  http://www.gnu.org/copyleft/lesser.html LGPL
  47. @link     http://pear.php.net/package/System_Folders
  48. */
  49. {
  50.     /**
  51.     * The cached paths will be hold here.
  52.     *
  53.     * @access protected
  54.     * @var    array 
  55.     */
  56.     var $arCache = array();
  57.  
  58.     /**
  59.     * The settings that are available.
  60.     *
  61.     * @access protected
  62.     * @var    array 
  63.     */
  64.     var $arSettings = array(
  65.         'AllUsers''AppData''Desktop''Documents''Home',
  66.         'Programs''Temp''SharedDocuments''Windows'
  67.     );
  68.  
  69.  
  70.  
  71.     /**
  72.      * Create a new instance
  73.      */
  74.     function System_Folders_Cached()
  75.     {
  76.         parent::System_Folders();
  77.     }//function System_Folders_Cached()
  78.  
  79.  
  80.  
  81.     /**
  82.     * Loads the directories from an ini file.
  83.     * If you don't specify the config file, it will be determined
  84.     *  automatically.
  85.     *
  86.     * @param string $strFile The file to load the data from (ini file)
  87.     *
  88.     * @return mixed True on success, PEAR_Error on failure
  89.     *
  90.     * @access public
  91.     */
  92.     function loadFromFile($strFile = null)
  93.     {
  94.         $strFile $this->getDefaultConfigFile();
  95.         if (!file_exists($strFile)) {
  96.             //Not existing config file isn't an error
  97.             return true;
  98.         }
  99.         $conf = new Config();
  100.         $root =$conf->parseConfig($strFile'inifile');
  101.  
  102.         if (PEAR::isError($root)) {
  103.             return $root;
  104.         }
  105.  
  106.         $arSettings $root->toArray();
  107.         if (!isset($arSettings['root']['paths'])) {
  108.             return true;
  109.         }
  110.  
  111.         foreach ($arSettings['root']['paths'as $strId => $strValue{
  112.             if ($strValue != ''{
  113.                 $this->arCache[$strId$strValue;
  114.             }
  115.         }
  116.  
  117.         return true;
  118.     }//function loadFromFile($strFile = null)
  119.  
  120.  
  121.  
  122.     /**
  123.     * Saves the folders into a config file that can be edited by hand.
  124.     * If you don't specify the config file, it will be determined
  125.     *  automatically.
  126.     * Values that are NULL won't be saved.
  127.     *
  128.     * @param string  $strFile          The file to save the data into
  129.     *                                   (ini file)
  130.     * @param boolean $bSaveAllSettings If all settings shall be saved
  131.     *                          that can be loaded, or only that settings,
  132.     *                          that have been retrieved by the user
  133.     *
  134.     * @return mixed True on success, PEAR_Error on failure
  135.     *
  136.     * @access public
  137.     */
  138.     function saveToFile($strFile = null$bSaveAllSettings = true)
  139.     {
  140.         $conf  =new Config_Container('section''paths');
  141.  
  142.         if ($bSaveAllSettings{
  143.             foreach ($this->arSettings as $strSetting{
  144.                 $strFunction 'get' $strSetting;
  145.                 $strValue $this->$strFunction();
  146.                 $conf->createDirective(strtolower($strSetting)$strValue);
  147.             }
  148.         else {
  149.             foreach ($this->arCache as $strId => $strValue{
  150.                 $conf->createDirective($strId$strValue);
  151.             }
  152.         }
  153.  
  154.         $config = new Config();
  155.         $config->setRoot($conf);
  156.         return $config->writeConfig($this->getDefaultConfigFile()'inifile');
  157.     }//function saveToFile($strFile = null, $bSaveAllSettings = true)
  158.  
  159.  
  160.  
  161.     /**
  162.     * Returns the path to the default config file.
  163.     * It the one that's used if no filename is passed to the
  164.     *  saveToFile/loadFromFile methods.
  165.     *
  166.     * @return string The filename
  167.     *
  168.     * @access public
  169.     */
  170.     function getDefaultConfigFile()
  171.     {
  172.         return $this->getAppData('/.net.php.pear.system.folders';
  173.     }//function getDefaultConfigFile()
  174.  
  175.  
  176.  
  177.     /**
  178.     * Returns a cached value.
  179.     * If the cache doesn't exist, the cached value is empty or null,
  180.     * the System_Folders method for the key is called to get the value.
  181.     *
  182.     * @param string $strKey The id of the value to get
  183.     *
  184.     * @return string The directory
  185.     *
  186.     * @access protected
  187.     */
  188.     function getCachedValue($strKey)
  189.     {
  190.         $strKeyLower strtolower($strKey);
  191.         if (!isset($this->arCache[$strKeyLower])) {
  192.             $strFunction 'get' $strKey;
  193.             $this->arCache[$strKeyLower= parent::$strFunction();
  194.         }
  195.  
  196.         return $this->arCache[$strKeyLower];
  197.     }//function getCachedValue($strKey)
  198.  
  199.  
  200.  
  201.     /**
  202.     * Sets the cache of the given key to the given value.
  203.     * Passing NULL removes the cache entry.
  204.     *
  205.     * @param string $strKey   Id of the value to get
  206.     * @param string $strValue Value to set.
  207.     *
  208.     * @return void 
  209.     *
  210.     * @access protected
  211.     */
  212.     function setCachedValue($strKey$strValue)
  213.     {
  214.         if ($strValue === null{
  215.             unset($this->arCache[strtolower($strKey)]);
  216.         else {
  217.             $this->arCache[strtolower($strKey)$strValue;
  218.         }
  219.     }//function setCachedValue($strKey, $strValue)
  220.  
  221.  
  222.  
  223.     /*
  224.     * Overriding the parent's methods to cache them
  225.     */
  226.  
  227.  
  228.  
  229.     /**
  230.     * Cached version of getAllUsers().
  231.     *
  232.     * @return string The all users directory
  233.     *
  234.     * @access public
  235.     *
  236.     * @see System_Folders::getAllUsers()
  237.     */
  238.     function getAllUsers()
  239.     {
  240.         return $this->getCachedValue('AllUsers');
  241.     }//function getAllUsers()
  242.  
  243.  
  244.  
  245.     /**
  246.     * Cached version of getAppData().
  247.     *
  248.     * @return string The application data directory
  249.     *
  250.     * @access public
  251.     *
  252.     * @see System_Folders::getAppData()
  253.     */
  254.     function getAppData()
  255.     {
  256.         return $this->getCachedValue('AppData');
  257.     }//function getAppData()
  258.  
  259.  
  260.  
  261.     /**
  262.     * Cached version of getDesktop().
  263.     *
  264.     * @return string The desktop directory
  265.     *
  266.     * @access public
  267.     *
  268.     * @see System_Folders::getDesktop()
  269.     */
  270.     function getDesktop()
  271.     {
  272.         return $this->getCachedValue('Desktop');
  273.     }//function getDesktop()
  274.  
  275.  
  276.  
  277.     /**
  278.     * Cached version of getDocuments().
  279.     *
  280.     * @return string The documents directory
  281.     *
  282.     * @access public
  283.     *
  284.     * @see System_Folders::getDocuments()
  285.     */
  286.     function getDocuments()
  287.     {
  288.         return $this->getCachedValue('Documents');
  289.     }//function getDocuments()
  290.  
  291.  
  292.  
  293.     /**
  294.     * Cached version of getHome().
  295.     *
  296.     * @return string The home directory
  297.     *
  298.     * @access public
  299.     *
  300.     * @see System_Folders::getHome()
  301.     */
  302.     function getHome()
  303.     {
  304.         return $this->getCachedValue('Home');
  305.     }//function getHome()
  306.  
  307.  
  308.  
  309.     /**
  310.     * Cached version of getPrograms().
  311.     *
  312.     * @return string The programs directory
  313.     *
  314.     * @access public
  315.     *
  316.     * @see System_Folders::getPrograms()
  317.     */
  318.     function getPrograms()
  319.     {
  320.         return $this->getCachedValue('Programs');
  321.     }//function getPrograms()
  322.  
  323.  
  324.  
  325.     /**
  326.     * Cached version of getTemp().
  327.     *
  328.     * @return string The temporary directory
  329.     *
  330.     * @access public
  331.     *
  332.     * @see System_Folders::getTemp()
  333.     */
  334.     function getTemp()
  335.     {
  336.         return $this->getCachedValue('Temp');
  337.     }//function getTemp()
  338.  
  339.  
  340.  
  341.     /**
  342.     * Cached version of getSharedDocuments().
  343.     *
  344.     * @return string The shared documents directory
  345.     *
  346.     * @access public
  347.     *
  348.     * @see System_Folders::getSharedDocuments()
  349.     */
  350.     function getSharedDocuments()
  351.     {
  352.         return $this->getCachedValue('SharedDocuments');
  353.     }//function getSharedDocuments()
  354.  
  355.  
  356.  
  357.     /**
  358.     * Cached version of getWindows().
  359.     *
  360.     * @return string The windows directory
  361.     *
  362.     * @access public
  363.     *
  364.     * @see System_Folders::getWindows()
  365.     */
  366.     function getWindows()
  367.     {
  368.         return $this->getCachedValue('Windows');
  369.     }//function getWindows()
  370.  
  371.  
  372.  
  373.     /*
  374.     * Setter methods
  375.     */
  376.  
  377.  
  378.  
  379.     /**
  380.     * Sets an own all users directory.
  381.     * Set it to NULL to deactivate saving and
  382.     *  remove the value from the cache.
  383.     *
  384.     * @param string $value The new all users directory
  385.     *
  386.     * @return void 
  387.     *
  388.     * @access public
  389.     * @see    getAllUsers()
  390.     */
  391.     function setAllUsers($value)
  392.     {
  393.         $this->setCachedValue('AllUsers'$value);
  394.     }//function setAllUsers($value)
  395.  
  396.  
  397.  
  398.     /**
  399.     * Sets an own application data directory.
  400.     * Set it to NULL to deactivate saving and
  401.     *  remove the value from the cache.
  402.     *
  403.     * @param string $value The new app data directory
  404.     *
  405.     * @return void 
  406.     *
  407.     * @access public
  408.     * @see    getAppData()
  409.     */
  410.     function setAppData($value)
  411.     {
  412.         $this->setCachedValue('AppData'$value);
  413.     }//function setAppData($value)
  414.  
  415.  
  416.  
  417.     /**
  418.     * Sets an own desktop directory.
  419.     * Set it to NULL to deactivate saving and
  420.     *  remove the value from the cache.
  421.     *
  422.     * @param string $value The new desktop directory
  423.     *
  424.     * @return void 
  425.     *
  426.     * @access public
  427.     * @see    getDesktop()
  428.     */
  429.     function setDesktop($value)
  430.     {
  431.         $this->setCachedValue('Desktop'$value);
  432.     }//function setDesktop($value)
  433.  
  434.  
  435.  
  436.     /**
  437.     * Sets an own documents directory.
  438.     * Set it to NULL to deactivate saving and
  439.     *  remove the value from the cache.
  440.     *
  441.     * @param string $value The new documents directory
  442.     *
  443.     * @return void 
  444.     *
  445.     * @access public
  446.     * @see    getDocuments()
  447.     */
  448.     function setDocuments($value)
  449.     {
  450.         $this->setCachedValue('Documents'$value);
  451.     }//function setDocuments($value)
  452.  
  453.  
  454.  
  455.     /**
  456.     * Sets an own home directory.
  457.     * Set it to NULL to deactivate saving and
  458.     *  remove the value from the cache.
  459.     *
  460.     * @param string $value The new home directory
  461.     *
  462.     * @return void 
  463.     *
  464.     * @access public
  465.     * @see    getHome()
  466.     */
  467.     function setHome($value)
  468.     {
  469.         $this->setCachedValue('Home'$value);
  470.     }//function setHome($value)
  471.  
  472.  
  473.  
  474.     /**
  475.     * Sets an own programs directory.
  476.     * Set it to NULL to deactivate saving and
  477.     *  remove the value from the cache.
  478.     *
  479.     * @param string $value The new programs directory
  480.     *
  481.     * @return void 
  482.     *
  483.     * @access public
  484.     * @see    getPrograms()
  485.     */
  486.     function setPrograms($value)
  487.     {
  488.         $this->setCachedValue('Programs'$value);
  489.     }//function setPrograms($value)
  490.  
  491.  
  492.  
  493.     /**
  494.     * Sets an own temp directory.
  495.     * Set it to NULL to deactivate saving and
  496.     *  remove the value from the cache.
  497.     *
  498.     * @param string $value The new temp directory
  499.     *
  500.     * @return void 
  501.     *
  502.     * @access public
  503.     * @see    getTemp()
  504.     */
  505.     function setTemp($value)
  506.     {
  507.         $this->setCachedValue('Temp'$value);
  508.     }//function setTemp($value)
  509.  
  510.  
  511.  
  512.     /**
  513.     * Sets an own shared documents directory.
  514.     * Set it to NULL to deactivate saving and
  515.     *  remove the value from the cache.
  516.     *
  517.     * @param string $value The new shared documents directory
  518.     *
  519.     * @return void 
  520.     *
  521.     * @access public
  522.     * @see    getSharedDocuments()
  523.     */
  524.     function setSharedDocuments($value)
  525.     {
  526.         $this->setCachedValue('SharedDocuments'$value);
  527.     }//function setSharedDocuments($value)
  528.  
  529.  
  530.  
  531.     /**
  532.     * Sets an own windows directory.
  533.     * Set it to NULL to deactivate saving and
  534.     *  remove the value from the cache.
  535.     *
  536.     * @param string $value The new windows directory
  537.     *
  538.     * @return void 
  539.     *
  540.     * @access public
  541.     * @see    getWindows()
  542.     */
  543.     function setWindows($value)
  544.     {
  545.         $this->setCachedValue('Windows'$value);
  546.     }//function setWindows($value)
  547.  
  548. }//class System_Folders_Cached extends System_Folders
  549. ?>

Documentation generated on Fri, 21 Dec 2012 15:30:02 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.