/** * Compile LESS to CSS for a specific theme or all themes * @param string $theme the specific theme */ public static function compileAll($theme = null) { $params = CANVAS::getTplParams(); JFactory::getApplication()->setUserState('current_template_params', $params); // get files need to compile $files = array(); $lesspath = CANVAS_TEMPLATE_REL . '/less/'; $csspath = CANVASPath::getLocalPath('css/', true); $fullpath = JPath::clean(JPATH_ROOT . '/' . $lesspath); // canvas core plugin files $canvasfiles = array('frontend-edit', 'legacy-grid', 'legacy-navigation', 'megamenu', 'off-canvas'); // all less file in less folders $lessFiles = JFolder::files($fullpath, '.less', true, true, array('rtl', 'themes', '.svn', 'CVS', '.DS_Store', '__MACOSX')); $lessContent = ''; $relLessFiles = array(); foreach ($lessFiles as $file) { $lessContent .= JFile::read($file) . "\n"; $relLessFiles[] = ltrim(str_replace($fullpath, '', $file), '/\\'); } $lessFiles = $relLessFiles; // get files imported in this list if (preg_match_all('#^\\s*@import\\s+"([^"]*)"#im', $lessContent, $matches)) { foreach ($lessFiles as $f) { if (!in_array($f, $matches[1])) { $files[] = substr($f, 0, -5); } } //build canvasfiles foreach ($canvasfiles as $key => $file) { if (in_array($file, $files)) { unset($canvasfiles[$key]); } } } // build default if (!$theme || $theme == 'default') { self::buildVars('', 'ltr'); // compile all less files in template "less" folder foreach ($files as $file) { self::compileCss($lesspath . $file . '.less', $csspath . $file . '.css'); } // if the template not overwrite the canvas core, we will compile those missing files if (!empty($canvasfiles)) { foreach ($canvasfiles as $file) { self::compileCss(CANVAS_REL . '/less/' . $file . '.less', $csspath . $file . '.css'); } } } // build themes if (!$theme) { // get themes $themes = JFolder::folders(JPATH_ROOT . '/' . $lesspath . '/themes'); } else { $themes = $theme != 'default' ? (array) $theme : array(); } if (is_array($themes)) { foreach ($themes as $t) { self::buildVars($t, 'ltr'); // compile foreach ($files as $file) { self::compileCss($lesspath . $file . '.less', $csspath . 'themes/' . $t . '/' . $file . '.css'); } if (!empty($canvasfiles)) { foreach ($canvasfiles as $file) { self::compileCss(CANVAS_REL . '/less/' . $file . '.less', $csspath . 'themes/' . $t . '/' . $file . '.css'); } } } } // compile rtl css if ($params && $params->get('build_rtl', 0)) { // compile default if (!$theme || $theme == 'default') { self::buildVars('', 'rtl'); // compile foreach ($files as $file) { self::compileCss($lesspath . $file . '.less', $csspath . 'rtl/' . $file . '.css'); } if (!empty($canvasfiles)) { foreach ($canvasfiles as $file) { self::compileCss(CANVAS_REL . '/less/' . $file . '.less', $csspath . 'rtl/' . $file . '.css'); } } } if (is_array($themes)) { // rtl for themes foreach ($themes as $t) { self::buildVars($t, 'rtl'); // compile foreach ($files as $file) { self::compileCss($lesspath . $file . '.less', $csspath . 'rtl/' . $t . '/' . $file . '.css'); } if (!empty($canvasfiles)) { foreach ($canvasfiles as $file) { self::compileCss(CANVAS_REL . '/less/' . $file . '.less', $csspath . 'rtl/' . $t . '/' . $file . '.css'); } } } } } }
public static function purge() { // Initialize some variables $input = JFactory::getApplication()->input; $layout = $input->getCmd('layout'); $template = $input->getCmd('template'); if (!$layout) { return self::error(JText::_('CANVAS_LAYOUT_UNKNOW_ACTION')); } // delete custom layout $layoutfile = CANVASPath::getLocalPath('tpls/' . $layout . '.php'); $initfile = CANVASPath::getLocalPath('etc/layout/' . $layout . '.ini'); // delete default layout $defaultlayoutfile = CANVAS_TEMPLATE_PATH . '/tpls/' . $layout . '.php'; $defaultinitfile = CANVAS_TEMPLATE_PATH . '/etc/layout/' . $layout . '.ini'; if (!@JFile::delete($layoutfile) || !@JFile::delete($defaultlayoutfile) || !@JFile::delete($initfile) || !@JFile::delete($defaultinitfile)) { return self::error(JText::_('CANVAS_LAYOUT_DELETE_FAIL')); } else { return self::response(array('successful' => JText::_('CANVAS_LAYOUT_DELETE_SUCCESSFULLY'), 'layout' => $layout, 'type' => 'delete')); } }