Project

General

Profile

« Previous | Next » 

Revision 1643

Added by darkviper over 12 years ago

added backend functions to copy themes and import htt-template files according to the the new theme fallback functionality

View differences:

branches/2.8.x/CHANGELOG
11 11
! = Update/Change
12 12
===============================================================================
13 13

  
14

  
14
22 Mar-2012 Build 1643 Werner v.d.Decken(DarkViper)
15
+ added backend functions to copy themes and import htt-template files
16
  according to the the new theme fallback functionality
15 17
22 Mar-2012 Build 1642 Dietmar Woellbrink (Luisehahne)
16 18
! update header info.php wb_themes
17 19
22 Mar-2012 Build 1641 Dietmar Woellbrink (Luisehahne)
branches/2.8.x/wb/admin/templates/details.php
82 82
								'AUTHOR' => $row['author'],
83 83
								'DESCRIPTION' => $row['description'],
84 84
								'VERSION' => $row['version'],
85
								'DESIGNED_FOR' => $row['platform']
85
								'DESIGNED_FOR' => $row['platform'],
86
								'LICENSE' => $row['license'],
86 87
								)
87 88
						);
88 89

  
......
98 99
								'TEXT_VERSION' => $TEXT['VERSION'],
99 100
								'TEXT_DESIGNED_FOR' => $TEXT['DESIGNED_FOR'],
100 101
								'TEXT_DESCRIPTION' => $TEXT['DESCRIPTION'],
101
								'TEXT_BACK' => $TEXT['BACK']
102
								'TEXT_BACK' => $TEXT['BACK'],
103
								'TEXT_LICENSE' => '',
102 104
								)
103 105
						);
