<?php $action = false; $galleryBlocks = \CoasterCms\Models\Block::where('type', '=', 'gallery')->get(); if (!$galleryBlocks->isEmpty()) { $galleryStorage = public_path() . '/uploads/system/gallery/'; foreach ($galleryBlocks as $galleryBlock) { $oldGalleryDir = $galleryStorage . $galleryBlock->id; $newGalleryDir = $galleryStorage . $galleryBlock->name; if (is_dir($oldGalleryDir)) { $action = true; \CoasterCms\Helpers\Cms\File\Directory::copy($oldGalleryDir, $newGalleryDir); \CoasterCms\Helpers\Cms\File\Directory::remove($oldGalleryDir); } } } if ($action) { echo "Coaster Framework: Moved gallery files so they are stored by block name\n"; }
public function postIndex() { if (Auth::action('system.update')) { $settings = Request::all(); unset($settings['_token']); foreach ($settings as $setting => $value) { $setting = str_replace($this->dot_replace, '.', $setting); $current_setting = Setting::where('name', '=', $setting)->where('editable', '=', 1)->first(); if (!empty($current_setting)) { if ($setting == 'site.secure_folders') { $newValues = explode(',', $value); foreach ($newValues as $k => $folder) { $folder = trim($folder); if (empty($folder)) { unset($newValues[$k]); } else { $newValues[$k] = '/' . trim($folder, '/') . '/'; } } foreach ($newValues as $k => $folder) { foreach ($newValues as $kCheck => $folderCheck) { if ($k != $kCheck && strpos($folder, $folderCheck) === 0) { unset($newValues[$k]); } } } $oldValues = explode(',', $current_setting->value); foreach ($oldValues as $k => $folder) { $folder = trim($folder); if (empty($folder)) { unset($oldValues[$k]); } else { $oldValues[$k] = '/' . trim($folder, '/') . '/'; } } $toSecure = array_diff($newValues, $oldValues); $toUnSecure = array_diff($oldValues, $newValues); foreach ($toSecure as $newSecureFolder) { if (is_dir(public_path() . '/uploads' . $newSecureFolder)) { Directory::copy(public_path() . '/uploads' . $newSecureFolder, storage_path() . '/uploads' . $newSecureFolder); Directory::remove(public_path() . '/uploads' . $newSecureFolder, true); } else { @mkdir(storage_path() . '/uploads' . $newSecureFolder, 0777, true); } } foreach ($toUnSecure as $newUnSecureFolder) { if (is_dir(storage_path() . '/uploads' . $newUnSecureFolder)) { Directory::copy(storage_path() . '/uploads' . $newUnSecureFolder, public_path() . '/uploads' . $newUnSecureFolder); Directory::remove(storage_path() . '/uploads' . $newUnSecureFolder); } else { @mkdir(public_path() . '/uploads' . $newUnSecureFolder, 0777, true); } } $value = implode(',', $newValues); } $current_setting->value = $value; $current_setting->save(); if (in_array($setting, ['frontend.theme', 'admin.default_template'])) { Theme::templateIdUpdate(); } } } AdminLog::new_log('System settings updated'); $this->addAlert('success', 'System Settings Updated'); } return \redirect()->route('coaster.admin.system'); }
public static function install($themeName, $options) { $themePath = base_path() . '/resources/views/themes/' . $themeName; $packed = is_dir($themePath . '/views') && is_dir($themePath . '/public'); if (!empty($options['check'])) { $pagesImport = $packed ? $themePath . '/views/import/pages' : $themePath . '/import/pages'; return ['error' => 0, 'response' => is_dir($pagesImport)]; } if ($packed) { // extract public folder, extract uploads folder, and move views to themes root Directory::copy($themePath . '/public', public_path() . '/themes/' . $themeName); Directory::remove($themePath . '/public'); if (is_dir($themePath . '/uploads')) { $securePaths = []; $secureUploadPaths = explode(',', config('coaster::site.secure_folders')); foreach ($secureUploadPaths as $secureUploadPath) { $securePaths[] = '/uploads/' . trim($secureUploadPath, '/'); } Directory::copy($themePath . '/uploads', public_path() . '/uploads', function ($addFrom, $addTo) use($securePaths, $themePath) { $uploadPath = str_replace(public_path(), '', $addTo); foreach ($securePaths as $securePath) { if (strpos($uploadPath, $securePath) === 0) { $addTo = str_replace(public_path() . '/uploads', storage_path() . '/uploads', $addTo); break; } } return [$addFrom, $addTo]; }); } Directory::remove($themePath . '/uploads'); Directory::copy($themePath . '/views', $themePath); Directory::remove($themePath . '/views'); } $unpacked = is_dir($themePath . '/templates') && is_dir(public_path() . '/themes/' . $themeName); if (!$unpacked) { return ['error' => 1, 'response' => 'theme files not found for ' . $themeName]; } $theme = self::where('theme', '=', $themeName)->first(); if (empty($theme)) { // add theme to database $newTheme = new self(); $newTheme->theme = $themeName; $newTheme->save(); // install theme blocks and templates try { BlockUpdater::updateTheme($newTheme); Directory::remove($themePath . '/import/blocks'); } catch (\Exception $e) { $newTheme->delete(); return ['error' => 1, 'response' => $e->getMessage()]; } // install pages and page block data if (!empty($options['withPageData'])) { try { self::_pageImportData($newTheme); Directory::remove($themePath . '/import/pages'); if (file_exists($themePath . '/import/pages.csv')) { unlink($themePath . '/import/pages.csv'); } } catch (\Exception $e) { return ['error' => 1, 'response' => $e->getMessage()]; } } return ['error' => 0, 'response' => '']; } else { return ['error' => 0, 'response' => 'theme ' . $themeName . ' already exists in database']; } }
unlink($nestedSortableZip); echo "."; $fancyBoxZip = public_path('coaster/jquery/fancyBox-2.1.5.zip'); $response = $guzzleClient->request('GET', 'https://github.com/fancyapps/fancyBox/archive/v2.1.5.zip', ['sink' => $fancyBoxZip]); $zip = new \CoasterCms\Helpers\Cms\File\Zip(); $zip->open($fancyBoxZip); $zip->extractDir('fancyBox-2.1.5/source', public_path('coaster/jquery/fancybox')); $zip->close(); unlink($fancyBoxZip); echo "."; $jQueryFileUploadDir = base_path('vendor/blueimp/jquery-file-upload'); $jQueryFileUploadPublicDir = public_path('coaster/jquery/gallery-upload'); \CoasterCms\Helpers\Cms\File\Directory::copy($jQueryFileUploadDir . '/cors', $jQueryFileUploadPublicDir . '/cors'); \CoasterCms\Helpers\Cms\File\Directory::copy($jQueryFileUploadDir . '/css', $jQueryFileUploadPublicDir . '/css'); \CoasterCms\Helpers\Cms\File\Directory::copy($jQueryFileUploadDir . '/img', $jQueryFileUploadPublicDir . '/img'); \CoasterCms\Helpers\Cms\File\Directory::copy($jQueryFileUploadDir . '/js', $jQueryFileUploadPublicDir . '/js'); \CoasterCms\Helpers\Cms\File\File::replaceString($jQueryFileUploadDir . '/js/main.js', ' url: \'server/php/\'', ' url: window.location.href.replace(\'/edit/\', \'/update/\')'); echo "."; $jQueryFileUploadExternal = $jQueryFileUploadPublicDir . '/Gallery-2.16.0.zip'; $response = $guzzleClient->request('GET', 'https://github.com/blueimp/Gallery/archive/2.16.0.zip', ['sink' => $jQueryFileUploadExternal]); $zip = new \CoasterCms\Helpers\Cms\File\Zip(); $zip->open($jQueryFileUploadExternal); $zip->extractFile('Gallery-2.16.0/js/jquery.blueimp-gallery.min.js', $jQueryFileUploadPublicDir . '/js/external/jquery.blueimp-gallery.min.js'); $zip->close(); unlink($jQueryFileUploadExternal); echo "."; $jQueryFileUploadExternal = $jQueryFileUploadPublicDir . '/JavaScript-Canvas-to-Blob-2.2.0.zip'; $response = $guzzleClient->request('GET', 'https://github.com/blueimp/JavaScript-Canvas-to-Blob/archive/2.2.0.zip', ['sink' => $jQueryFileUploadExternal]); $zip = new \CoasterCms\Helpers\Cms\File\Zip(); $zip->open($jQueryFileUploadExternal); $zip->extractFile('JavaScript-Canvas-to-Blob-2.2.0/js/canvas-to-blob.min.js', $jQueryFileUploadPublicDir . '/js/external/canvas-to-blob.min.js');