QM_Util::get_file_component PHP Method

get_file_component() public static method

public static get_file_component ( $file )
        public static function get_file_component($file)
        {
            # @TODO turn this into a class (eg QM_File_Component)
            $file = self::standard_dir($file);
            if (isset(self::$file_components[$file])) {
                return self::$file_components[$file];
            }
            foreach (self::get_file_dirs() as $type => $dir) {
                if ($dir && 0 === strpos($file, $dir)) {
                    break;
                }
            }
            $context = $type;
            switch ($type) {
                case 'plugin':
                case 'mu-plugin':
                    $plug = plugin_basename($file);
                    if (strpos($plug, '/')) {
                        $plug = explode('/', $plug);
                        $plug = reset($plug);
                    } else {
                        $plug = basename($plug);
                    }
                    $name = sprintf(__('Plugin: %s', 'query-monitor'), $plug);
                    $context = $plug;
                    break;
                case 'go-plugin':
                case 'vip-plugin':
                    $plug = str_replace(self::$file_dirs[$type], '', $file);
                    $plug = trim($plug, '/');
                    if (strpos($plug, '/')) {
                        $plug = explode('/', $plug);
                        $plug = reset($plug);
                    } else {
                        $plug = basename($plug);
                    }
                    $name = sprintf(__('VIP Plugin: %s', 'query-monitor'), $plug);
                    $context = $plug;
                    break;
                case 'stylesheet':
                    if (is_child_theme()) {
                        $name = __('Child Theme', 'query-monitor');
                    } else {
                        $name = __('Theme', 'query-monitor');
                    }
                    break;
                case 'template':
                    $name = __('Parent Theme', 'query-monitor');
                    break;
                case 'other':
                    $name = self::standard_dir($file, '');
                    $context = $file;
                    break;
                case 'core':
                    $name = __('Core', 'query-monitor');
                    break;
                case 'unknown':
                default:
                    $name = __('Unknown', 'query-monitor');
                    break;
            }
            return self::$file_components[$file] = (object) compact('type', 'name', 'context');
        }

Usage Example

Beispiel #1
0
 public function get_component()
 {
     $components = array();
     foreach ($this->trace as $item) {
         try {
             if (isset($item['class'])) {
                 if (!is_object($item['class']) and !class_exists($item['class'], false)) {
                     continue;
                 }
                 if (!method_exists($item['class'], $item['function'])) {
                     continue;
                 }
                 $ref = new ReflectionMethod($item['class'], $item['function']);
                 $file = $ref->getFileName();
             } else {
                 if (function_exists($item['function'])) {
                     $ref = new ReflectionFunction($item['function']);
                     $file = $ref->getFileName();
                 } else {
                     if (isset($item['file'])) {
                         $file = $item['file'];
                     } else {
                         continue;
                     }
                 }
             }
             $comp = QM_Util::get_file_component($file);
             $components[$comp->type] = $comp;
         } catch (ReflectionException $e) {
             # nothing
         }
     }
     foreach (QM_Util::get_file_dirs() as $type => $dir) {
         if (isset($components[$type])) {
             return $components[$type];
         }
     }
     # This should not happen
 }