Index: trunk/core/units/general/helpers/themes_helper.php =================================================================== diff -u -N --- trunk/core/units/general/helpers/themes_helper.php (revision 8397) +++ trunk/core/units/general/helpers/themes_helper.php (revision 0) @@ -1,209 +0,0 @@ -themesFolder = FULL_PATH.'/themes'; - } - - /** - * Updates file system changes to database for selected theme - * - * @param string $theme_name - * - * @return mixed returns ID of created/used theme or false, if none created - */ - function refreshTheme($theme_name) - { - if (!file_exists($this->themesFolder.'/'.$theme_name)) { - // requested theme was not found on hdd - return false; - } - - $id_field = $this->Application->getUnitOption('theme', 'IDField'); - $table_name = $this->Application->getUnitOption('theme', 'TableName'); - - $sql = 'SELECT '.$id_field.' - FROM '.$table_name.' - WHERE Name = '.$this->Conn->qstr($theme_name); - $theme_id = $this->Conn->GetOne($sql); - - $this->themeFiles = Array (); - if ($theme_id) { - // reset found mark for every themes file (if theme is not new) - $sql = 'UPDATE '.TABLE_PREFIX.'ThemeFiles - SET FileFound = 0 - WHERE ThemeId = '.$theme_id; - $this->Conn->Query($sql); - - // get all theme files from db - $sql = 'SELECT FileId, CONCAT(FilePath, "/", FileName) AS FullPath - FROM '.TABLE_PREFIX.'ThemeFiles - WHERE ThemeId = '.$theme_id; - $this->themeFiles = $this->Conn->GetCol($sql, 'FullPath'); - } - else { - // theme was not found in db, but found on hdd -> create new - $fields_hash = Array ( - 'Name' => $theme_name, - 'Enabled' => 0, - 'Description' => $theme_name, - 'PrimaryTheme' => 0, - 'CacheTimeout' => 3600, // not in use right now - 'StylesheetId' => 0, // not in use right now - ); - $this->Conn->doInsert($fields_hash, $table_name); - $theme_id = $this->Conn->getInsertID(); - } - - $theme_path = $this->themesFolder.'/'.$theme_name; - $this->FindThemeFiles('', $theme_path, $theme_id); // search from base theme directory - - // delete file records from db, that were not found on hdd - $sql = 'DELETE FROM '.TABLE_PREFIX.'ThemeFiles - WHERE ThemeId = '.$theme_id.' AND FileFound = 0'; - $this->Conn->Query($sql); - - return $theme_id; - } - - /** - * Searches for new templates (missing in db) in spefied folder - * - * @param string $folder_path subfolder of searchable theme - * @param string $theme_path theme path from web server root - * @param int $theme_id id of theme we are scanning - */ - function FindThemeFiles($folder_path, $theme_path, $theme_id, $auto_structure_mode=1) - { - $fh = opendir($theme_path.$folder_path.'/'); - - if (file_exists($theme_path.$folder_path.'/'.'.smsignore')) { - $ignore = file($theme_path.$folder_path.'/'.'.smsignore'); - } - else { - $ignore = array(); - } - - while (($filename = readdir($fh))) { - if ($filename == '.' || $filename == '..') continue; - - $auto_structure = $auto_structure_mode; - foreach ($ignore as $pattern) - { - if (preg_match('/'.str_replace('/', '\\/', trim($pattern)).'/', $filename)) { - $auto_structure = 2; - break; - } - } - - $full_path = $theme_path.$folder_path.'/'.$filename; - if (is_dir($full_path)) { - $this->FindThemeFiles($folder_path.'/'.$filename, $theme_path, $theme_id, $auto_structure); - } - elseif (substr($filename, -4) == '.tpl') { - $file_path = $folder_path.'/'.$filename; - - $file_id = isset($this->themeFiles[$file_path]) ? $this->themeFiles[$file_path] : false; - if ($file_id) { - // file was found in db & on hdd -> mark as existing - $sql = 'UPDATE '.TABLE_PREFIX.'ThemeFiles - SET FileFound = 1, FileType = '.$auto_structure.' - WHERE FileId = '.$file_id; - $this->Conn->Query($sql); - } - else { - // file was found on hdd, but missing in db -> create new file record - $fields_hash = Array ( - 'ThemeId' => $theme_id, - 'FileName' => $filename, - 'FilePath' => $folder_path, - 'Description' => '', - 'FileType' => $auto_structure, // 1 - built-in, 0 - custom (not in use right now), 2 - skipped in structure - 'FileFound' => 1, - ); - $this->Conn->doInsert($fields_hash, TABLE_PREFIX.'ThemeFiles'); - $this->themeFiles[$file_path] = $this->Conn->getInsertID(); - } -// echo 'FilePath: ['.$folder_path.']; FileName: ['.$filename.']; IsNew: ['.($file_id > 0 ? 'NO' : 'YES').']
'; - } - - } - } - - /** - * Updates file system changes to database for all themes (including new ones) - * - */ - function refreshThemes() - { - $themes_found = Array(); - - $fh = opendir($this->themesFolder.'/'); - while (($filename = readdir($fh))) { - if ($filename == '.' || $filename == '..' || $filename == 'CVS') continue; - - if (is_dir($this->themesFolder.'/'.$filename)) { - $theme_id = $this->refreshTheme($filename); - if ($theme_id) { - $themes_found[] = $theme_id; - } - } - } - - $id_field = $this->Application->getUnitOption('theme', 'IDField'); - $table_name = $this->Application->getUnitOption('theme', 'TableName'); - - // if none themes found -> delete all from db OR delete all except of found themes - $sql = 'SELECT '.$id_field.' - FROM '.$table_name; - if ($themes_found) { - $sql .= ' WHERE '.$id_field.' NOT IN ('.implode(',', $themes_found).')'; - } - $theme_ids = $this->Conn->GetCol($sql); - $this->deleteThemes($theme_ids); - - } - - /** - * Deletes themes with ids passed from db - * - * @param Array $theme_ids - */ - function deleteThemes($theme_ids) - { - if (!$theme_ids) { - return ; - } - - $id_field = $this->Application->getUnitOption('theme', 'IDField'); - $table_name = $this->Application->getUnitOption('theme', 'TableName'); - - $sql = 'DELETE FROM '.$table_name.' - WHERE '.$id_field.' IN ('.implode(',', $theme_ids).')'; - $this->Conn->Query($sql); - - $sql = 'DELETE FROM '.TABLE_PREFIX.'ThemeFiles - WHERE '.$id_field.' IN ('.implode(',', $theme_ids).')'; - $this->Conn->Query($sql); - } - } - - -?> \ No newline at end of file