Exemple #1
0
 /**
  * Compute the files to be include
  *
  * @param   string   $folder          folder name to search into (images, css, js, ...)
  * @param   string   $file            path to file
  * @param   boolean  $relative        path to file is relative to /core folder
  * @param   boolean  $detect_browser  detect browser to include specific browser files
  * @param   boolean  $detect_debug    detect debug to include compressed files if debug is on
  * @return  array    files to be included
  */
 protected static function includeRelativeFiles($folder, $file, $relative, $detect_browser, $detect_debug)
 {
     // If http is present in filename
     if (strpos($file, 'http') === 0) {
         $includes = array($file);
     } else {
         $root = rtrim(App::get('request')->root(true), '/');
         // Extract extension and strip the file
         $strip = preg_replace('/\\.[^.]*$/', '', $file);
         $ext = App::get('filesystem')->extension($file);
         // Detect browser and compute potential files
         if ($detect_browser) {
             $navigator = new \Hubzero\Browser\Detector();
             $browser = $navigator->name();
             $major = $navigator->major();
             $minor = $navigator->minor();
             // Try to include files named filename.ext, filename_browser.ext, filename_browser_major.ext, filename_browser_major_minor.ext
             // where major and minor are the browser version names
             $potential = array($strip, $strip . '_' . $browser, $strip . '_' . $browser . '_' . $major, $strip . '_' . $browser . '_' . $major . '_' . $minor);
         } else {
             $potential = array($strip);
         }
         // If relative search in template directory or media directory
         if ($relative) {
             // Get the template
             $template = App::get('template')->template;
             // Prepare array of files
             $includes = array();
             // For each potential files
             foreach ($potential as $strip) {
                 $files = array();
                 // Detect debug mode
                 if ($detect_debug && App::get('config')->get('debug')) {
                     $files[] = $strip . '-uncompressed.' . $ext;
                 }
                 $files[] = $strip . '.' . $ext;
                 // Loop on 1 or 2 files and break on first found
                 foreach ($files as $file) {
                     // If the file is in the template folder
                     if (file_exists(JPATH_THEMES . "/{$template}/{$folder}/{$file}")) {
                         $includes[] = App::get('request')->base(true) . "/templates/{$template}/{$folder}/{$file}";
                         break;
                     } else {
                         // If the file contains any /: it can be in an media extension subfolder
                         if (strpos($file, '/')) {
                             // Divide the file extracting the extension as the first part before /
                             list($extension, $file) = explode('/', $file, 2);
                             // If the file yet contains any /: it can be a plugin
                             if (strpos($file, '/')) {
                                 // Divide the file extracting the element as the first part before /
                                 list($element, $file) = explode('/', $file, 2);
                                 // Try to deal with plugins group in the media folder
                                 if (file_exists(PATH_ROOT . "/core/{$extension}/{$element}/{$folder}/{$file}")) {
                                     $includes[] = $root . "/core/{$extension}/{$element}/{$folder}/{$file}" . '?v=' . filemtime(PATH_ROOT . "/core/{$extension}/{$element}/{$folder}/{$file}");
                                     break;
                                 } elseif (file_exists(PATH_ROOT . "/core/{$extension}/{$folder}/{$element}/{$file}")) {
                                     $includes[] = $root . "/core/{$extension}/{$folder}/{$element}/{$file}" . '?v=' . filemtime(PATH_ROOT . "/core/{$extension}/{$folder}/{$element}/{$file}");
                                     break;
                                 } elseif (file_exists(JPATH_THEMES . "/{$template}/{$folder}/system/{$element}/{$file}")) {
                                     $includes[] = $root . "/templates/{$template}/{$folder}/system/{$element}/{$file}" . '?v=' . filemtime(JPATH_THEMES . "/{$template}/{$folder}/system/{$element}/{$file}");
                                     break;
                                 } elseif (file_exists(PATH_ROOT . "/core/assets/{$folder}/{$element}/{$file}")) {
                                     $includes[] = $root . "/core/assets/{$folder}/{$element}/{$file}" . '?v=' . filemtime(PATH_ROOT . "/core/assets/{$folder}/{$element}/{$file}");
                                     break;
                                 }
                             } elseif (file_exists(PATH_ROOT . "/core/{$extension}/{$folder}/{$file}")) {
                                 $includes[] = $root . "/core/{$extension}/{$folder}/{$file}" . '?v=' . filemtime(PATH_ROOT . "/core/{$extension}/{$folder}/{$file}");
                                 break;
                             } elseif (file_exists(JPATH_THEMES . "/{$template}/{$folder}/system/{$file}")) {
                                 $includes[] = $root . "/templates/{$template}/{$folder}/system/{$file}" . '?v=' . filemtime(JPATH_THEMES . "/{$template}/{$folder}/system/{$file}");
                                 break;
                             } elseif (file_exists(PATH_ROOT . "/core/assets/{$folder}/{$file}")) {
                                 $includes[] = $root . "/core/assets/{$folder}/{$file}" . '?v=' . filemtime(PATH_ROOT . "/core/assets/{$folder}/{$file}");
                                 break;
                             }
                         } elseif (file_exists(PATH_ROOT . "/core/assets/{$folder}/{$file}")) {
                             $includes[] = $root . "/core/assets/{$folder}/{$file}" . '?v=' . filemtime(PATH_ROOT . "/core/assets/{$folder}/{$file}");
                             break;
                         }
                     }
                 }
             }
         } else {
             $includes = array();
             foreach ($potential as $strip) {
                 // Detect debug mode
                 if ($detect_debug && App::get('config')->get('debug') && file_exists(PATH_ROOT . "/{$strip}-uncompressed.{$ext}")) {
                     $includes[] = $root . "/{$strip}-uncompressed.{$ext}";
                 } elseif (file_exists(PATH_ROOT . "/{$strip}.{$ext}")) {
                     $includes[] = $root . "/{$strip}.{$ext}";
                 }
             }
         }
     }
     return $includes;
 }