104

  
106
$template->set_var('TEXT_FUNCTION', ($row['function'] == 'theme' ? $TEXT['THEME'] : $TEXT['TEMPLATE']));
105 107
// Parse template object
106 108
$template->parse('main', 'main_block', false);
107 109
$template->pparse('output', 'page');
branches/2.8.x/wb/admin/templates/index.php
30 30

  
31 31
// Insert values into template list
32 32
$template->set_block('main_block', 'template_list_block', 'template_list');
33
$result = $database->query("SELECT * FROM ".TABLE_PREFIX."addons WHERE type = 'template' order by name");
34
if($result->numRows() > 0) {
35
	while($addon = $result->fetchRow()) {
33
$sql = 'SELECT `directory`, `name`, `function` FROM `'.TABLE_PREFIX.'addons` '
34
     . 'WHERE `type`=\'template\' ORDER BY `name`';
35
if(($result = $database->query($sql))) {
36
	while($addon = $result->fetchRow(MYSQL_ASSOC)) {
36 37
		$template->set_var('VALUE', $addon['directory']);
37
		$template->set_var('NAME', $addon['name']);
38
		$template->set_var('NAME', (($addon['function'] == 'theme' ? '[Theme] ' : '').$addon['name']));
38 39
		$template->parse('template_list', 'template_list_block', true);
39 40
	}
40 41
}
branches/2.8.x/wb/admin/skel/themes/htt/templates_details.htt
1 1
<!-- BEGIN main_block -->
2 2

  
3
<h2>{HEADING_TEMPLATE_DETAILS}</h2>
3
<h2>{HEADING_TEMPLATE_DETAILS} ({TEXT_FUNCTION})</h2>
4 4

  
5 5
<table summary="" cellpadding="5" cellspacing="0" border="0">
6 6
<tr>
......
23 23
	<td valign="top">{TEXT_DESCRIPTION}:</td>
24 24
	<td style="text-align: justify;">{DESCRIPTION}</td>
25 25
</tr>
26
<tr>
27
	<td>{TEXT_LICENSE}:</td>
28
	<td>{LICENSE}</td>
29
</tr>
26 30
</table>
27 31

  
28 32
<br />
branches/2.8.x/wb/admin/interface/version.php
51 51

  
52 52
// check if defined to avoid errors during installation (redirect to admin panel fails if PHP error/warnings are enabled)
53 53
if(!defined('VERSION')) define('VERSION', '2.8.3');
54
if(!defined('REVISION')) define('REVISION', '1642');
54
if(!defined('REVISION')) define('REVISION', '1643');
55 55
if(!defined('SP')) define('SP', '');
branches/2.8.x/wb/admin/addons/CopyTheme.php
1
<?php
2
/**
3
 *
4
 * @category        WBCore
5
 * @package         WBCore_addons
6
 * @author          Werner v.d.Decken
7
 * @copyright       Website Baker Org. e.V.
8
 * @link			http://www.websitebaker2.org/
9
 * @license         http://www.gnu.org/licenses/gpl.html
10
 * @revision        $Revision$
11
 * @filesource		$HeadURL$
12
 * @lastmodified    $Date$
13
 */
14

  
15
class CopyTheme{
16

  
17
// global vars
18
	private $_oDb             = null;
19
	private $_aLang           = array();
20
	private $_aGlobals        = array();
21
// class properties
22
	private $_sThemesBasePath = ''; // (/var/www/httpdocs/wb/templates)
23
	private $_sSourceDir      = ''; // (default_theme)
24
	private $_sNewThemeDir    = ''; // (MyNewBackendTheme)
25
	private $_sNewThemeName   = ''; // ('my new Backend Theme')
26

  
27
	private $_aErrors         = array();
28

  
29
/**
30
 *
31
 * @param string $sSourceThemePath (THEME_PATH.'/templates/'.DEFAULT_THEME)
32
 * @param string $sNewThemeName (NewName)
33
 */
34
	public function __construct()
35
	{
36
	// import global vars
37
		$this->_oDb   = $GLOBALS['database'];
38
		$this->_aLang = $GLOBALS['MESSAGE'];
39
	// import global Consts
40
		$this->_aGlobals['TablePrefix']     = TABLE_PREFIX;
41
		$this->_aGlobals['Debug']           = (defined('DEBUG') && DEBUG === true);
42
		$this->_aGlobals['IsLinux']         = ((substr(__FILE__, 0, 1)) == '/');
43
		$this->_aGlobals['StringDirMode']   = STRING_DIR_MODE;
44
		$this->_aGlobals['StringFileMode']  = STRING_FILE_MODE;
45
	}
46
/**
47
 * start copy current theme into a new theme
48
 * @param string $sSourceThemePath (/var/www/httpdocs/wb/templates/destination_theme)
49
 * @param string $sNewThemeName (NewName)
50
 * @return bool 
51
 */
52
	public function execute($sSourceThemePath, $sNewThemeName)
53
	{
54
		$bRetval = false;
55
		$this->clearError();
56
		$this->_init($sSourceThemePath, $sNewThemeName);
57
		if(!is_writeable($this->_sThemesBasePath)) {
58
			$this->_setError( $this->_aLang['THEME_DESTINATION_READONLY'].' >> '
59
			                  .$this->_sThemesBasePath );
60
			return false;
61
		}
62
		if($this->_copyTree()) {
63
			if($this->_modifyInfoFile()) {
64
				if($this->_registerNewTheme()) {
65
					return true;
66
				}
67
			}
68
		}
69
		$dir = $this->_sThemesBasePath.'/'.$this->_sNewThemeDir;
70
		$this->_doRollback($dir);
71
		return false;
72
	}
73
/**
74
 * initialize the class
75
 * @param string $sSourceThemePath (/var/www/httpdocs/wb/templates/destination_theme)
76
 * @param string $sNewThemeName (NewName)
77
 * @return boolean
78
 */
79
	private function _init($sSourceThemePath, $sNewThemeName)
80
	{
81
	// sanitize arguments and calculate local vars
82
		$this->_sThemesBasePath = str_replace('\\','/', dirname($sSourceThemePath));
83
		$this->_sSourceDir = basename($sSourceThemePath);
84
		$this->_sNewThemeDir = $this->_SanitizeNewDirName($sNewThemeName);
85
		$this->_sNewThemeName = $this->_SanitizeNewName($sNewThemeName);
86
	}
87
/**
88
 * sanitize the new name and make it unique
89
 * @param string $sName
90
 * @return string
91
 */
92
	private function _SanitizeNewName($sName)
93
	{
94
		$sName = mysql_real_escape_string($sName);
95
		$iCount = '';
96
		do {
97
			$sSearch = $sName.($iCount ? ' '.$iCount : '');
98
			$sql = 'SELECT COUNT(*) FROM `'.$this->_aGlobals['TablePrefix'].'addons` '
99
				 . 'WHERE LOWER(`name`)=\''.strtolower($sSearch).'\' AND `function`=\'theme\'';
100
			$exists = $this->_oDb->get_one($sql);
101
			$iCount = (int)$iCount + 1;
102
		}while($exists);
103
		return ($sName != $sSearch ? $sSearch : $sName);
104
	}
105
/**
106
 * generate a unique valid dirname from template name
107
 * @param string $sName
108
 * @return string
109
 */	
110
	private function _SanitizeNewDirName($sName)
111
	{
112
		// remove all of the ASCII controllcodes
113
		$sName = preg_replace('/[^0-9a-zA-Z \-_]/', '', strtolower($sName));
114
		$sName = str_replace(array('-', '_'), array('- ', ' '), $sName);
115
		$sName = str_replace(' ', '', ucwords($sName));
116
		$sName = ($sName == '' ? 'MyNewTheme' : $sName);
117
		$iCount = '';
118
		do {
119
			$sSearch = $sName.($iCount ? '_'.$iCount : '');
120
			$sql = 'SELECT COUNT(*) FROM `'.$this->_aGlobals['TablePrefix'].'addons` '
121
				 . 'WHERE `directory`=\''.$sSearch.'\' AND `function`=\'theme\'';
122
			$exists = $this->_oDb->get_one($sql);
123
			$iCount = (int)$iCount + 1;
124
		}while($exists);
125
		return ($sName != $sSearch ? $sSearch : $sName);
126
	}
127
/**
128
 * copy the complete theme - directory tree with all included files
129
 * @return boolean true if ok
130
 */
131
	private function _copyTree()
132
	{
133
		$bRetval = true;
134
		$sSourceDir = $this->_sThemesBasePath.'/'.$this->_sSourceDir;
135
		// build file list to copy into destination theme
136
		$aFileList = array();
137
		try {
138
			$oIterator = new RecursiveDirectoryIterator($sSourceDir);
139
			foreach (new RecursiveIteratorIterator($oIterator) as $cur) {
140
				if($cur->isDir() || strpos($cur, '.svn') !== false) { continue; }
141
				$sPattern = '/^'.preg_quote($sSourceDir, '/').'/';
142
				$sFilename = preg_replace($sPattern, '', $cur->getPathname());
143
				$sFilePath = preg_replace($sPattern, '', $cur->getPath());
144
				$aFileList[$sFilename] = $sFilePath;
145
			}
146
			natsort($aFileList);
147
		}catch(Exeption $e) {
148
			$msg  = 'CopyTheme::_copyTree => '.$this->_aLang['GENERIC_FAILED_COMPARE'];
149
			$msg .= '<br />'.$e->getMessage();
150
			$this->_setError($msg);
151
			$bRetval = false;
152
		}
153
		if($bRetval) {
154
		// create all needed directories
155
			$aDirectories = array_unique(array_values($aFileList));
156
			$bRetval = $this->_createDirs($aDirectories);
157
		}
158
		if($bRetval) {
159
			// copy all needed files
160
			$aFiles = array_keys($aFileList);
161
			$bRetval = $this->_copyFiles($aFiles);
162
		}
163
		return $bRetval;
164
	}
165
/**
166
 * create all the directories from $aNewDirs-list under $sBaseDir
167
 * @param array $aNewDirList ( array('', '/images', '/images/files')
168
 */
169
	private function _createDirs($aNewDirList)
170
	{
171
		$bRetval = true;
172
		foreach($aNewDirList as $sDir) {
173
			$sNewDir = $this->_sThemesBasePath.'/'.$this->_sNewThemeDir.$sDir;
174
			if(!file_exists($sNewDir) &&  mkdir($sNewDir, 0777, true)) {
175
				if($this->_aGlobals['IsLinux']) {
176
					if(!chmod($sNewDir, $this->_aGlobals['StringDirMode'])) {
177
						$sMsg = 'CopyTheme::createDirs::chmod('.$sNewDir.') >> '
178
								.$this->_aLang['GENERIC_FAILED_COMPARE'];
179
						$this->_setError($sMsg);
180
						$bRetval = false;
181
						break;
182
					}
183
				}
184
			}else {
185
				$sMsg = 'CopyTheme::createDirs::mkdir('.$sNewDir.') >> '
186
						.$this->_aLang['GENERIC_FAILED_COMPARE'];
187
				$this->_setError($sMsg);
188
				$bRetval = false;
189
				break;
190
			}
191
		}
192
		return $bRetval;
193
	}
194
/**
195
 * copies a list of files from source directory to destination directory
196
 * @param array $aFileList (array('/index.php', '/images/index.php', '/images/files/index.php')
197
 */
198
	private function _copyFiles($aFileList)
199
	{
200
		$bRetval = true;
201
		$sSourceDir = $this->_sThemesBasePath.'/'.$this->_sSourceDir;
202
		$sDestinationDir = $this->_sThemesBasePath.'/'.$this->_sNewThemeDir;
203
		foreach($aFileList as $sFile) {
204
			if(copy($sSourceDir.$sFile, $sDestinationDir.$sFile)) {
205
				if($this->_aGlobals['IsLinux']) {
206
					if(!chmod($sDestinationDir.$sFile, $this->_aGlobals['StringFileMode'])) {
207
						$sMsg = 'CopyTheme::copyFiles::chmod('.$sDestinationDir.$sFile.') >> '
208
								.$this->_aLang['GENERIC_FAILED_COMPARE'];
209
						$this->_setError($sMsg);
210
						$bRetval = false;
211
						break;
212
					}
213
				}
214
			}else {
215
				$sMsg = 'CopyTheme::copyFiles::copy('.$sDestinationDir.$sFile.') >> '
216
						.$this->_aLang['GENERIC_FAILED_COMPARE'];
217
				$this->_setError($sMsg);
218
				$bRetval = false;
219
				break;
220
			}
221
		}
222
		return $bRetval;
223
	}
224
/**
225
 * register a available theme in the database (gets values from info.php)
226
 * @return bool TRUE if ok
227
 */
228
	private function _registerNewTheme()
229
	{
230
		$bRetval = true;
231
		$sThemeInfoFile = $this->_sThemesBasePath.'/'.$this->_sNewThemeDir.'/info.php';
232
		$aVariables = $this->_getThemeInfo($sThemeInfoFile);
233
		$sql = 'INSERT INTO `'.$this->_aGlobals['TablePrefix'].'addons` '
234
		     . 'SET `type`=\'template\', '
235
		     .     '`function`=\'theme\', '
236
		     .     '`directory`=\''.$aVariables['directory'].'\', '
237
		     .     '`name`=\''.$aVariables['name'].'\', '
238
		     .     '`description`=\''.mysql_real_escape_string($aVariables['description']).'\', '
239
		     .     '`version`=\''.$aVariables['version'].'\', '
240
		     .     '`platform`=\''.$aVariables['platform'].'\', '
241
		     .     '`author`=\''.mysql_real_escape_string($aVariables['author']).'\', '
242
		     .     '`license`=\''.mysql_real_escape_string($aVariables['license']).'\'';
243
		if(!$this->_oDb->query($sql)) {
244
			$sMsg = 'CopyTheme::registerNewTheme('.$this->_sNewThemeName.') >> '
245
			        .$this->_aLang['GENERIC_NOT_UPGRADED'];
246
			$sMsg .= (($this->_aGlobals['Debug']) ? '<br />'.$this->_oDb->get_error() : '');
247
			$this->_setError($sMsg);
248
			$bRetval = false;
249
		}
250
		return $bRetval;
251
	}
252
/**
253
 * modify info-file of copied theme
254
 * @return bool TRUE if ok
255
 */
256
	private function _modifyInfoFile()
257
	{
258
		$bRetval = false;
259
		$sThemeInfoFile = $this->_sThemesBasePath.'/'.$this->_sNewThemeDir.'/info.php';
260
		$aVariables = $this->_getThemeInfo($sThemeInfoFile);
261
		$aVariables['directory']   = $this->_sNewThemeDir;
262
		$aVariables['name']        = $this->_sNewThemeName;
263
		$aVariables['version']     = '0.0.1';
264
		$aVariables['description'] = '(copy): '.$aVariables['description'];
265
		if(file_exists($sThemeInfoFile)) {
266
			$sInfoContent = file_get_contents($sThemeInfoFile);
267
			foreach($aVariables as $key=>$val) {
268
				$sSearch  = '/(\$template_'.$key.'\s*=\s*(["\'])).*?(\2)\s*;/s';
269
				$sReplace = ($val != '' && is_numeric($val[0])) ? '${1}' : '$1';
270
				$sReplace .= $val.'$2;';
271
				$sInfoContent = preg_replace($sSearch, $sReplace, $sInfoContent);
272
			}
273
			// remove trailing "\?\>" to sanitize the php file
274
			$sInfoContent = preg_replace('/\s*?\?>\s*$/', '', $sInfoContent)."\n";
275
			if(file_put_contents($sThemeInfoFile, $sInfoContent) !== false) {
276
				return true;
277
			}
278
		}
279
		$this->_setError('CopyTheme::modifyInfoFile('.$this->_sNewThemeDir.'/info.php) >> '
280
		               .$this->_aLang['GENERIC_NOT_UPGRADED']);
281
		return $bRetval;
282
	}
283
/**
284
 * read old values from old info-file
285
 * @param string $sThemeInfoFile
286
 * @return array
287
 */
288
	private function _getThemeInfo($sThemeInfoFile)
289
	{
290
		if(file_exists($sThemeInfoFile)) {
291
			include $sThemeInfoFile;
292
			return array(
293
				'directory' => $template_directory?$template_directory:null,
294
				'name' => $template_name?$template_name:null,
295
				'version' => $template_version?$template_version:null,
296
				'description' => $template_description?$template_description:null,
297
				'platform' => $template_platform?$template_platform:null,
298
				'author' => $template_author?$template_author:null,
299
				'license' => $template_license?$template_license:null,
300
			);
301
		} else {
302
			return array(
303
				'directory' => null,
304
				'name' => null,
305
				'version' => null,
306
				'description' => null,
307
				'platform' => null,
308
				'author' => null,
309
				'license' => null,
310
			);
311
		}
312
	}
313
/**
314
 * on Error undo all already done copy/create actions
315
 * @param string $dir
316
 */
317
	private function _doRollback($dir)
318
	{
319
		$iFileErrors = 0;
320
		$iDirErrors  = 0;
321
		$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir),
322
												  RecursiveIteratorIterator::CHILD_FIRST);
323
		foreach ($iterator as $path) {
324
			if ($path->isDir()) {
325
				rmdir($path->__toString());
326
			} else {
327
				unlink($path->__toString());
328
			}
329
		}
330
		unset($path);
331
		unset($iterator);
332
		if(file_exists($dir)) { rmdir($dir); }
333
	}
334
/**
335
 * add a new error message to the queue
336
 * @param string $sErrMsg
337
 */
338
	private function _setError($sErrMsg)
339
	{
340
		$this->_aErrors[] = $sErrMsg;
341
	}
342
/**
343
 * clear the errors queue
344
 */
345
	public function clearError()
346
	{
347
		$this->_aErrors = array();
348
	}
349
/**
350
 * true if there is an error otherwise false
351
 * @return bool
352
 */
353
	public function isError()
354
	{
355
		return (sizeof($this->_aErrors) > 0);
356
	}
357
/**
358
 * gets all error messages as multiline string
359
 * @param bool $nl2br true seperates lines by "<br />" else by "\n"
360
 * @return string 
361
 */
362
	public function getError($nl2br = true)
363
	{
364
		$sClue = ($nl2br ? '<br />' : "\n");
365
		$sErrorMsg = implode($sClue, $this->_aErrors);
366
		return $sErrorMsg;
367
	}
368

  
369

  
370
} // end class
0 371

  
branches/2.8.x/wb/admin/addons/CopyThemeHtt.php
1
<?php
2
/**
3
 *
4
 * @category        WBCore
5
 * @package         WBCore_addons
6
 * @author          Werner v.d.Decken
7
 * @copyright       Website Baker Org. e.V.
8
 * @link			http://www.websitebaker2.org/
9
 * @license         http://www.gnu.org/licenses/gpl.html
10
 * @revision        $Revision$
11
 * @filesource		$HeadURL$
12
 * @lastmodified    $Date$
13
 */
