Example #1
0
 /**
  * Determine which class is needed to write to $context
  *
  * @param string $context
  */
 public static function get_filesystem_method($context)
 {
     while (!file_exists($context)) {
         $context = \common::DirName($context);
     }
     if (gp_is_writable($context)) {
         return 'gp_filesystem_direct';
     }
     if (function_exists('ftp_connect')) {
         return 'gp_filesystem_ftp';
     }
 }
Example #2
0
 static function get_filesystem_method($context = false)
 {
     global $dataDir;
     if ($context === false) {
         $context = $dataDir . '/include';
     }
     while (!file_exists($context)) {
         $context = common::DirName($context);
     }
     //direct
     if (gp_is_writable($context)) {
         if (!is_dir($context)) {
             return 'gp_filesystem_direct';
         }
         if (function_exists('posix_getuid') && function_exists('fileowner')) {
             $direct = false;
             //check more for directories
             $temp_file_name = $context . '/temp-write-test-' . time();
             $temp_handle = @fopen($temp_file_name, 'w');
             if ($temp_handle) {
                 if (posix_getuid() == @fileowner($temp_file_name)) {
                     $direct = true;
                 }
                 @fclose($temp_handle);
                 @unlink($temp_file_name);
             }
             if ($direct) {
                 return 'gp_filesystem_direct';
             }
         }
     }
     //ftp
     if (function_exists('ftp_connect')) {
         return 'gp_filesystem_ftp';
     }
     return false;
 }
Example #3
0
 /**
  * Check recursively to see if a directory exists, if it doesn't attempt to create it
  *
  * @param string $dir The directory path
  * @param bool $index Whether or not to add an index.hmtl file in the directory
  * @return bool True on success
  */
 public static function CheckDir($dir, $index = true)
 {
     global $config;
     if (!file_exists($dir)) {
         $parent = common::DirName($dir);
         gpFiles::CheckDir($parent, $index);
         //ftp mkdir
         if (isset($config['useftp'])) {
             if (!gpFiles::FTP_CheckDir($dir)) {
                 return false;
             }
         } else {
             if (!@mkdir($dir, gp_chmod_dir)) {
                 return false;
             }
             @chmod($dir, gp_chmod_dir);
             //some systems need more than just the 0755 in the mkdir() function
         }
         // make sure there's an index.html file
         // only check if we just created the directory, we don't want to keep creating an index.html file if a user deletes it
         if ($index && gp_dir_index) {
             $indexFile = $dir . '/index.html';
             if (!file_exists($indexFile)) {
                 //not using gpFiles::Save() so we can avoid infinite looping (it's safe since we already know the directory exists and we're not concerned about the content)
                 file_put_contents($indexFile, '<html></html>');
                 @chmod($indexFile, gp_chmod_file);
             }
         }
     }
     return true;
 }
Example #4
0
 /**
  * Find $archive_root by finding Addon.ini
  *
  */
 public function ArchiveRoot($archive)
 {
     $archive_files = $archive->ListFiles();
     $archive_root = null;
     foreach ($archive_files as $file) {
         if (strpos($file['name'], '/Addon.ini') === false) {
             continue;
         }
         $root = common::DirName($file['name']);
         if (is_null($archive_root) || strlen($root) < strlen($archive_root)) {
             $archive_root = $root;
         }
     }
     return $archive_root;
 }
Example #5
0
 /**
  * Return the folder path used for resized images of $img
  *
  */
 static function Folder($img)
 {
     global $dataDir;
     $name = basename($img);
     return $dataDir . '/data/_resized' . common::DirName($img) . '/' . gp_resized::EncodePath($name);
 }
Example #6
0
 /**
  * Find $archive_root by finding Addon.ini
  *
  */
 function ArchiveRoot($archive)
 {
     $archive_files = $archive->listContent();
     $archive_root = false;
     //find $archive_root by finding Addon.ini
     foreach ($archive_files as $file) {
         $filename =& $file['filename'];
         if (strpos($filename, '/Addon.ini') === false) {
             continue;
         }
         $root = common::DirName($filename);
         if (!$archive_root || strlen($root) < strlen($archive_root)) {
             $archive_root = $root;
         }
     }
     return $archive_root;
 }
Example #7
0
 /**
  * Create a resized image of the file at $src_relative
  *
  */
 static function CreateImage($src_relative, $width, $height)
 {
     global $dataDir;
     $src_path = $dataDir . '/data/_uploaded' . $src_relative;
     if (!file_exists($src_path)) {
         return false;
     }
     //compare to actual size
     includeFile('tool/Images.php');
     $src_img = thumbnail::getSrcImg($src_path);
     if (!$src_img) {
         return false;
     }
     //Original Size
     $actual_w = imagesx($src_img);
     $actual_h = imagesy($src_img);
     if ($actual_w <= $width && $actual_h <= $height) {
         return false;
     }
     $info = gp_resized::ImageInfo($src_relative, $width, $height);
     if (!$info) {
         return false;
     }
     $dest_index = $info['index'];
     if (!$dest_index) {
         $dest_index = gp_resized::NewIndex();
     }
     $dest_path = $dataDir . '/data/_resized/' . $dest_index . '/' . $info['name'];
     $exists_before = file_exists($dest_path);
     //make sure the folder exists
     if (!gpFiles::CheckDir(common::DirName($dest_path))) {
         return false;
     }
     //create new resized image
     if (!thumbnail::createImg($src_img, $dest_path, 0, 0, 0, 0, $width, $height, $actual_w, $actual_h)) {
         return false;
     }
     //not needed if the resized image is larger than the original
     if (filesize($dest_path) > filesize($src_path)) {
         if (!$exists_before) {
             unlink($dest_path);
         }
         return false;
     }
     $data['index'] = $dest_index;
     $data['w'] = $width;
     $data['h'] = $height;
     $data['img'] = $src_relative;
     return $data;
 }
