diff options
author | Bharat Mediratta <bharat@menalto.com> | 2011-05-06 11:48:13 -0700 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2011-05-06 11:48:13 -0700 |
commit | 80dda6f64fd26f373cc138a199652099accceb26 (patch) | |
tree | fef68945a8bb2706362ab686a45078a187fb2835 | |
parent | 5d09cbff048fc2f457c8b19adb2177a12445890a (diff) | |
parent | 46da011bf69bbc4e45757feda8f0d28e91e7fb6a (diff) |
Merge pull request #52 from chadparry/tempnam
Fixes #1732
-rw-r--r-- | modules/gallery/controllers/quick.php | 4 | ||||
-rw-r--r-- | modules/gallery/helpers/system.php | 21 | ||||
-rw-r--r-- | modules/gallery/tests/System_Helper_Test.php | 27 |
3 files changed, 50 insertions, 2 deletions
diff --git a/modules/gallery/controllers/quick.php b/modules/gallery/controllers/quick.php index da4768fd..b6576ec0 100644 --- a/modules/gallery/controllers/quick.php +++ b/modules/gallery/controllers/quick.php @@ -36,8 +36,8 @@ class Quick_Controller extends Controller { } if ($degrees) { - $tmpfile = tempnam(TMPPATH, "rotate") . "." . - pathinfo($item->file_path(), PATHINFO_EXTENSION); + $tmpfile = system::temp_filename("rotate", + pathinfo($item->file_path(), PATHINFO_EXTENSION)); gallery_graphics::rotate($item->file_path(), $tmpfile, array("degrees" => $degrees), $item); $item->set_data_file($tmpfile); $item->save(); diff --git a/modules/gallery/helpers/system.php b/modules/gallery/helpers/system.php index c39c7227..4110b4ed 100644 --- a/modules/gallery/helpers/system.php +++ b/modules/gallery/helpers/system.php @@ -40,4 +40,25 @@ class system_Core { } return null; } + + /** + * Create a file with a unique file name. + * This helper is similar to the built-in tempnam. + * It allows the caller to specify a prefix and an extension. + * It always places the file in TMPPATH. + */ + static function temp_filename($prefix="", $extension="") { + do { + $basename = tempnam(TMPPATH, $prefix); + if (!$basename) { + return false; + } + $filename = "$basename.$extension"; + $success = !file_exists($filename) && @rename($basename, $filename); + if (!$success) { + @unlink($basename); + } + } while (!$success); + return $filename; + } }
\ No newline at end of file diff --git a/modules/gallery/tests/System_Helper_Test.php b/modules/gallery/tests/System_Helper_Test.php new file mode 100644 index 00000000..3d56c516 --- /dev/null +++ b/modules/gallery/tests/System_Helper_Test.php @@ -0,0 +1,27 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2011 Chad Parry + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class System_Helper_Test extends Gallery_Unit_Test_Case { + public function temp_filename_test() { + $filename = system::temp_filename("file", "ext"); + $this->assert_true(file_exists($filename), "File not created"); + unlink($filename); + $this->assert_pattern($filename, "|/file.*\\.ext$|"); + } +} |