14

  
15
class CopyThemeHtt {
16

  
17
	private static $_sSkelPath  = ''; 
18
	private static $_sThemePath = '';
19
	private static $_sOs        = '';
20
	private static $_sFileMode  = '';
21
	private static $_aLang      = '';
22
/**
23
 * import all needed global constants and variables
24
 */
25
	private static function init()
26
	{
27
//		self::$_sSkelPath  = ADMIN_PATH.'/themes/templates/';
28
		self::$_sSkelPath  = ADMIN_PATH.'/skel/themes/htt/';
29
		self::$_sThemePath = THEME_PATH.'/templates/';
30
		self::$_sOs        = OPERATING_SYSTEM;
31
		self::$_sFileMode  = STRING_FILE_MODE;
32
		self::$_aLang      = $GLOBALS['MESSAGE'];
33
	}
34
/**
35
 * returns the difference between default and current theme
36
 * @param string $sSourceDir
37
 * @param string $sDestinationDir
38
 * @param string $sExtension
39
 * @return array
40
 */
41
	public static function getDivList($sSourceDir, $sDestinationDir, $sExtension)
42
	{
43
		$aDestinationTemplates = self::getFiles($sDestinationDir, $sExtension);
44
		$aDefaultTemplates = self::getFiles($sSourceDir, $sExtension);
45
		$aRetval = array_diff($aDefaultTemplates, $aDestinationTemplates);
46
		return $aRetval;
47
	}
48
/**
49
 * copy template files from default theme dir into the current theme dir
50
 * @param array $aFileList
51
 * @return array|null
52
 */
53
	public static function doImport($aFileList)
54
	{
55
		self::init();
56
		$aErrors = array();
57
		if(is_array($aFileList)) {
58
			if(isset($aFileList['none'])) { unset($aFileList['none']); }
59
			if(sizeof($aFileList) > 0 ) {
60
				foreach($aFileList as $sFile) {
61
					$sFile = basename($sFile);
62
					if(copy(self::$_sSkelPath.$sFile, self::$_sThemePath.$sFile)) {
63
						if(self::$_sOs == 'linux') {
64
							chmod(self::$_sThemePath.$sFile, self::$_sFileMode);
65
						}
66
					}else {
67
						$aErrors[] = self::$_aLang['UPLOAD_ERR_CANT_WRITE'].' ['.$sFile.']';
68
					}
69
				}
70
			}
71
		}
72
		if(sizeof($aErrors) > 0) {
73
			return $aErrors;
74
		}else {
75
			return null;
76
		}
77
	}
78
/**
79
 * generate a filelist containing all files with $sExtension from dir $sDirectory
80
 * @param string $sDirectory
81
 * @param string $sExtension
82
 * @return array
83
 */
84
	private static function getFiles($sDirectory, $sExtension)
85
	{
86
		$aRetval = array();
87
		try {
88
			$oIterator = new DirectoryIterator($sDirectory);
89
			foreach ($oIterator as $oFileinfo) {
90
				if ($oFileinfo->isFile() && 
91
				   (pathinfo($oFileinfo->getFilename(), PATHINFO_EXTENSION) == $sExtension))
92
				{
93
					$aRetval[$oFileinfo->getBasename('.'.$sExtension)] = $oFileinfo->getBasename();
94
				}
95
			}
96
		} catch (Exception $e) {
97
			return array();
98
		}
99
		ksort($aRetval);
100
		return $aRetval;
101
	}
102
}
0 103

  
branches/2.8.x/wb/admin/addons/reload.php
1 1
<?php
2 2
/**
3 3
 *
4
 * @category        admin
5
 * @package         addons
6
 * @author          WebsiteBaker Project
7
 * @copyright       2004-2009, Ryan Djurovich
8
 * @copyright       2009-2011, Website Baker Org. e.V.
4
 * @category        WBCore
5
 * @package         WBCore_addons
6
 * @author          Werner v.d.Decken
7
 * @copyright       Website Baker Org. e.V.
9 8
 * @link			http://www.websitebaker2.org/
10 9
 * @license         http://www.gnu.org/licenses/gpl.html
11
 * @platform        WebsiteBaker 2.8.x
12
 * @requirements    PHP 5.2.2 and higher
13
 * @version         $Id$
10
 * @revision        $Revision$
14 11
 * @filesource		$HeadURL$
15 12
 * @lastmodified    $Date$
16
 *
17 13
 */
