2014-10-14 21:09:46 +00:00
< ? php namespace System\Classes ;
2015-02-23 08:55:06 +00:00
use Lang ;
2022-12-14 15:55:13 +00:00
use Config ;
use Response ;
use Exception ;
use SystemException ;
2015-01-28 07:03:35 +00:00
use ApplicationException ;
2015-02-23 08:55:06 +00:00
use Illuminate\Routing\Controller as ControllerBase ;
2014-10-14 21:09:46 +00:00
/**
2017-03-16 06:08:20 +00:00
* The is the master controller for system related routing .
* It is currently only responsible for serving up the asset combiner contents .
2014-10-14 21:09:46 +00:00
*
2017-03-16 06:08:20 +00:00
* @ see System\Classes\CombineAssets Asset combiner class
2014-10-14 21:09:46 +00:00
* @ package october\system
2022-12-14 15:55:13 +00:00
* @ author Alexey Bobkov , Samuel Georges , Luke Towers
2014-10-14 21:09:46 +00:00
*/
2017-03-16 06:08:20 +00:00
class SystemController extends ControllerBase
2014-10-14 21:09:46 +00:00
{
/**
* Combines JavaScript and StyleSheet assets .
* @ param string $name Combined file code
* @ return string Combined content .
*/
public function combine ( $name )
{
2014-10-18 09:58:50 +00:00
try {
if ( ! strpos ( $name , '-' )) {
throw new ApplicationException ( Lang :: get ( 'system::lang.combiner.not_found' , [ 'name' => $name ]));
}
2014-10-18 23:58:18 +00:00
2014-10-18 09:58:50 +00:00
$parts = explode ( '-' , $name );
2019-03-28 19:02:06 +00:00
2014-10-18 09:58:50 +00:00
$cacheId = $parts [ 0 ];
2014-10-18 23:58:18 +00:00
2015-01-12 09:08:31 +00:00
$combiner = CombineAssets :: instance ();
2014-10-18 23:58:18 +00:00
2019-03-28 19:02:06 +00:00
return $combiner -> getContents ( $cacheId );
2022-12-14 15:55:13 +00:00
} catch ( Exception $ex ) {
2021-03-11 10:16:57 +00:00
return Response :: make ( '/* ' . e ( $ex -> getMessage ()) . ' */' , 500 );
2020-08-08 05:27:32 +00:00
}
}
2022-12-14 15:55:13 +00:00
/**
* Resizes an image using the provided configuration
* and returns a redirect to the resized image
*
* @ param string $identifier The identifier used to retrieve the image configuration
* @ param string $encodedUrl The double - encoded URL of the resized image , see https :// github . com / octobercms / october / issues / 3592 #issuecomment-671017380
* @ return RedirectResponse
*/
public function resizer ( string $identifier , string $encodedUrl )
{
$resizedUrl = ImageResizer :: getValidResizedUrl ( $identifier , $encodedUrl );
if ( empty ( $resizedUrl )) {
return response ( 'Invalid identifier or redirect URL' , 400 );
}
// Attempt to process the resize
try {
$resizer = ImageResizer :: fromIdentifier ( $identifier );
$resizer -> resize ();
} catch ( SystemException $ex ) {
// If the resizing failed with a SystemException, it was most
// likely because it is in progress or has already finished
// although it could also be because the cache system used to store
// configuration data is broken
if ( Config :: get ( 'cache.default' , 'file' ) === 'array' ) {
throw new Exception ( 'Image resizing requires a persistent cache driver, "array" is not supported. Try changing config/cache.php -> default to a persistent cache driver.' );
}
} catch ( Exception $ex ) {
// If it failed for any other reason, restore the config so that
// the resizer route will continue to work until it succeeds
if ( $resizer ) {
$resizer -> storeConfig ();
}
// Rethrow the exception
throw $ex ;
}
return redirect () -> to ( $resizedUrl );
}
2014-10-18 09:58:50 +00:00
}