Exemple #2
0
 /**
  * Check if the plugin can render for the provided browser
  * 
  * @return  boolean
  */
 protected function canRender()
 {
     $browser = new \Hubzero\Browser\Detector();
     if ($allowed = trim($this->params->get('browsers'))) {
         $browsers = array();
         $allowed = str_replace("\r", '', $allowed);
         $allowed = str_replace('\\n', "\n", $allowed);
         $allowed = explode("\n", $allowed);
         foreach ($allowed as $allow) {
             $allow = trim($allow);
             if (preg_match('/(.+?),\\s+([^\\s]+)\\s+(\\d+)\\.(\\d+)/i', $allow, $matches)) {
                 $req = new stdClass();
                 $req->name = strtolower(trim($matches[2]));
                 $req->major = intval($matches[3]);
                 $req->minor = intval($matches[4]);
                 $req->os = strtolower(trim($matches[1]));
                 $browsers[] = $req;
             }
         }
         $matched = false;
         foreach ($browsers as $minimum) {
             if ($minimum->os != '*' && $minimum->os != strtolower($browser->platform())) {
                 continue;
             }
             if ($minimum->name != strtolower($browser->name())) {
                 continue;
             }
             // If we get to here, we have a matching OS and browser
             if ($minimum->major > $browser->major()) {
                 return false;
             }
             if ($minimum->major == $browser->major() && $minimum->minor > $browser->minor()) {
                 return false;
             }
             $matched = true;
         }
         if (!$matched) {
             return false;
         }
     }
     if ($regexes = trim($this->params->get('regexes'))) {
         $regexes = str_replace("\r", '', $regexes);
         $regexes = str_replace('\\n', "\n", $regexes);
         $regexes = explode("\n", $regexes);
         foreach ($regexes as $disallow) {
             $disallow = trim($disallow);
             if (preg_match("/{$disallow}/i", $browser->agent(), $matches)) {
                 return false;
             }
         }
     }
     return true;
 }