18 14

  
19 15
/**
20
 * check if there is anything to do
16
 * loop through all resource directories of one type and reload the resources
17
 * @param string $sType type of resource ( module / template / language )
18
 * @return bool
21 19
 */
22
$post_check = array('reload_modules', 'reload_templates', 'reload_languages');
23
foreach ($post_check as $index => $key) {
24
	if (!isset($_POST[$key])) unset($post_check[$index]);
25
}
26
if (count($post_check) == 0) die(header('Location: index.php?advanced'));
27

  
20
	function ReloadAddonLoop($sType)
21
	{
22
		global $database;
23
		$database->query('DELETE FROM `'.TABLE_PREFIX.'addons` WHERE `type`=\''.$sType.'\'');
24
		try{
25
			$oIterator = new DirectoryIterator(WB_PATH.'/'.$sType.'s');
26
			$_Function = 'load_'.$sType;
27
			foreach ($oIterator as $oFileinfo) {
28
				if( ( $oFileinfo->isFile() &&
29
					   $sType == 'language' &&
30
					   preg_match('/^([A-Z]{2}.php)/', $oFileinfo->getBasename())
31
					) ||
32
				    ($oFileinfo->isDir() && $sType != 'language')
33
				  )
34
				{
35
					if(substr($oFileinfo->getBasename(), 0,1) != '.') {
36
						$_Function($oFileinfo->getPathname());
37
					}
38
				}
39
			}
40
		}catch(Exception $e) {
41
			return false;
42
		}
43
		return true;
44
	}
