public static function get_writable_file($args, $extension = null) { if (is_string($args)) { $args = array('name' => $args); } else { if (!is_array($args)) { $args = array(); } } $default_args = array('name' => '', 'extension' => '', 'create_new' => false, 'rename' => false, 'require_existing' => false, 'permissions' => 0644, 'path_permissions' => 0755, 'default_search_paths' => array('uploads_basedir', 'uploads_path', 'wp-content', 'abspath'), 'custom_search_paths' => array()); $args = array_merge($default_args, $args); if (empty($args['name'])) { return new WP_Error('get_writable_file_no_name', 'The call to ITFileUtility::get_writable_file is missing the name attribute'); } if (is_null($extension)) { $extension = $args['extension']; } if (!empty($extension) && !preg_match('/^\\./', $extension)) { $extension = ".{$extension}"; } $base_path = ITFileUtility::get_writable_directory(array('permissions' => $args['path_permissions'], 'default_search_paths' => $args['default_search_paths'], 'custom_search_paths' => $args['custom_search_paths'])); if (is_wp_error($base_path)) { return $base_path; } $name = $args['name']; if (preg_match('|/|', $name)) { $base_path .= '/' . dirname($name); $name = basename($name); } $file = "{$base_path}/{$name}{$extension}"; if (is_file($file)) { if (true === $args['create_new']) { if (false === $args['rename']) { return new WP_Error('get_writable_file_no_rename', 'Unable to create the named writable file'); } $name = ITFileUtility::get_unique_name($base_path, $name, $extension); $file = "{$base_path}/{$name}"; } else { if (is_writable($file)) { return $file; } return new WP_Error('get_writable_file_cannot_write', 'Required file exists but is not writable'); } } else { if (true === $args['require_existing']) { return new WP_Error('get_writable_file_does_not_exist', 'Required writable file does not exist'); } } if (true === ITFileUtility::is_file_writable($file)) { @chmod($file, $args['permissions']); return $file; } return new WP_Error('get_writable_file_failed', 'Unable to create a writable file'); }
function _save() { it_classes_load('it-file-utility.php'); $data = ITForm::get_post_data(); if (ITFileUtility::file_uploaded('uploaded_favicon')) { if (preg_match('/\\.ico$/', $_FILES['uploaded_favicon']['name'])) { $path = ITFileUtility::get_writable_directory('builder-favicon'); $name = ITUtility::get_random_string(array(6, 10)) . '.ico'; if (copy($_FILES['uploaded_favicon']['tmp_name'], "{$path}/{$name}")) { $data['favicon']['file'] = "{$path}/{$name}"; $data['favicon']['url'] = ITFileUtility::get_url_from_file("{$path}/{$name}"); @chmod("{$path}/{$name}", 0644); } else { $this->_errors[] = new WP_Error('unable-to-save-favicon', __('Unable to save the supplied Favicon image file. Pleave verify that the wp-content/uploads directory can be written to.', 'it-l10n-Builder-Cohen')); } } else { $file = ITFileUtility::create_favicon('builder-favicon', $_FILES['uploaded_favicon']['tmp_name']); if (false != $file) { $url = ITFileUtility::get_url_from_file($file); $data['favicon'] = array('file' => $file, 'url' => $url); $original_extension = strtolower(preg_replace('/.+\\.([^.]+)$/', '\\1', $_FILES['uploaded_favicon']['name'])); $original_file = preg_replace('/\\.ico/', "-original.{$original_extension}", $file); $original_url = ITFileUtility::get_url_from_file($original_file); if (copy($_FILES['uploaded_favicon']['tmp_name'], $original_file)) { $data['favicon']['original_file'] = $original_file; $data['favicon']['original_url'] = $original_url; if (false !== ($file_data = @file_get_contents($original_file))) { if (false !== ($im = @imagecreatefromstring($file_data))) { list($width, $height) = getimagesize($original_file); $new_im = imagecreatetruecolor(16, 16); imagecolortransparent($new_im, imagecolorallocatealpha($new_im, 0, 0, 0, 127)); imagealphablending($new_im, false); imagesavealpha($new_im, true); if (false !== imagecopyresampled($new_im, $im, 0, 0, 0, 0, 16, 16, $width, $height)) { $resized_file = preg_replace('/(\\.[^.]+)$/', '-resized\\1', $original_file); $result = imagepng($new_im, $resized_file); if (true == $result) { $data['favicon']['original_resized_file'] = $resized_file; $data['favicon']['original_resized_url'] = ITFileUtility::get_url_from_file($resized_file); } } } unset($file_data); } } } else { $this->_errors[] = new WP_Error('unable-to-create-favicon', __('Unable to generate a Favicon image from the supplied file. Please verify that the file is a valid JPG, JPEG, PNG, GIF, or ICO image.', 'it-l10n-Builder-Cohen')); } } } $this->_options = array_merge($this->_options, $data); $this->_parent->_save(); }
public static function create_favicon($dir_name, $image, $sizes = false) { it_classes_load('it-file-utility.php'); require_once dirname(__FILE__) . '/classes/class-php-ico.php'; if (!is_array($sizes) || false === $sizes) { $sizes = array(array(16, 16), array(24, 24), array(32, 32), array(48, 48)); } $ico = new PHP_ICO($image, $sizes); $path = ITFileUtility::get_writable_directory($dir_name); while (empty($name) || file_exists("{$path}/{$name}")) { $name = ITUtility::get_random_string(array(6, 10)) . '.ico'; } $result = $ico->save_ico("{$path}/{$name}"); if (true != $result) { return false; } @chmod("{$path}/{$name}", 0644); return "{$path}/{$name}"; }