function install($plugin_version, &$errors = array()) { global $conf; if (empty($conf['flickr2piwigo'])) { conf_update_param('flickr2piwigo', $this->default_conf, true); } mkgetdir(PHPWG_ROOT_PATH . $conf['data_location'] . 'flickr_cache/', MKGETDIR_DEFAULT & ~MKGETDIR_DIE_ON_ERROR); }
function ilog() { global $conf; if (!$conf['enable_i_log']) { return; } $line = date("c"); foreach (func_get_args() as $arg) { $line .= ' '; if (is_array($arg)) { $line .= implode(' ', $arg); } else { $line .= $arg; } } $file = PHPWG_ROOT_PATH . $conf['data_location'] . 'tmp/i.log'; if (false == file_put_contents($file, $line . "\n", FILE_APPEND)) { mkgetdir(dirname($file)); } }
function set($key, $value, $lifetime = null) { if ($lifetime === null) { $lifetime = $this->default_lifetime; } if (rand() % 97 == 0) { $this->purge(false); } $serialized = serialize(array('expire' => time() + $lifetime, 'data' => $value)); if (false === @file_put_contents($this->dir . $key . '.cache', $serialized)) { mkgetdir($this->dir, MKGETDIR_DEFAULT & ~MKGETDIR_DIE_ON_ERROR); if (false === @file_put_contents($this->dir . $key . '.cache', $serialized)) { return false; } } return true; }
} } catch (Exception $e) { $logger->error($e->getMessage(), 'i.php'); } } else { $page['rotation_angle'] = 0; } pwg_db_close(); if (!try_switch_source($params, $src_mtime) && $params->type == IMG_CUSTOM) { $sharpen = 0; foreach (ImageStdParams::get_defined_type_map() as $std_params) { $sharpen += $std_params->sharpen; } $params->sharpen = round($sharpen / count(ImageStdParams::get_defined_type_map())); } if (!mkgetdir(dirname($page['derivative_path']))) { ierror("dir create error", 500); } ignore_user_abort(true); @set_time_limit(0); $image = new pwg_image($page['src_path']); $timing['load'] = time_step($step); $changes = 0; // rotate if (0 != $page['rotation_angle']) { $image->rotate($page['rotation_angle']); $changes++; $timing['rotate'] = time_step($step); } // Crop & scale $o_size = $d_size = array($image->get_width(), $image->get_height());
$user_upload_conf['uploadable_categories'] = array(); while ($row = pwg_db_fetch_assoc($result)) { array_push($user_upload_conf['uploadable_categories'], $row['id']); } // save configuration for a future use by the Community plugin $backup_filepath = PHPWG_ROOT_PATH . $conf['data_location'] . 'plugins/core_user_upload_to_community.php'; $save_conf = true; if (is_dir(dirname($backup_filepath))) { if (!is_writable(dirname($backup_filepath))) { $save_conf = false; } } elseif (!is_writable(PHPWG_ROOT_PATH . $conf['data_location'])) { $save_conf = false; } if ($save_conf) { mkgetdir(dirname($backup_filepath)); file_put_contents($backup_filepath, '<?php $user_upload_conf = \'' . serialize($user_upload_conf) . '\'; ?>'); } // // remove all what is related to user upload in the database // // categories.uploadable pwg_query('ALTER TABLE ' . CATEGORIES_TABLE . ' DROP COLUMN uploadable;'); // waiting pwg_query('DROP TABLE ' . PREFIX_TABLE . 'waiting;'); // config parameter settings : upload_user_access, upload_link_everytime $query = ' DELETE FROM ' . PREFIX_TABLE . 'config WHERE param IN (\'upload_user_access\', \'upload_link_everytime\', \'email_admin_on_picture_uploaded\') ;'; pwg_query($query);
/** * Saves a copy of the mail if _data/tmp. * * @param boolean $success * @param PHPMailer $mail * @param array $args */ function pwg_send_mail_test($success, $mail, $args) { global $conf, $user, $lang_info; $dir = PHPWG_ROOT_PATH . $conf['data_location'] . 'tmp'; if (mkgetdir($dir, MKGETDIR_DEFAULT & ~MKGETDIR_DIE_ON_ERROR)) { $filename = $dir . '/mail.' . stripslashes($user['username']) . '.' . $lang_info['code'] . '-' . date('YmdHis') . ($success ? '' : '.ERROR'); if ($args['content_format'] == 'text/plain') { $filename .= '.txt'; } else { $filename .= '.html'; } $file = fopen($filename, 'w+'); if (!$success) { fwrite($file, "ERROR: " . $mail->ErrorInfo . "\n\n"); } fwrite($file, $mail->getSentMIMEMessage()); fclose($file); } }
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | // | USA. | // +-----------------------------------------------------------------------+ if (!defined("PHPWG_ROOT_PATH")) { die("Hacking attempt!"); } $errors = array(); $pwatermark = $_POST['w']; // step 0 - manage upload if any if (isset($_FILES['watermarkImage']) and !empty($_FILES['watermarkImage']['tmp_name'])) { list($width, $height, $type) = getimagesize($_FILES['watermarkImage']['tmp_name']); if (IMAGETYPE_PNG != $type) { $errors['watermarkImage'] = sprintf(l10n('Allowed file types: %s.'), 'PNG'); } else { $upload_dir = PHPWG_ROOT_PATH . PWG_LOCAL_DIR . 'watermarks'; if (mkgetdir($upload_dir, MKGETDIR_DEFAULT & ~MKGETDIR_DIE_ON_ERROR)) { $new_name = get_filename_wo_extension($_FILES['watermarkImage']['name']) . '.png'; $file_path = $upload_dir . '/' . $new_name; if (move_uploaded_file($_FILES['watermarkImage']['tmp_name'], $file_path)) { $pwatermark['file'] = substr($file_path, strlen(PHPWG_ROOT_PATH)); } else { $page['errors'][] = $errors['watermarkImage'] = "{$file_path} " . l10n('no write access'); } } else { $page['errors'][] = $errors['watermarkImage'] = sprintf(l10n('Add write access to the "%s" directory'), $upload_dir); } } } // step 1 - sanitize HTML input switch ($pwatermark['position']) { case 'topleft':
/** * Process a set of pending files. * * @param array &$result * @param array &$pending * @param string[] $key * @param bool $force */ private function flush_pending(&$result, &$pending, $key, $force) { if (count($pending) > 1) { $key = join('>', $key); $file = PWG_COMBINED_DIR . base_convert(crc32($key), 10, 36) . '.' . $this->type; if ($force || !file_exists(PHPWG_ROOT_PATH . $file)) { $output = ''; $header = ''; foreach ($pending as $combinable) { $output .= "/*BEGIN {$combinable->path} */\n"; $output .= $this->process_combinable($combinable, true, $force, $header); $output .= "\n"; } $output = "/*BEGIN header */\n" . $header . "\n" . $output; mkgetdir(dirname(PHPWG_ROOT_PATH . $file)); file_put_contents(PHPWG_ROOT_PATH . $file, $output); @chmod(PHPWG_ROOT_PATH . $file, 0644); } $result[] = new Combinable("combi", $file, false); } elseif (count($pending) == 1) { $header = ''; $this->process_combinable($pending[0], false, $force, $header); $result[] = $pending[0]; } $key = array(); $pending = array(); }
/** * Open the log file if not already oppenned */ private function open() { if ($this->status() == self::STATUS_LOG_CLOSED) { if (!file_exists($this->options['directory'])) { mkgetdir($this->options['directory'], MKGETDIR_DEFAULT | MKGETDIR_PROTECT_HTACCESS); } if (file_exists($this->options['filePath']) && !is_writable($this->options['filePath'])) { $this->_logStatus = self::STATUS_OPEN_FAILED; throw new RuntimeException(self::$_messages['writefail']); return; } if (($this->_fileHandle = fopen($this->options['filePath'], 'a')) != false) { $this->_logStatus = self::STATUS_LOG_OPEN; } else { $this->_logStatus = self::STATUS_OPEN_FAILED; throw new RuntimeException(self::$_messages['openfail']); } } }
/** * Recursively delete a directory. * * @param string $path * @param string $trash_path, try to move the directory to this path if it cannot be delete */ function deltree($path, $trash_path = null) { if (is_dir($path)) { $fh = opendir($path); while ($file = readdir($fh)) { if ($file != '.' and $file != '..') { $pathfile = $path . '/' . $file; if (is_dir($pathfile)) { deltree($pathfile, $trash_path); } else { @unlink($pathfile); } } } closedir($fh); if (@rmdir($path)) { return true; } elseif (!empty($trash_path)) { if (!is_dir($trash_path)) { @mkgetdir($trash_path, MKGETDIR_RECURSIVE | MKGETDIR_DIE_ON_ERROR | MKGETDIR_PROTECT_HTACCESS); } while ($r = $trash_path . '/' . md5(uniqid(rand(), true))) { if (!is_dir($r)) { @rename($path, $r); break; } } } else { return false; } } }
static function upgrade_to($upgrade_to, &$step, $check_current_version = true) { global $page, $conf, $template; if ($check_current_version and !version_compare($upgrade_to, PHPWG_VERSION, '>')) { redirect(get_root_url() . 'admin.php?page=plugin-' . basename(dirname(__FILE__))); } if ($step == 2) { preg_match('/(\\d+\\.\\d+)\\.(\\d+)/', PHPWG_VERSION, $matches); $code = $matches[1] . '.x_to_' . $upgrade_to; $dl_code = str_replace(array('.', '_'), '', $code); $remove_path = $code; $obsolete_list = 'obsolete.list'; } else { $code = $upgrade_to; $dl_code = $code; $remove_path = version_compare($code, '2.0.8', '>=') ? 'piwigo' : 'piwigo-' . $code; $obsolete_list = PHPWG_ROOT_PATH . 'install/obsolete.list'; } if (empty($page['errors'])) { $path = PHPWG_ROOT_PATH . $conf['data_location'] . 'update'; $filename = $path . '/' . $code . '.zip'; @mkgetdir($path); $chunk_num = 0; $end = false; $zip = @fopen($filename, 'w'); while (!$end) { $chunk_num++; if (@fetchRemote(PHPWG_URL . '/download/dlcounter.php?code=' . $dl_code . '&chunk_num=' . $chunk_num, $result) and $input = @unserialize($result)) { if (0 == $input['remaining']) { $end = true; } @fwrite($zip, base64_decode($input['data'])); } else { $end = true; } } @fclose($zip); if (@filesize($filename)) { $zip = new PclZip($filename); if ($result = $zip->extract(PCLZIP_OPT_PATH, PHPWG_ROOT_PATH, PCLZIP_OPT_REMOVE_PATH, $remove_path, PCLZIP_OPT_SET_CHMOD, 0755, PCLZIP_OPT_REPLACE_NEWER)) { //Check if all files were extracted $error = ''; foreach ($result as $extract) { if (!in_array($extract['status'], array('ok', 'filtered', 'already_a_directory'))) { // Try to change chmod and extract if (@chmod(PHPWG_ROOT_PATH . $extract['filename'], 0777) and $res = $zip->extract(PCLZIP_OPT_BY_NAME, $remove_path . '/' . $extract['filename'], PCLZIP_OPT_PATH, PHPWG_ROOT_PATH, PCLZIP_OPT_REMOVE_PATH, $remove_path, PCLZIP_OPT_SET_CHMOD, 0755, PCLZIP_OPT_REPLACE_NEWER) and isset($res[0]['status']) and $res[0]['status'] == 'ok') { continue; } else { $error .= $extract['filename'] . ': ' . $extract['status'] . "\n"; } } } if (empty($error)) { self::process_obsolete_list($obsolete_list); deltree(PHPWG_ROOT_PATH . $conf['data_location'] . 'update'); invalidate_user_cache(true); $template->delete_compiled_templates(); unset($_SESSION['need_update']); if ($step == 2) { $page['infos'][] = l10n('Update Complete'); $page['infos'][] = $upgrade_to; $step = -1; } else { redirect(PHPWG_ROOT_PATH . 'upgrade.php?now='); } } else { file_put_contents(PHPWG_ROOT_PATH . $conf['data_location'] . 'update/log_error.txt', $error); $page['errors'][] = l10n('An error has occured during extract. Please check files permissions of your piwigo installation.<br><a href="%s">Click here to show log error</a>.', get_root_url() . $conf['data_location'] . 'update/log_error.txt'); } } else { deltree(PHPWG_ROOT_PATH . $conf['data_location'] . 'update'); $page['errors'][] = l10n('An error has occured during upgrade.'); } } else { $page['errors'][] = l10n('Piwigo cannot retrieve upgrade file from server'); } } }
/** * API method * Adds a image (simple way) * @param mixed[] $params * @option int[] category * @option string name (optional) * @option string author (optional) * @option string comment (optional) * @option int level * @option string|string[] tags * @option int image_id (optional) */ function ws_images_upload($params, $service) { global $conf; if (get_pwg_token() != $params['pwg_token']) { return new PwgError(403, 'Invalid security token'); } // usleep(100000); // if (!isset($_FILES['image'])) // { // return new PwgError(405, 'The image (file) is missing'); // } // file_put_contents('/tmp/plupload.log', "[".date('c')."] ".__FUNCTION__."\n\n", FILE_APPEND); // file_put_contents('/tmp/plupload.log', '$_FILES = '.var_export($_FILES, true)."\n", FILE_APPEND); // file_put_contents('/tmp/plupload.log', '$_POST = '.var_export($_POST, true)."\n", FILE_APPEND); $upload_dir = $conf['upload_dir'] . '/buffer'; // create the upload directory tree if not exists if (!mkgetdir($upload_dir, MKGETDIR_DEFAULT & ~MKGETDIR_DIE_ON_ERROR)) { return new PwgError(500, 'error during buffer directory creation'); } // Get a file name if (isset($_REQUEST["name"])) { $fileName = $_REQUEST["name"]; } elseif (!empty($_FILES)) { $fileName = $_FILES["file"]["name"]; } else { $fileName = uniqid("file_"); } $filePath = $upload_dir . DIRECTORY_SEPARATOR . $fileName; // Chunking might be enabled $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; // file_put_contents('/tmp/plupload.log', "[".date('c')."] ".__FUNCTION__.', '.$fileName.' '.($chunk+1).'/'.$chunks."\n", FILE_APPEND); // Open temp file if (!($out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } if (!empty($_FILES)) { if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) { die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); } // Read binary input stream and append it to temp file if (!($in = @fopen($_FILES["file"]["tmp_name"], "rb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } } else { if (!($in = @fopen("php://input", "rb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } } while ($buff = fread($in, 4096)) { fwrite($out, $buff); } @fclose($out); @fclose($in); // Check if file has been uploaded if (!$chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename("{$filePath}.part", $filePath); include_once PHPWG_ROOT_PATH . 'admin/include/functions_upload.inc.php'; $image_id = add_uploaded_file($filePath, stripslashes($params['name']), $params['category'], $params['level'], null); $query = ' SELECT id, name, representative_ext, path FROM ' . IMAGES_TABLE . ' WHERE id = ' . $image_id . ' ;'; $image_infos = pwg_db_fetch_assoc(pwg_query($query)); $query = ' SELECT COUNT(*) AS nb_photos FROM ' . IMAGE_CATEGORY_TABLE . ' WHERE category_id = ' . $params['category'][0] . ' ;'; $category_infos = pwg_db_fetch_assoc(pwg_query($query)); $category_name = get_cat_display_name_from_id($params['category'][0], null); return array('image_id' => $image_id, 'src' => DerivativeImage::thumb_url($image_infos), 'name' => $image_infos['name'], 'category' => array('id' => $params['category'][0], 'nb_photos' => $category_infos['nb_photos'], 'label' => $category_name)); } }
// update the last check from time to time to avoid deletion by maintenance tasks if (!isset($feed_row['last_check']) or time() - datetime_to_ts($feed_row['last_check']) > 30 * 24 * 3600) { $query = ' UPDATE ' . USER_FEED_TABLE . ' SET last_check = ' . pwg_db_get_recent_period_expression(-15, $dbnow) . ' WHERE id = \'' . $feed_id . '\' ;'; pwg_query($query); } } $dates = get_recent_post_dates_array($conf['recent_post_dates']['RSS']); foreach ($dates as $date_detail) { // for each recent post date we create a feed item $item = new FeedItem(); $date = $date_detail['date_available']; $item->title = get_title_recent_post_date($date_detail); $item->link = make_index_url(array('chronology_field' => 'posted', 'chronology_style' => 'monthly', 'chronology_view' => 'calendar', 'chronology_date' => explode('-', substr($date, 0, 10)))); $item->description .= '<a href="' . make_index_url() . '">' . $conf['gallery_title'] . '</a><br> '; $item->description .= get_html_description_recent_post_date($date_detail); $item->descriptionHtmlSyndicated = true; $item->date = ts_to_iso8601(datetime_to_ts($date)); $item->author = $conf['rss_feed_author']; $item->guid = sprintf('%s', 'pics-' . $date); $rss->addItem($item); } $fileName = PHPWG_ROOT_PATH . $conf['data_location'] . 'tmp'; mkgetdir($fileName); // just in case $fileName .= '/feed.xml'; // send XML feed echo $rss->saveFeed('RSS2.0', $fileName, true);