28 45
/**
29 46
 * check if user has permissions to access this file
30 47
 */
31
// include WB configuration file and WB admin class
32
require_once('../../config.php');
33
require_once('../../framework/class.admin.php');
34

  
48
// include all needed core files and check permission
49
	require_once('../../config.php');
50
	require_once('../../framework/class.admin.php');
51
	$aMsg = array();
52
	$aErrors = array();
35 53
// check user permissions for admintools (redirect users with wrong permissions)
36
$admin = new admin('Admintools', 'admintools', false, false);
37

  
38
if ($admin->get_permission('admintools') == false) die(header('Location: ../../index.php'));
39

  
40
// check if the referer URL if available
41
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] :
42
	(isset($HTTP_SERVER_VARS['HTTP_REFERER']) ? $HTTP_SERVER_VARS['HTTP_REFERER'] : '');
43
$referer = '';
44
// if referer is set, check if script was invoked from "admin/modules/index.php"
45
$required_url = ADMIN_URL . '/addons/index.php';
46
if ($referer != '' && (!(strpos($referer, $required_url) !== false || strpos($referer, $required_url) !== false)))
47
	die(header('Location: ../../index.php'));
48

  
49
// include WB functions file
50
require_once(WB_PATH . '/framework/functions.php');
51

  
52
// load WB language file
53
require_once(WB_PATH . '/languages/' . LANGUAGE .'.php');
54

  
55
// create Admin object with admin header
56
$admin = new admin('Addons', '', false, false);
57
$js_back = ADMIN_URL . '/addons/index.php?advanced';
58

  
59
if (!$admin->checkFTAN())
60
{
61
	$admin->print_header();
62
	$admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],$js_back);