Example #8
0
 /**
  * Display the contents of a past revision
  *
  */
 function ViewRevision()
 {
     global $langmessage;
     $time = $_REQUEST['time'];
     $full_path = $this->BackupFile($time);
     if (!$full_path) {
         return false;
     }
     $file_sections = $file_stats = array();
     //if it's a compressed file, we need an uncompressed version
     if (strpos($full_path, '.gze') !== false) {
         ob_start();
         readgzfile($full_path);
         $contents = ob_get_clean();
         $dir = common::DirName($full_path);
         $full_path = tempnam($dir, 'backup');
         gpFiles::Save($full_path, $contents);
         $file_sections = gpFiles::Get($full_path, 'file_sections');
         unlink($full_path);
     } else {
         $file_sections = gpFiles::Get($full_path, 'file_sections');
     }
     $this->contentBuffer = section_content::Render($file_sections, $this->title, gpFiles::$last_stats);
     $date = common::date($langmessage['strftime_datetime'], $time);
     $message = sprintf($langmessage['viewing_revision'], $date);
     $message .= ' <br/> ' . common::Link($this->title, $langmessage['Restore this revision'], 'cmd=use_revision&time=' . $time, array('data-cmd' => 'cnreq'));
     $message .= ' &nbsp; ' . common::Link($this->title, $langmessage['Revision History'], 'cmd=view_history', array('title' => $langmessage['Revision History'], 'data-cmd' => 'gpabox'));
     message($message);
 }
Example #9
0
 static function GetUrl($href = '', $query = '', $ampersands = true, $nonce_action = false)
 {
     global $linkPrefix, $config;
     $filtered = gpPlugin::Filter('GetUrl', array(array($href, $query)));
     if (is_array($filtered)) {
         list($href, $query) = $filtered;
     }
     $href = common::SpecialHref($href);
     //home page link
     if (isset($config['homepath']) && $href == $config['homepath']) {
         $href = $linkPrefix;
         if (!$_SERVER['gp_rewrite']) {
             $href = common::DirName($href);
         }
         $href = rtrim($href, '/') . '/';
     } else {
         $href = $linkPrefix . '/' . ltrim($href, '/');
     }
     $query = common::QueryEncode($query, $ampersands);
     if ($nonce_action) {
         $nonce = common::new_nonce($nonce_action);
         if (!empty($query)) {
             $query .= '&amp;';
             //in the cases where $ampersands is false, nonces are not used
         }
         $query .= '_gpnonce=' . $nonce;
     }
     if (!empty($query)) {
         $query = '?' . ltrim($query, '?');
     }
     return common::HrefEncode($href, $ampersands) . $query;
 }
Example #10
0
 /**
  * Create a thumbnail for the image at the path given by $original
  *
  */
 static function CreateThumbnail($original)
 {
     global $config, $dataDir;
     $prefix = $dataDir . '/data/_uploaded';
     $thumb_prefix = $dataDir . '/data/_uploaded/image/thumbnails';
     if (strpos($original, $thumb_prefix) !== false) {
         return;
     }
     if (strpos($original, $prefix) !== 0) {
         return;
     }
     $len = strlen($prefix);
     $thumb_path = substr($original, $len);
     $thumb_path = $thumb_prefix . $thumb_path;
     $thumb_dir = common::DirName($thumb_path);
     $thumb_path = $thumb_dir . '/' . basename($thumb_path) . '.jpg';
     gpFiles::CheckDir($thumb_dir);
     thumbnail::createSquare($original, $thumb_path, $config['maxthumbsize']);
 }
Example #11
0
 /**
  * Make sure the directory exists for a file
  *
  */
 public function CheckDir($file)
 {
     $dir = \common::DirName($file);
     if ($this->file_exists($dir)) {
         return true;
     }
     if (!$this->CheckDir($dir)) {
         return false;
     }
     return $this->mkdir($dir);
 }
Example #12
0
 /**
  * Display the contents of a past revision
  *
  */
 public function ViewRevision()
 {
     global $langmessage;
     $time = $_REQUEST['time'];
     $full_path = $this->BackupFile($time);
     if (is_null($full_path)) {
         return false;
     }
     //if it's a compressed file, we need an uncompressed version
     if (strpos($full_path, '.gze') !== false) {
         ob_start();
         readgzfile($full_path);
         $contents = ob_get_clean();
         $dir = common::DirName($full_path);
         $full_path = tempnam($dir, 'backup') . '.php';
         gpFiles::Save($full_path, $contents);
         $file_sections = gpFiles::Get($full_path, 'file_sections');
         unlink($full_path);
     } else {
         $file_sections = gpFiles::Get($full_path, 'file_sections');
     }
     $this->contentBuffer = section_content::Render($file_sections, $this->title, gpFiles::$last_stats);
     $date = common::date($langmessage['strftime_datetime'], $time);
     $message = sprintf($langmessage['viewing_revision'], $date);
     $message .= ' <span class="msg_buttons">';
     $message .= common::Link($this->title, $langmessage['Restore this revision'], 'cmd=UseRevision&time=' . $time, array('data-cmd' => 'cnreq'));
     $message .= common::Link($this->title, $langmessage['Revision History'], 'cmd=ViewHistory', array('data-cmd' => 'gpabox', 'class' => 'msg_view_history'));
     $message .= '</span>';
     msg($message);
 }