protected function _execute() { $this->_temp_path = $this->context->resolve_path_for_alias(Folder_name_system_temp, 'webcore-tests'); $this_url = new FILE_URL(__FILE__); $this_url->append_folder('data'); $this_url->append_folder('archives'); $this_url->replace_name_and_extension('oz_pics.zip'); $archive = new ARCHIVE($this_url->as_text()); $archive->for_each(new CALLBACK_METHOD('process_file', $this), new CALLBACK_METHOD('show_error', $this)); $zip = new ZIP_FILE($this_url->as_text()); $zip->open(); $zip->for_each(new CALLBACK_METHOD('process_file', $this), new CALLBACK_METHOD('show_error', $this)); $archive->extract_to($this->_temp_path, new CALLBACK_METHOD('show_error', $this)); }
protected function _process_for($name, $filename) { $this->_log("Processing [{$filename}] for [{$name}]", Msg_type_info); $this_url = new FILE_URL(__FILE__); $this_url->append_folder('data'); $this_url->append_folder('images'); $this_url->replace_name_and_extension($filename); if ($this->_use_internal_exif) { $image = new IMAGE(); } else { $image = new NON_INTERNAL_EXIF_IMAGE(); } $image->set_file($this_url->as_text(), true); if ($image->properties->time_created->is_valid()) { $this->_log('Extracted date/time: ' . $image->properties->time_created->as_iso(), Msg_type_info); } else { $this->_log('Could not extract date/time.', Msg_type_warning); } }
/** * Move the file to the new location. * @param string $path * @param string $options Can be {@link Uploaded_file_unique_name} or {@link Uploaded_file_overwrite}. */ public function move_to($path, $options = Uploaded_file_unique_name) { $final_name = $this->normalized_name; if ($options == Uploaded_file_unique_name || $this->current_name() != $path . $final_name) { if ($options == Uploaded_file_unique_name) { while (file_exists($path . $final_name)) { $url = new FILE_URL($final_name); $url->append_to_name('_' . uniqid(rand())); $final_name = $url->as_text(); } } ensure_path_exists($path); if (!file_exists($path)) { $this->raise("Could not create [{$path}] on server.", 'move_to', 'UPLOADED_FILE'); } else { /* If the file has already been moved, use the normal move function to place it in the new directory. */ if (isset($this->_final_name_and_path)) { if ($options == Uploaded_file_overwrite && file_exists($path . $final_name)) { unlink($path . $final_name); } rename($this->_final_name_and_path, $path . $final_name); $this->processed = true; } else { if (move_uploaded_file($this->temp_name, $path . $final_name)) { $this->_final_name_and_path = $path . $final_name; $opts = global_file_options(); chmod($this->_final_name_and_path, $opts->default_access_mode); $this->processed = true; } } if (!file_exists($path . $final_name)) { $this->raise("Could not move [" . $this->current_name() . "] to [{$path}{$final_name}]", 'move_to', 'UPLOADED_FILE'); } } } }
/** * Fully resolved server-local path to the thumbnail. * Will be empty if not {@link is_image} or no thumnail was generated. * @see thumbnail_url() * @param string $for_file The optional file for which to get a thumbnail * name; if empty, the result of {@link full_file_name} is used. * @return string */ public function thumbnail_file_name($for_file = '') { if (!$for_file) { $for_file = $this->full_file_name(); } $url = new FILE_URL($for_file); $url->append_to_name('_tn'); return $url->as_text(); }
public function __construct() { $this->date_time_toolkit = global_date_time_toolkit(); $this->file_options = global_file_options(); $this->url_options = global_url_options(); $this->logs = new LOGGER_CONTAINER(); parent::__construct(); $this->auto_detect_os(); /* server-local paths */ $this->set_path(Folder_name_system_temp, temp_folder()); $this->set_forced_root(Folder_name_system_temp, false); $this->set_path(Folder_name_logs, '/var/log'); $this->set_forced_root(Folder_name_logs, false); /* URLs */ $this->set_path(Folder_name_root, '/'); $this->set_path(Folder_name_resources, '{' . Folder_name_root . '}'); $this->set_path(Folder_name_apps, '{' . Folder_name_root . '}'); $this->set_path(Folder_name_data, '{' . Folder_name_root . '}data'); $this->set_path(Folder_name_pages, '{' . Folder_name_resources . '}'); $this->set_path(Folder_name_functions, '{' . Folder_name_pages . '}'); $this->set_path(Folder_name_icons, '{' . Folder_name_resources . '}icons'); $this->set_path(Folder_name_styles, '{' . Folder_name_resources . '}styles'); $this->set_path(Folder_name_themes, '{' . Folder_name_styles . '}themes'); $this->set_path(Folder_name_scripts, '{' . Folder_name_resources . '}scripts'); $this->set_extension(Folder_name_themes, 'css'); $this->set_extension(Folder_name_styles, 'css'); $this->set_extension(Folder_name_scripts, 'js'); $this->set_extension(Folder_name_icons, 'png'); /* Set up the path to the library. */ $url = new FILE_URL(realpath(__FILE__)); $url->strip_name(); $url->go_back(); $url->go_back(); $this->library_path = $url->as_text(); }
/** * Returns the thumbnail file name. * @param string $file_name * @return string * @access private */ protected function _thumbnail_name_for($file_name) { $url = new FILE_URL($file_name); $url->append_to_name('_tn'); return $url->as_text(); }
/** * Copy the object to the specified folder. * If both the source and target albums are {@link Album_location_type_local}, * and they are different folders, copy the pictures to the new folder. * @param ALBUM $folder * @param FOLDER_OPERATION_OPTIONS $options */ protected function _copy_to($folder, $options) { if ($options->update_now) { /** @var ALBUM $parent */ $parent = $this->parent_folder(); $old_location = $parent->location; $old_folder = url_to_folder($parent->picture_folder_url(true)); } parent::_copy_to($folder, $options); if ($options->update_now) { if ($old_location == Album_location_type_local && $folder->location == Album_location_type_local) { $new_folder = url_to_folder($folder->picture_folder_url(true)); if ($old_folder != $new_folder) { $old_url = new FILE_URL($old_folder); $old_url->replace_name($this->file_name); if ($old_url->extension() == '') { $old_url->replace_extension('jpg'); } $new_url = new FILE_URL($new_folder); $new_url->replace_name($this->file_name); if ($new_url->extension() == '') { $new_url->replace_extension('jpg'); } if (file_exists($old_url->as_text())) { ensure_path_exists($new_folder); log_message('Copied [' . $old_url->as_text() . '] to [' . $new_url->as_text() . ']', Msg_type_debug_info, Msg_channel_system); if (!copy($old_url->as_text(), $new_url->as_text())) { $this->raise('_copy_to', 'PICTURE', 'Could not copy main image for [' . $this->title_as_plain_text() . '].'); } } $old_url->append_to_name(Picture_thumbnail_suffix); $new_url->append_to_name(Picture_thumbnail_suffix); if (file_exists($old_url->as_text())) { ensure_path_exists($new_folder); log_message('Copied [' . $old_url->as_text() . '] to [' . $new_url->as_text() . ']', Msg_type_debug_info, Msg_channel_system); if (!copy($old_url->as_text(), $new_url->as_text())) { $this->raise('_copy_to', 'PICTURE', 'Could not copy thumbnail image for [' . $this->title_as_plain_text() . '].'); } } } } } }
/** * Extract the file to the given location. * If there is an error in the extraction, it is communicated to the optional 'error_callback' * instead of raising an exception (which stops the script). * @param string $path * @param WEBCORE_CALLBACK $error_callback */ public function extract_to($path, $error_callback = null) { $url = new FILE_URL($path); $url->append($this->normalized_name); ensure_path_exists($url->path()); $this->extracted_name = $url->as_text(); $this->_extract_to($this->extracted_name, $error_callback); }
/** * Return the server system temp directory. * @return string */ function temp_folder() { $name = tempnam('', 'WebCore'); unlink($name); $url = new FILE_URL($name); $url->strip_name(); return $url->as_text(); }
/** * Called once for each image in the archive. * @param COMPRESSED_FILE $archive * @param COMPRESSED_FILE_ENTRY $entry * @param WEBCORE_CALLBACK $error_callback * @access private */ public function process_image($archive, $entry, $error_callback) { log_open_block("Extracting [{$entry->name}]..."); $entry->extract_to($this->_target_directory, $error_callback); $class_name = $this->app->final_class_name('IMAGE', 'webcore/util/image.php'); /** @var IMAGE $img */ $img = new $class_name(); $img->set_file($entry->extracted_name, $this->read_exif); if ($img->loadable()) { $img->load_from_file(); $url = new FILE_URL($entry->extracted_name); if ($this->create_thumbnail) { if ($img->saveable()) { $url->append_to_name('_tn'); $thumbnail_name = $url->as_text(); $this->_log("Creating thumbnail...", Msg_type_info); $img->resize_to_fit($this->thumbnail_size, $this->thumbnail_size); $img->save_to_file($thumbnail_name); } else { $this->_log("Could not create thumbnail.", Msg_type_error); } } $pic_date = $this->default_date; if ($this->read_exif) { if ($img->properties->exists() && $img->properties->time_created->is_valid()) { $pic_date = $img->properties->time_created; } else { $this->_log("Could not read date from file (using default).", Msg_type_warning); } } $original_url = new FILE_URL($entry->name); $file_name_only = $original_url->name_without_extension(); $pic_title = $this->file_name_template; $pic_title = str_replace('{#}', $this->_num_pictures_imported + $this->starting_index, $pic_title); $pic_title = str_replace('{file}', $file_name_only, $pic_title); $pic = $this->_folder->new_object('picture'); $pic->title = $pic_title; $pic->file_name = $entry->normalized_name; $pic->date = $pic_date; $history_item = $pic->new_history_item(); $pic->store_if_different($history_item); $this->_num_pictures_imported = $this->_num_pictures_imported + 1; $this->_log("Created picture [{$pic->title}]", Msg_type_info); } else { $php_errormsg = null; @unlink($entry->extracted_name); if (isset($php_errormsg)) { $this->_log("This is not an image file (could not delete file on server): " . $php_errormsg, Msg_type_error); } else { $this->_log("This is not an image file (file was deleted on the server).", Msg_type_warning); } } log_close_block(); }