63
}
64

  
65
/**
66
 * Reload all specified Addons
67
 */
68
$msg = array();
69
$table = TABLE_PREFIX . 'addons';
70

  
71
foreach ($post_check as $key) {
72
	switch ($key) {
73
		case 'reload_modules':
74
			if ($handle = opendir(WB_PATH . '/modules')) {
75
				// delete modules from database
76
				$sql = "DELETE FROM `$table` WHERE `type` = 'module'";
77
				$database->query($sql);
78

  
79
				// loop over all modules
80
				while(false !== ($file = readdir($handle))) {
81
					if ($file != '' && substr($file, 0, 1) != '.' && $file != 'admin.php' && $file != 'index.php') {
82
						load_module(WB_PATH . '/modules/' . $file);
83
					}
54
	$admin = new admin('Admintools', 'admintools', false, false);
55
	if ($admin->get_permission('admintools'))
56
	{
57
		require_once(WB_PATH . '/framework/functions.php');
58
		require_once(WB_PATH . '/languages/' . LANGUAGE .'.php');
59
	// recreate Admin object without admin header
60
		$admin = new admin('Addons', '', false, false);
61
		$js_back = ADMIN_URL . '/addons/index.php?advanced';
62
	// check transaction
63
		if ($admin->checkFTAN())
64
		{
65
		// start the selected action
66
			if(isset($_POST['cmdCopyTheme']))
67
			{
68
				$sNewTheme = (isset($_POST['ThNewTheme']) ? $_POST['ThNewTheme'] : '');
69
				require(dirname(__FILE__).'/CopyTheme.php');
70
				$ct = new CopyTheme();
71
				$ct->execute(THEME_PATH, $sNewTheme);
72
				if($ct->isError()) {
73
					$aErrors[] = $ct->getError();
74
				}else {
75
					$aMsg[] = $TEXT['THEME_COPY_CURRENT'].' :: '.$MESSAGE['GENERIC_COMPARE'];
84 76
				}
85
				closedir($handle);
86
				// add success message
87
				$msg[] = $MESSAGE['ADDON']['MODULES_RELOADED'];
88

  
89
			} else {
90
				// provide error message and stop
91
				$admin->print_error($MESSAGE['ADDON']['ERROR_RELOAD'], $js_back);
92
			}
93
			break;
94
			
95
		case 'reload_templates':
96
			if ($handle = opendir(WB_PATH . '/templates')) {
97
				// delete templates from database
98
				$sql = "DELETE FROM `$table` WHERE `type` = 'template'";
99
				$database->query($sql);
100

  
101
				// loop over all templates
102
				while(false !== ($file = readdir($handle))) {
103
					if($file != '' AND substr($file, 0, 1) != '.' AND $file != 'index.php') {
104
						load_template(WB_PATH . '/templates/' . $file);
105
					}
77
				unset($ct);
78
		// ---------------------------
79
			}elseif(isset($_POST['cmdCopyTemplate']))
80
			{
81
				$aFileList = (isset($_POST['ThTemplate']) ? $_POST['ThTemplate'] : array());
82
				require(dirname(__FILE__).'/CopyThemeHtt.php');
83
				$x = CopyThemeHtt::doImport($aFileList);
84
				if(is_null($x)) {
85
					$aMsg[] = $TEXT['THEME_IMPORT_HTT'].' :: '.$MESSAGE['GENERIC_COMPARE'];
86
				}else {
87
					$aErrors = array_merge($aErrors, $x);
106 88
				}
107
				closedir($handle);
108
				// add success message
109
				$msg[] = $MESSAGE['ADDON']['TEMPLATES_RELOADED'];
110

  
111
			} else {
112
				// provide error message and stop
113
				$admin->print_header();
114
				$admin->print_error($MESSAGE['ADDON']['ERROR_RELOAD'], $js_back);
115
			}
116
			break;
117

  
118
		case 'reload_languages':
119
			if ($handle = opendir(WB_PATH . '/languages/')) {
120
				// delete languages from database
121
				$sql = "DELETE FROM `$table` WHERE `type` = 'language'";
122
				$database->query($sql);
123
			
124
				// loop over all languages
125
				while(false !== ($file = readdir($handle))) {
126
					if ($file != '' && substr($file, 0, 1) != '.' && $file != 'index.php') {
127
						load_language(WB_PATH . '/languages/' . $file);
89
		// ---------------------------
90
			}elseif(isset($_POST['cmdReload']))
91
			{
92
				$aReloadType = (isset($_POST['reload']) && is_array($_POST['reload'])) ? $_POST['reload'] : array();
93
				foreach($aReloadType as $sType) {
94
					switch($sType) {
95
						case 'modules':
96
						// reload all modules
97
							if(ReloadAddonLoop('module')) {
98
								$aMsg[] = $MESSAGE['ADDON_MODULES_RELOADED'];
99
							}else {
100
								$aErrors[] = $MESSAGE['ADDON_ERROR_RELOAD'];
101
							}
102
							break;
103
						case 'templates':
104
						// reload all templates
105
							if(ReloadAddonLoop('template')) {
106
								$aMsg[] = $MESSAGE['ADDON_TEMPLATES_RELOADED'];
107
							}else {
108
								$aErrors[] = $MESSAGE['ADDON_ERROR_RELOAD'];
109
							}
110
							break;
111
						case 'languages':
112
						// reload all languages
113
							if(ReloadAddonLoop('language')) {
114
								$aMsg[] = $MESSAGE['ADDON_LANGUAGES_RELOADED'];
115
							}else {
116
								$aErrors[] = $MESSAGE['ADDON_ERROR_RELOAD'];
117
							}
118
							break;
119
						default:
120
							$aErrors[] = $MESSAGE['GENERIC_NOT_COMPARE'].' ['.$sType.']';
121
							break;
128 122
					}
129 123
				}
130
				closedir($handle);
131
				// add success message
132
				$msg[] = $MESSAGE['ADDON']['LANGUAGES_RELOADED'];
133
				
134
			} else {
135
				// provide error message and stop
136
				$admin->print_header();
137
				$admin->print_error($MESSAGE['ADDON']['ERROR_RELOAD'], $js_back);
124
			}else {
125
		// ---------------------------
126
				$aErrors[] = $MESSAGE['ADDON_ERROR_RELOAD'];
138 127
			}
139
			break;
128
		}else { // invalid FTAN
129
			$aErrors[] = $MESSAGE['GENERIC_SECURITY_ACCESS'];
130
		}
131
	}else { // no permission
132
		$aErrors[] = $MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'];
140 133
	}
141
}
142

  
134
	if(sizeof($aErrors) > 0)  {
135
// output error message
136
		$admin->print_header();
137
		$admin->print_error(implode('<br />', $aErrors), $js_back);
138
	}else {
143 139
// output success message
144
$admin->print_header();
145
$admin->print_success(implode($msg, '<br />'), $js_back);
146
$admin->print_footer();
140
		$admin->print_header();
141
		$admin->print_success(implode('<br />', $aMsg), $js_back);
142
		$admin->print_footer();
143
	}
branches/2.8.x/wb/admin/addons/index.php
46 46
 *	Obsolete as we are using blocks ... see "parsing the blocks" section
47 47
 */
48 48
$display_none = "style=\"display: none;\"";
49
if($admin->get_permission('modules') != true) 	$template->set_var('DISPLAY_MODULES', $display_none);	
50
if($admin->get_permission('templates') != true)	$template->set_var('DISPLAY_TEMPLATES', $display_none);
51
if($admin->get_permission('languages') != true)	$template->set_var('DISPLAY_LANGUAGES', $display_none);
52
if($admin->get_permission('admintools') != true)	$template->set_var('DISPLAY_ADVANCED', $display_none);
49
if($admin->get_permission('modules') != true) {	$template->set_var('DISPLAY_MODULES', $display_none); }
50
if($admin->get_permission('templates') != true) { $template->set_var('DISPLAY_TEMPLATES', $display_none); }
51
if($admin->get_permission('languages') != true) { $template->set_var('DISPLAY_LANGUAGES', $display_none); }
52
if($admin->get_permission('admintools') != true) { $template->set_var('DISPLAY_ADVANCED', $display_none); }
53 53

  
54
if(!isset($_GET['advanced']) || $admin->get_permission('admintools') != true)
54
if(!isset($_GET['advanced']) || $admin->get_permission('admintools') != true) {
55 55
	$template->set_var('DISPLAY_RELOAD', $display_none);
56

  
56
}
57 57
/**
58 58
 *	Insert section names and descriptions
59 59
 */
......
80 80
/**
81 81
 *	Parsing the blocks ...
82 82
 */
83
if ( $admin->get_permission('modules') == true) $template->parse('main_block', "modules_block", true);
84
if ( $admin->get_permission('templates') == true) $template->parse('main_block', "templates_block", true);
85
if ( $admin->get_permission('languages') == true) $template->parse('main_block', "languages_block", true);
86
if ( isset($_GET['advanced']) AND $admin->get_permission('admintools') == true) $template->parse('main_block', "reload_block", true);
83
if ( $admin->get_permission('modules') == true) { $template->parse('main_block', "modules_block", true); }
84
if ( $admin->get_permission('templates') == true) { $template->parse('main_block', "templates_block", true); }
85
if ( $admin->get_permission('languages') == true) { $template->parse('main_block', "languages_block", true); }
86
// start advanced block
87
if ( isset($_GET['advanced']) AND $admin->get_permission('admintools') == true) {
88
	$template->set_var(array(
89
		'TXT_THEME_COPY_CURRENT'  => $TEXT['THEME_COPY_CURRENT'],
90
		'TXT_THEME_NEW_NAME'      => $TEXT['THEME_NEW_NAME'],
91
		'TXT_THEME_CURRENT'       => $TEXT['THEME_CURRENT'],
92
		'TXT_THEME_START_COPY'    => $TEXT['THEME_START_COPY'],
93
		'TXT_THEME_IMPORT_HTT'    => $TEXT['THEME_IMPORT_HTT'],
94
		'TXT_THEME_SELECT_HTT'    => $TEXT['THEME_SELECT_HTT'],
95
		'TXT_THEME_NOMORE_HTT'    => $TEXT['THEME_NOMORE_HTT'],
96
		'TXT_THEME_START_IMPORT'  => $TEXT['THEME_START_IMPORT'],
97
		'MESSAGE_THEME_COPY_CURRENT'               => $MESSAGE['THEME_COPY_CURRENT'],
98
		'MESSAGE_THEME_ALREADY_EXISTS'             => $MESSAGE['THEME_ALREADY_EXISTS'],
99
		'MESSAGE_THEME_INVALID_SOURCE_DESTINATION' => $MESSAGE['THEME_INVALID_SOURCE_DESTINATION'],
100
		'MESSAGE_THEME_DESTINATION_READONLY'       => $MESSAGE['THEME_DESTINATION_READONLY'],
101
		'MESSAGE_THEME_IMPORT_HTT'                 => $MESSAGE['THEME_IMPORT_HTT'],
102
		)
103
	);
104
// start copy current theme
105
	$sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'addons` '
106
		 . 'WHERE `directory`=\''.DEFAULT_THEME.'\' AND `function`=\'theme\'';
107
	$tmp = $database->get_one($sql);
108
	$template->set_var('THEME_DEFAULT_NAME', $tmp);
109
// end copy current theme
110
// start template import
111
	include(dirname(__FILE__).'/CopyThemeHtt.php');
112
	$aTplList = CopyThemeHtt::getDivList(ADMIN_PATH.'/themes/templates',
113
	                                     THEME_PATH.'/templates', 'htt');
114
	$sOptionList = '';
115
	if(sizeof($aTplList)) {
116
		foreach($aTplList as $key=>$val) {
117
			$sOptionList .= '<option value="'.$val.'">'.$key.'</option>'."\n";
118
		}
119
	}else {
120
		$sOptionList = '<option value="none">'.$TEXT['THEME_NOMORE_HTT'].'</option>'."\n";
121
	}
122
	$template->set_var('THEME_TEMPLATE_LIST', $sOptionList);
123
// end template import
124
	$template->parse('main_block', "reload_block", true);
125
}
126
// end advanced block
87 127

  
88 128
/**
89 129
 *	Parse template object
......
95 135
 *	Print admin footer
96 136
 */
97 137
$admin->print_footer();
98

  
99
?>
branches/2.8.x/wb/templates/allcss/index.php
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 2
<?php
2 3
/**
3 4
 * $Id$
......
32 33

  
33 34
// TEMPLATE CODE STARTS BELOW
34 35
?>
35
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
36
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
37 36
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
38 37
<head>
39 38
	<meta http-equiv="Content-Type" content="text/html; charset=<?php 
......
45 44
	<link rel="stylesheet" type="text/css" href="<?php
46 45
	echo TEMPLATE_DIR; ?>/print.css" media="print" />
47 46
	<title><?php page_title('', '[WEBSITE_TITLE]'); ?></title>
48
	<?php
47
<?php
49 48
	// automatically include optional WB module files (frontend.css, frontend.js)
50
	if (function_exists('register_frontend_modfiles')) {
51
		register_frontend_modfiles('css');
52
		// register_frontend_modfiles('jquery');
53
		register_frontend_modfiles('js');
54
	} ?>
49
	register_frontend_modfiles('css');
50
	// register_frontend_modfiles('javascript');
51
	register_frontend_modfiles('js');
52
?>
55 53
</head>
56 54

  
57 55
<body>
......
142 140
</div>
143 141
<?php 
144 142
// automatically include optional WB module file frontend_body.js)
145
if (function_exists('register_frontend_modfiles_body')) { register_frontend_modfiles_body(); } 
143
	register_frontend_modfiles_body();
146 144
?>
147 145
</body>
148 146
</html>
branches/2.8.x/wb/templates/round/index.php
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 2
<?php
2 3
/**
3 4
 * $Id$
......
32 33

  
33 34
// TEMPLATE CODE STARTS BELOW
34 35
?>
35
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
36
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
37 36
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
38 37
<head>
39 38
	<meta http-equiv="Content-Type" content="text/html; charset=<?php 
......
45 44
	<link rel="stylesheet" type="text/css" href="<?php
46 45
		echo TEMPLATE_DIR; ?>/print.css" media="print" />
47 46
	<title><?php page_title('', '[WEBSITE_TITLE]'); ?></title>
48
	<?php
47
<?php
49 48
	// automatically include optional WB module files (frontend.css, frontend.js)
50
	if (function_exists('register_frontend_modfiles')) {
51
		register_frontend_modfiles('css');
52
		// register_frontend_modfiles('jquery');
53
		register_frontend_modfiles('js');
54
	} ?>
49
	register_frontend_modfiles('css');
50
	// register_frontend_modfiles('javascript');
51
	register_frontend_modfiles('js');
52
?>
55 53
</head>
56 54

  
57 55
<body>
......
249 247
</table>
250 248
<?php 
251 249
// automatically include optional WB module file frontend_body.js)
252
if (function_exists('register_frontend_modfiles_body')) { register_frontend_modfiles_body(); } 
250
register_frontend_modfiles_body();
253 251
?>
254 252
</body>
255 253
</html>
branches/2.8.x/wb/templates/simple/index.php
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 2
<?php
2 3
/**
3 4
 * $Id$
......
32 33

  
33 34
// TEMPLATE CODE STARTS BELOW
34 35
?>
35
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
36
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
37 36
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
38 37
<head>
39 38
	<meta http-equiv="Content-Type" content="text/html; charset=<?php 
40 39
	echo defined('DEFAULT_CHARSET') ? DEFAULT_CHARSET : 'utf-8'; ?>" />
41 40
	<meta name="description" content="<?php page_description(); ?>" />
42 41
	<meta name="keywords" content="<?php page_keywords(); ?>" />
43
	<?php 
42
<?php 
44 43
	// automatically include optional WB module files (frontend.css, frontend.js)
45
	if (function_exists('register_frontend_modfiles')) {
46
		register_frontend_modfiles('css');
47
		register_frontend_modfiles('js');
48
	} ?>
44
	register_frontend_modfiles('css');
45
	register_frontend_modfiles('js');
46
?>
49 47
	<link rel="stylesheet" type="text/css" href="<?php 
50 48
		echo TEMPLATE_DIR; ?>/template.css" media="screen,projection" />
51 49
	<link rel="stylesheet" type="text/css" href="<?php 
......
102 100
</table>
103 101
<?php 
104 102
// automatically include optional WB module file frontend_body.js)
105
if (function_exists('register_frontend_modfiles_body')) { register_frontend_modfiles_body(); } 
103
	register_frontend_modfiles_body();
106 104
?>
107 105
</body>
108 106
</html>
branches/2.8.x/wb/templates/wb_theme/info.php
34 34
$template_license_terms		= '-';
35 35
$template_description		= 'Default backend theme for Website Baker 2.8.';
36 36

  
37
?>
37
?>
38

  

Also available in: Unified diff