Show
Ignore:
Timestamp:
03/09/08 16:02:40 (5 years ago)
Author:
Seldaek
Message:

* Set: Fix for ini files containing weird CR/LF sequences

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/Phergie/Plugin/Set.php

    r142 r150  
    1616    public function onDoSet($var, $value, $tmp = null) 
    1717    { 
    18           if ($this->fromAdmin(false)) { 
     18        if ($this->fromAdmin(false)) { 
    1919            $append = $var === '-a' || $var === 'append'; 
    2020            // Got an append parameter, so we shift value/tmp down to var/value 
     
    2626            } 
    2727 
    28             // Get ini file 
    29             $ini = PHERGIE_DIR . 'Phergie/' . (empty($_SERVER['argv'][1]) ? PHERGIE_INI : $_SERVER['argv'][1]); 
    30             $contents = file_get_contents($ini); 
    31             // Replace var/value 
    32             if (preg_match('#^\s*('.str_replace('.', '\\.', $var).'\s*=\s*)(.*)$#im', $contents, $m)) { 
    33                 $contents = preg_replace('#^\s*'.str_replace('.', '\\.', $var).'\s*=.*$#im', $var.' = '.$this->makeIniValue($value, $m[2], $append), $contents); 
    34                 $this->setIni($var, $this->parseIniValue($this->makeIniValue($value, $m[2], $append))); 
    35             // Insert it if not set 
    36             } else { 
    37                 $contents .= "\r\n".$var.' = '.$this->makeIniValue($value); 
    38                 $this->setIni($var, $this->parseIniValue($value)); 
    39             } 
    40  
    41             // Save ini file 
    42             file_put_contents($ini, $contents); 
     28                // Get ini file 
     29                $ini = PHERGIE_DIR . 'Phergie/' . (empty($_SERVER['argv'][1]) ? PHERGIE_INI : $_SERVER['argv'][1]); 
     30                $contents = preg_replace("#\r\n|\r|\n#", "\r\n", file_get_contents($ini)); 
     31                // Replace var/value 
     32                if (preg_match('#^('.str_replace('.', '\\.', $var).'\s*= *)(.*)$#im', $contents, $m)) { 
     33                        $contents = preg_replace('#^'.str_replace('.', '\\.', $var).'\s*=.*$#im', $var.' = '.str_replace('$', '\\$', $this->makeIniValue($value, $m[2], $append)), $contents); 
     34                        $this->setIni($var, $this->parseIniValue($this->makeIniValue($value, $m[2], $append))); 
     35                        // Insert it if not set 
     36                } else { 
     37                        $contents .= "\r\n".$var.' = '.$this->makeIniValue($value); 
     38                        $this->setIni($var, $this->parseIniValue($value)); 
     39                } 
     40                // Save ini file 
     41                file_put_contents($ini, $contents); 
    4342        } 
    4443    } 
    4544 
     45        /** 
     46         * Returns a ini setting 
     47         */ 
    4648        public function onDoGet($var) 
    4749        { 
    48       if ($this->fromAdmin(false)) { 
    49                       $val = $this->getIni($var); 
    50                       $this->doPrivmsg($this->event->getSource(), $var.' = '.($val===null?'null':$val)); 
    51                   } 
     50                if ($this->fromAdmin(false)) { 
     51                        $this->doPrivmsg($this->event->getSource(), $var.' = '.$this->getIni($var)); 
     52                } 
    5253        } 
    5354 
     
    5758    protected function makeIniValue($new, $old = "", $append = false) 
    5859    { 
    59         $new = trim($new, '" '); 
    60         $old = trim($old, '" '); 
     60        $new = trim($new, "\" '"); 
     61        $old = trim($old, "\" \n\r"); 
    6162                if ($append && !empty($old)) { 
    6263                        return '"'.$old.', '.$new.'"'; 
     
    7778    } 
    7879 
     80        /** 
     81         * Reads a ini value similarly to parse_ini_file() 
     82         */ 
    7983    protected function parseIniValue($value) 
    8084    {