Microweber\Providers\LayoutsManager::scan PHP Method

scan() public method

public scan ( $options = false )
    public function scan($options = false)
    {
        $options = parse_params($options);
        if (!isset($options['path'])) {
            if (isset($options['site_template']) and strtolower($options['site_template']) != 'default' and trim($options['site_template']) != '') {
                $tmpl = trim($options['site_template']);
                $check_dir = templates_path() . '' . $tmpl;
                if (is_dir($check_dir)) {
                    $the_active_site_template = $tmpl;
                } else {
                    $the_active_site_template = $this->app->option_manager->get('current_template', 'template');
                }
            } elseif (isset($options['site_template']) and strtolower($options['site_template']) == 'mw_default') {
                $options['site_template'] = 'default';
                $tmpl = trim($options['site_template']);
                $check_dir = templates_path() . '' . $tmpl;
                if (is_dir($check_dir)) {
                    $the_active_site_template = $tmpl;
                } else {
                    $the_active_site_template = $this->app->option_manager->get('current_template', 'template');
                }
            } else {
                $the_active_site_template = $this->app->option_manager->get('current_template', 'template');
            }
            if ($the_active_site_template == '' or $the_active_site_template == 'mw_default') {
                $the_active_site_template = 'default';
            }
            $path = normalize_path(templates_path() . $the_active_site_template);
        } else {
            $path = $options['path'];
        }
        if (isset($the_active_site_template) and trim($the_active_site_template) != 'default') {
            if (defined('DEFAULT_TEMPLATE_DIR') and (!isset($path) or $path == false or !strstr($path, DEFAULT_TEMPLATE_DIR))) {
                $use_default_layouts = $path . 'use_default_layouts.php';
                if (is_file($use_default_layouts)) {
                    $path = DEFAULT_TEMPLATE_DIR;
                }
            }
        }
        if (!isset($path) or $path == false) {
            return;
        }
        if (!isset($options['no_cache'])) {
            $args = func_get_args();
            $function_cache_id = '';
            foreach ($args as $k => $v) {
                $function_cache_id = $function_cache_id . serialize($k) . serialize($v);
            }
            $cache_id = $function_cache_id = __FUNCTION__ . crc32($path . $function_cache_id);
            $cache_group = 'templates';
            $cache_content = $this->app->cache_manager->get($cache_id, $cache_group);
            if ($cache_content != false) {
                return $cache_content;
            }
        }
        $glob_patern = '*.php';
        $template_dirs = array();
        if (isset($options['get_dynamic_layouts'])) {
            $possible_dir = TEMPLATE_DIR . 'modules' . DS . 'layout' . DS;
            if (is_dir($possible_dir)) {
                $template_dirs[] = $possible_dir;
                $dir2 = rglob($possible_dir . '*.php', 0);
                if (!empty($dir2)) {
                    foreach ($dir2 as $dir_glob) {
                        $dir[] = $dir_glob;
                    }
                }
            }
        }
        if (!isset($options['get_dynamic_layouts'])) {
            if (!isset($options['filename'])) {
                $dir = rglob($glob_patern, 0, $path);
            } else {
                $dir = array();
                $dir[] = $options['filename'];
            }
        } else {
        }
        $configs = array();
        if (!empty($dir)) {
            foreach ($dir as $filename) {
                $skip = false;
                if (!isset($options['get_dynamic_layouts'])) {
                    if (!isset($options['for_modules'])) {
                        if (strstr($filename, 'modules' . DS)) {
                            $skip = true;
                        }
                    } else {
                        if (!strstr($filename, 'modules' . DS)) {
                            $skip = true;
                        }
                    }
                }
                if ($skip == false and is_file($filename)) {
                    $fin = file_get_contents($filename);
                    $here_dir = dirname($filename) . DS;
                    $to_return_temp = array();
                    if (preg_match('/type:.+/', $fin, $regs)) {
                        $result = $regs[0];
                        $result = str_ireplace('type:', '', $result);
                        $to_return_temp['type'] = trim($result);
                        $to_return_temp['directory'] = $here_dir;
                        if (strstr($here_dir, templates_path())) {
                            $templ_dir = str_replace(templates_path(), '', $here_dir);
                            if ($templ_dir != '') {
                                $templ_dir = explode(DS, $templ_dir);
                                if (isset($templ_dir[0])) {
                                    $to_return_temp['template_dir'] = $templ_dir[0];
                                }
                            }
                        }
                        if (strstr($here_dir, modules_path())) {
                            $templ_dir1 = str_replace(modules_path(), '', $here_dir);
                            $templ_dir1 = str_ireplace('templates', '', $templ_dir1);
                            $templ_dir1 = str_ireplace('\\', '/', $templ_dir1);
                            $templ_dir1 = str_ireplace('//', '/', $templ_dir1);
                            $to_return_temp['module_directory'] = $templ_dir1;
                        }
                        if (strtolower($to_return_temp['type']) == 'layout') {
                            $to_return_temp['directory'] = $here_dir;
                            if (preg_match('/is_shop:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('is_shop:', '', $result);
                                $to_return_temp['is_shop'] = trim($result);
                            }
                            if (preg_match('/name:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('name:', '', $result);
                                $to_return_temp['name'] = trim($result);
                            }
                            if (preg_match('/is_default:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('is_default:', '', $result);
                                $to_return_temp['is_default'] = trim($result);
                            }
                            if (preg_match('/position:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('position:', '', $result);
                                $to_return_temp['position'] = intval($result);
                            } else {
                                $to_return_temp['position'] = 99999;
                            }
                            if (preg_match('/version:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('version:', '', $result);
                                $to_return_temp['version'] = trim($result);
                            }
                            if (preg_match('/visible:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('visible:', '', $result);
                                $to_return_temp['visible'] = trim($result);
                            }
                            if (preg_match('/icon:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('icon:', '', $result);
                                $to_return_temp['icon'] = trim($result);
                                $possible = $here_dir . $to_return_temp['icon'];
                                if (is_file($possible)) {
                                    $to_return_temp['icon'] = $this->app->url_manager->link_to_file($possible);
                                } else {
                                    unset($to_return_temp['icon']);
                                }
                            }
                            if (preg_match('/image:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('image:', '', $result);
                                $to_return_temp['image'] = trim($result);
                                $possible = $here_dir . $to_return_temp['image'];
                                if (is_file($possible)) {
                                    $to_return_temp['image'] = $this->app->url_manager->link_to_file($possible);
                                } else {
                                    unset($to_return_temp['image']);
                                }
                            }
                            if (preg_match('/description:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('description:', '', $result);
                                $to_return_temp['description'] = trim($result);
                            }
                            if (preg_match('/content_type:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('content_type:', '', $result);
                                $to_return_temp['content_type'] = trim($result);
                            }
                            if (preg_match('/tag:.+/', $fin, $regs)) {
                                $result = $regs[0];
                                $result = str_ireplace('tag:', '', $result);
                                $to_return_temp['tag'] = trim($result);
                            }
                            $layout_file = str_replace($path, '', $filename);
                            if (isset($template_dirs) and !empty($template_dirs)) {
                                foreach ($template_dirs as $template_dir) {
                                    $layout_file = str_replace($template_dir, '', $layout_file);
                                }
                            }
                            $layout_file = str_replace(DS, '/', $layout_file);
                            $to_return_temp['layout_file'] = $layout_file;
                            $to_return_temp['filename'] = $filename;
                            $screen = str_ireplace('.php', '.png', $filename);
                            $screen_jpg = str_ireplace('.php', '.jpg', $filename);
                            if (is_file($screen_jpg)) {
                                $to_return_temp['screenshot_file'] = $screen_jpg;
                            } elseif (is_file($screen)) {
                                $to_return_temp['screenshot_file'] = $screen;
                            }
                            if (isset($to_return_temp['screenshot_file'])) {
                                $to_return_temp['screenshot'] = $this->app->url_manager->link_to_file($to_return_temp['screenshot_file']);
                            }
                            $configs[] = $to_return_temp;
                        }
                    }
                }
            }
            if (!empty($configs)) {
                $sorted_by_pos = array();
                $sorted_by_pos_items = array();
                $pos = 9999;
                foreach ($configs as $item) {
                    if (isset($item['position'])) {
                        $sorted_by_pos_items[$item['position']][] = $item;
                    } else {
                        $sorted_by_pos[$pos] = $item;
                    }
                    ++$pos;
                }
                if (!empty($sorted_by_pos_items)) {
                    ksort($sorted_by_pos_items);
                    foreach ($sorted_by_pos_items as $configs) {
                        $pos = 0;
                        foreach ($configs as $item) {
                            $sorted_by_pos[] = $item;
                            ++$pos;
                        }
                    }
                }
                if (!empty($sorted_by_pos)) {
                    $configs = $sorted_by_pos;
                }
                if (!isset($options['no_cache'])) {
                    $this->app->cache_manager->save($configs, $function_cache_id, $cache_group);
                }
                return $configs;
            }
        }
    }