Code

Updated smarty to 1.0.9
[gosa.git] / gosa-core / include / smarty / sysplugins / smarty_internal_write_file.php
index aae600ee11bc5f64c75bcfbf2d6a0769c699b6e4..4e34335fbebec92d371bb765c81d8df86b95e474 100644 (file)
@@ -1,70 +1,56 @@
 <?php
+
 /**
  * Smarty write file plugin
- *
+ * 
  * @package Smarty
  * @subpackage PluginsInternal
- * @author Monte Ohrt
+ * @author Monte Ohrt 
  */
 
 /**
  * Smarty Internal Write File Class
- *
- * @package Smarty
- * @subpackage PluginsInternal
  */
 class Smarty_Internal_Write_File {
-
     /**
-     * Writes file in a safe way to disk
-     *
+     * Writes file in a save way to disk
+     * 
      * @param string $_filepath complete filepath
      * @param string $_contents file content
-     * @param Smarty $smarty    smarty instance
      * @return boolean true
      */
-    public static function writeFile($_filepath, $_contents, Smarty $smarty)
+    public static function writeFile($_filepath, $_contents, $smarty)
     {
-        $_error_reporting = error_reporting();
-        error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
-        if ($smarty->_file_perms !== null) {
-            $old_umask = umask(0);
-        }
-
-        $_dirpath = dirname($_filepath);
+        $old_umask = umask(0);
+        $_dirpath = dirname($_filepath); 
         // if subdirs, create dir structure
         if ($_dirpath !== '.' && !file_exists($_dirpath)) {
-            mkdir($_dirpath, $smarty->_dir_perms === null ? 0777 : $smarty->_dir_perms, true);
-        }
-
+            mkdir($_dirpath, $smarty->_dir_perms, true);
+        } 
         // write to tmp file, then move to overt file lock race condition
-        $_tmp_file = $_dirpath . DS . uniqid('wrt');
-        if (!file_put_contents($_tmp_file, $_contents)) {
-            error_reporting($_error_reporting);
+        $_tmp_file = tempnam($_dirpath, 'wrt');
+
+           if (!($fd = @fopen($_tmp_file, 'wb'))) {
+               $_tmp_file = $_dirpath . DS . uniqid('wrt');
+               if (!($fd = @fopen($_tmp_file, 'wb'))) {
             throw new SmartyException("unable to write file {$_tmp_file}");
             return false;
-        }
+               }
+                }
 
-        // remove original file
-        unlink($_filepath);
+       fwrite($fd, $_contents);
+       fclose($fd);
 
+        // remove original file
+        if (file_exists($_filepath))
+            @unlink($_filepath); 
         // rename tmp file
-        $success = rename($_tmp_file, $_filepath);
-        if (!$success) {
-            error_reporting($_error_reporting);
-            throw new SmartyException("unable to write file {$_filepath}");
-            return false;
-        }
-
-        if ($smarty->_file_perms !== null) {
-            // set file permissions
-            chmod($_filepath, $smarty->_file_perms);
-            umask($old_umask);
-        }
-        error_reporting($_error_reporting);
+        rename($_tmp_file, $_filepath); 
+        // set file permissions
+        chmod($_filepath, $smarty->_file_perms);
+        umask($old_umask);
         return true;
-    }
-
-}
+    } 
+} 
 
 ?>
\ No newline at end of file