Ejemplo n.º 1
0
function Q_scripts_combine()
{
    $environment = Q_Config::get('Q', 'environment', false);
    if (!$environment) {
        return "Config field 'Q'/'environment' is empty";
    }
    $files = Q_Config::get('Q', 'environments', $environment, 'files', Q_Config::get('Q', 'environments', '*', 'files', false));
    if (empty($files)) {
        return "Config field 'Q'/'environments'/'{$environment}'/files is empty";
    }
    $filters = Q_Config::get('Q', 'environments', $environment, 'filters', Q_Config::get('Q', 'environments', '*', 'filters', false));
    if (empty($filters)) {
        return "Config field 'Q'/'environments'/'{$environment}'/filters is empty";
    }
    $combined = array();
    foreach ($files as $src => $dest) {
        $f = Q_Uri::filenameFromUrl(Q_Html::themedUrl($src, true));
        if (!file_exists($f)) {
            return "Aborting: File corresponding to {$src} doesn't exist";
        }
        $content = file_get_contents($f);
        $combined[$dest][$src] = $content;
    }
    foreach ($combined as $dest => $parts) {
        $df = Q_Uri::filenameFromUrl(Q_Html::themedUrl($dest));
        $ext = pathinfo($df, PATHINFO_EXTENSION);
        echo "Writing {$df}\n";
        if (!empty($filters)) {
            foreach ($filters as $e => $filter) {
                if ($ext !== $e) {
                    continue;
                }
                $p = !empty($filter['params']) ? Q::json_encode($filter['params']) : '';
                echo "\t" . $filter['handler'] . "{$p}\n";
                foreach ($parts as $src => $part) {
                    echo "\t\t{$src}\n";
                }
                $params = compact('dest', 'parts');
                if (!empty($filter['params'])) {
                    $params = array_merge($params, $filter['params']);
                }
                $content = Q::event($filter['handler'], $params);
            }
        }
        file_put_contents($df, $content);
    }
    echo "Success.";
}
Ejemplo n.º 2
0
 /**
  * Gets the url and filename of a themed file
  * @method themedUrlAndFilename
  * @static
  * @param {string} $filePath  Basically the subpath of the file underneath the web or theme directory
  * @param {boolean} [$ignoreEnvironment=false] If true, doesn't apply environment transformations
  * @return {array} A two-element array containing the url and filename
  */
 static function themedUrlAndFilename($filePath, $ignoreEnvironment = false)
 {
     /**
      * @event Q/themedUrlAndFilename {before}
      * @param {string} file_path
      * @return {array}
      */
     $result = Q::event('Q/themedUrlAndFilename', compact('file_path'), 'before');
     if ($result) {
         return $result;
     }
     if (!$ignoreEnvironment and $environment = Q_Config::get('Q', 'environment', false)) {
         if ($info = Q_Config::get('Q', 'environments', $environment, false)) {
             if (!empty($info['files'][$filePath])) {
                 $filePath = $info['files'][$filePath];
             }
         }
     }
     $filename = false;
     if (Q_Valid::url($filePath)) {
         $url = $filePath;
     } else {
         $theme = Q_Uri::url(self::themeUrl());
         $themes = self::$themes;
         $c = count($themes);
         if ($c > 1) {
             // At least two theme URLs have been loaded
             // Do the cascade
             for ($i = $c - 1; $i >= 0; --$i) {
                 try {
                     $filename = Q_Uri::filenameFromUrl($themes[$i] . '/' . $filePath);
                 } catch (Exception $e) {
                     continue;
                 }
                 if ($filename and file_exists($filename)) {
                     $theme = $themes[$i];
                     break;
                 }
             }
         }
         $url = $theme . '/' . $filePath;
     }
     if (empty($filename)) {
         try {
             $filename = Q_Uri::filenameFromUrl($url);
         } catch (Exception $e) {
             $filename = null;
         }
     }
     $url = Q_Uri::cachedUrl($url);
     return array($url, $filename);
 }