(https://bezumkin.ru/sections/components/118/) * Credit: Forum posts by Bruno (http://forums.modx.com/u/Bruno17) * Credit: Forum posts by LuK (http://forums.modx.com/u/exside) * Author: Chris Dempsey * * */ if ( !isset( $modx ) ) return; if( $modx->Event->name != 'OnFileManagerUpload' ) { return; } /** * Settings * * Adjust as required. * Disable logging in production environment otherwise MODX error log will fill up with * unnecessary entries. * */ // logging $logging = false; // perform logging both in MODX and Resizer debug // config to pass to Resizer which supports a subset of phpThumb options (https://github.com/oo12/Resizer#options) $config = array ( 'w' => 1600, // max width 'h' => 1600, // max height 'zc' => 0, // zoom crop 'bg' => '#FFF', // backgroud, only required if zc = 0 'q' => 78, // quality 'scale' => 1 // scale ); /********************************* * No need to edit below this line ********************************/ $file = $modx->event->params[ 'files' ][ 'file' ]; // abort on error if ( $file['error'] != 0 ) { $modx->log( modX::LOG_LEVEL_ERROR, 'autoResizeOnUpload: $file["error"] occured.' ); return; } $directory_uploaded_to = $modx->event->params [ 'directory' ]; // get upload directory from OnFileManagerUpload event $file_name = $file[ 'name' ]; // get the filename eg. picture.jpg /** * sanitize file_name */ // replace non alphanumeric characters with dash $file_name_safe = preg_replace( '/[^a-zA-Z0-9-_\.]/','-', $file_name ); // file_name could end up with consecutive dashes for replaced characters eg. // image (2014).jpg becomes: image--2014-.jpg so remove consecutive dashes $file_name_safe = preg_replace( '/--+/', '-', $file_name_safe ); // create array of upload_images extensions from system settings $allowed_extensions = explode ( ',' , $modx->getOption ( 'upload_images' ) ); // trim white space $allowed_extensions = array_map('trim', $allowed_extensions); /** * Get media source properties for default media source * */ // get id of default_media_source $default_media_source = $modx->getOption('default_media_source'); // get modMediaSource object using default_media_source id $obj_media_source = $modx->getObject( 'modMediaSource', array( 'id' => $default_media_source ) ); // get modMediaSource properties $ms_props = $obj_media_source->get( 'properties' ); $ms_basePath = $ms_props[ 'basePath' ][ 'value' ]; $file_path_abs = MODX_BASE_PATH . $ms_basePath . $directory_uploaded_to . $file_name; $file_path_abs_safe = MODX_BASE_PATH . $ms_basePath . $directory_uploaded_to . $file_name_safe; // extension of uploaded file $file_ext = substr ( strrchr( $file_name, '.' ), 1 ); // get properties of image as array, includes file type and a height/width text string $file_dimensions = getimagesize ( $file_path_abs ); /** * Final check before running Resizer * * Is image filetype is in allowed extensions + * are dimensions of uploaded file greater than sizes allowed in config * */ if ( (in_array ($file_ext, $allowed_extensions) ) && ( ($file_dimensions[0] > $config['w'] || $file_dimensions[1] > $config['h']) ) ) { // example code source for resizer: https://github.com/oo12/Resizer#snippet-developers //$modx->loadClass( 'Resizer', MODX_CORE_PATH . 'components/resizer/model/', true, true ); if (!$modx->loadClass( 'Resizer', MODX_CORE_PATH . 'components/resizer/model/', true, true )) { // Resizer not installed, log error and exit $modx->log(modX::LOG_LEVEL_ERROR, 'Error: autoResizeOnUpload Plugin - Resizer component not found.'); return; } $resizer = new Resizer( $modx ); // pass in the modx object if ( $logging == true ) { $resizer->debug = true; // (optional) Enable debugging messages. } $resizer->processImage( $file_path_abs, // input image file (path can be absolute or relative to MODX_BASE_PATH) $file_path_abs_safe, // output image file. Extension determines image format. $config // config array ); // now have a copy of the uploaded file with safe name, delete the original image file but only if // the filename does not match the original, otherwise we'll delete the resized image. if( $file_path_abs !== $file_path_abs_safe ) { if ( !unlink( $file_path_abs ) ) { if ( $logging == true ) { $log_resizer .= 'Delete original file: failed.' . PHP_EOL; } } else { if ( $logging == true ) { $log_resizer .= 'Delete original file: success.' . PHP_EOL; } } } // (optional) record Resizer debug message array for the modx error log if ( $logging == true ) { $log_resizer .= PHP_EOL . '=======[ Resizer Log ]=======' . PHP_EOL; $log_resizer .= substr(print_r($resizer->debugmessages, TRUE), 7, -2); } } /** * Debug logging */ if ( $logging == true ) { $log_autoResizeOnUpload .= PHP_EOL . '=======[ autoResizeOnUpload Plugin - Debug Log ]=======' . PHP_EOL; // OnFileManagerUpload fired $log_autoResizeOnUpload .= 'OnFileManagerUpload event fired.' . PHP_EOL; // ms_basePath $log_autoResizeOnUpload .= '$ms_basePath = ' . $ms_basePath . PHP_EOL; // file $log_autoResizeOnUpload .= '$file = ' . $file . PHP_EOL; // directory_uploaded_to $log_autoResizeOnUpload .= '$directory_uploaded_to = ' . $directory_uploaded_to . PHP_EOL; // file_path_abs $log_autoResizeOnUpload .= '$file_path_abs = ' . $file_path_abs . PHP_EOL; // file_path_abs_safe $log_autoResizeOnUpload .= '$file_path_abs_safe = ' . $file_path_abs_safe . PHP_EOL; // file_name $log_autoResizeOnUpload .= '$file_name = ' . $file_name . PHP_EOL; // file_ext $log_autoResizeOnUpload .= '$file_ext = ' . $file_ext . PHP_EOL; // file_dimensions $log_autoResizeOnUpload .= '$file_dimensions = ' . $file_dimensions . PHP_EOL; // width of uploaded file $log_autoResizeOnUpload .= 'WIDTH = ' . $file_dimensions[0] . PHP_EOL; // heght of uploaded file $log_autoResizeOnUpload .= 'HEIGHT = ' . $file_dimensions[1] . PHP_EOL; // resizer log $log_autoResizeOnUpload .= PHP_EOL . '$resizer_log: ' . PHP_EOL . $log_resizer; // commit details to MODX error log $modx->log( modX::LOG_LEVEL_ERROR, $log_autoResizeOnUpload ); }