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;
}
}
}