Project

General

Profile

« Previous | Next » 

Revision 5

Added by stefan about 19 years ago

Restructured frontend code and fixed various bugs

View differences:

functions.php
32 32

  
33 33
// Stop this file from being accessed directly
34 34
if(!defined('WB_PATH')) { exit('Direct access to this file is not allowed'); }
35

  
35

  
36 36
// Define that this file has been loaded
37
define('FUNCTIONS_FILE_LOADED', true);
37
define('FUNCTIONS_FILE_LOADED', true);

38 38

  
39 39
// Function to remove a non-empty directory
40 40
function rm_full_dir($directory)
......
145 145

  
146 146
	// Now delete the folder
147 147
	return $list;
148
}
149

  
150
// Function to get a list of home folders not to show
151
function get_home_folders() {
152
	global $database, $admin;
153
	$home_folders = array();
154
	// Only return home folders is this feature is enabled
155
	if(HOME_FOLDERS) {
156
		$query_home_folders = $database->query("SELECT home_folder FROM ".TABLE_PREFIX."users WHERE home_folder != '".$admin->get_home_folder()."'");
157
		if($query_home_folders->numRows() > 0) {
158
			while($folder = $query_home_folders->fetchRow()) {
159
				$home_folders[$folder['home_folder']] = $folder['home_folder'];
160
			}
161
		}
162
		function remove_home_subs($directory = '/', $home_folders) {
148
}

149

  
150
// Function to get a list of home folders not to show

151
function get_home_folders() {

152
	global $database, $admin;

153
	$home_folders = array();

154
	// Only return home folders is this feature is enabled

155
	if(HOME_FOLDERS) {

156
		$query_home_folders = $database->query("SELECT home_folder FROM ".TABLE_PREFIX."users WHERE home_folder != '".$admin->get_home_folder()."'");

157
		if($query_home_folders->numRows() > 0) {

158
			while($folder = $query_home_folders->fetchRow()) {

159
				$home_folders[$folder['home_folder']] = $folder['home_folder'];

160
			}

161
		}

162
		function remove_home_subs($directory = '/', $home_folders) {

163 163
			if($handle = opendir(WB_PATH.MEDIA_DIRECTORY.$directory)) {
164
				// Loop through the dirs to check the home folders sub-dirs are not shown
164
				// Loop through the dirs to check the home folders sub-dirs are not shown

165 165
			   while(false !== ($file = readdir($handle))) {
166 166
					if(substr($file, 0, 1) != '.' AND $file != 'CVS' AND $file != 'index.php') {
167
						if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file)) {
168
							if($directory != '/') { $file = $directory.'/'.$file; } else { $file = '/'.$file; }
169
							foreach($home_folders AS $hf) {
170
								$hf_length = strlen($hf);
171
								if($hf_length > 0) {
172
									if(substr($file, 0, $hf_length+1) == $hf) {
173
										$home_folders[$file] = $file;
174
									}
175
								}
176
							}
177
							$home_folders = remove_home_subs($file, $home_folders);
178
						}
179
					}
180
				}
181
			}
182
			return $home_folders;
183
		}
184
		$home_folders = remove_home_subs('/', $home_folders);
185
	}
186
	return $home_folders;
187
}
188

  
189
// Function to create directories
190
function make_dir($dir_name, $dir_mode = OCTAL_DIR_MODE) {
191
	if(!file_exists($dir_name)) {
192
		$umask = umask(0);
193
		mkdir($dir_name, $dir_mode);
194
		umask($umask);
195
		return true;
196
	} else {
197
		return false;	
198
	}
199
}
200

  
201
// Function to chmod files and directories
202
function change_mode($name) {
203
	if(OPERATING_SYSTEM != 'windows') {
204
		// Only chmod if os is not windows
205
		if(is_dir($name)) {
206
			$mode = OCTAL_DIR_MODE;
207
		} else {
208
			$mode = OCTAL_FILE_MODE;
209
		}
210
		if(file_exists($name)) {
211
			$umask = umask(0);
212
			chmod($name, $mode);
213
			umask($umask);
214
			return true;
215
		} else {
216
			return false;	
217
		}
218
	} else {
219
		return true;
220
	}
167
						if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file)) {
168
							if($directory != '/') { $file = $directory.'/'.$file; } else { $file = '/'.$file; }
169
							foreach($home_folders AS $hf) {
170
								$hf_length = strlen($hf);
171
								if($hf_length > 0) {
172
									if(substr($file, 0, $hf_length+1) == $hf) {
173
										$home_folders[$file] = $file;
174
									}
175
								}
176
							}
177
							$home_folders = remove_home_subs($file, $home_folders);
178
						}
179
					}
180
				}
181
			}
182
			return $home_folders;
183
		}
184
		$home_folders = remove_home_subs('/', $home_folders);
185
	}
186
	return $home_folders;
221 187
}
222 188

  
189
// Function to create directories
190
function make_dir($dir_name, $dir_mode = OCTAL_DIR_MODE) {
191
	if(!file_exists($dir_name)) {
192
		$umask = umask(0);
193
		mkdir($dir_name, $dir_mode);
194
		umask($umask);
195
		return true;
196
	} else {
197
		return false;	
198
	}
199
}
200

  
201
// Function to chmod files and directories
202
function change_mode($name) {
203
	if(OPERATING_SYSTEM != 'windows') {
204
		// Only chmod if os is not windows
205
		if(is_dir($name)) {
206
			$mode = OCTAL_DIR_MODE;
207
		} else {
208
			$mode = OCTAL_FILE_MODE;
209
		}
210
		if(file_exists($name)) {
211
			$umask = umask(0);
212
			chmod($name, $mode);
213
			umask($umask);
214
			return true;
215
		} else {
216
			return false;	
217
		}
218
	} else {
219
		return true;
220
	}
221
}
222

  
223 223
// Function to figure out if a parent exists
224 224
function is_parent($page_id) {
225 225
	global $database;
......
310 310
		$ids = array_merge($ids, $parent_ids);
311 311
	}
312 312
	return $ids;
313
}
314

  
315
// Function to genereate page trail
316
function get_page_trail($page_id) {
317
	return implode(',', array_reverse(get_parent_ids($page_id)));
318 313
}
319 314

  
315
// Function to genereate page trail
316
function get_page_trail($page_id) {
317
	return implode(',', array_reverse(get_parent_ids($page_id)));
318
}
319

  
320 320
// Function to get all sub pages id's
321 321
function get_subs($parent, $subs) {
322 322
	// Connect to the database
......
333 333
	// Return subs array
334 334
	return $subs;
335 335
}
336

  
336

  
337 337
// Function to convert a page title to a page filename
338
function page_filename($string) {
339
	// First, translate any non-english characters to their english equivalents
340
	require(WB_PATH.'/framework/convert.php');
341
   $string = strtr($string, $conversion_array);
342
	// Now replace spaces with page spcacer
343
	$string = str_replace(' ', PAGE_SPACER, $string);
344
	// Now remove all bad characters
345
	$bad = array(
346
	'\'', /* /  */ '"', /* " */	'<', /* < */	'>', /* > */
347
	'{', /* { */	'}', /* } */	'[', /* [ */	']', /* ] */	'`', /* ` */
348
	'!', /* ! */	'@', /* @ */	'#', /* # */	'$', /* $ */	'%', /* % */
349
	'^', /* ^ */	'&', /* & */	'*', /* * */	'(', /* ( */	')', /* ) */
350
	'=', /* = */	'+', /* + */	'|', /* | */	'/', /* / */	'\\', /* \ */
351
	';', /* ; */	':', /* : */	',', /* , */	'?' /* ? */
352
	);
353
	$string = str_replace($bad, '', $string);
354
	// Now convert to lower-case
355
	$string = strtolower($string);
356
	// Now remove multiple page spacers
357
	$string = str_replace(PAGE_SPACER.PAGE_SPACER, PAGE_SPACER, $string);
358
	// Clean any page spacers at the end of string
359
	$string = str_replace(PAGE_SPACER, ' ', $string);
360
	$string = trim($string);
361
	$string = str_replace(' ', PAGE_SPACER, $string);
362
	// If there are any weird language characters, this will protect us against possible problems they could cause
363
	$string = str_replace(array('%2F', '%'), array('/', ''), urlencode($string));
338
function page_filename($string) {

339
	// First, translate any non-english characters to their english equivalents

340
	require(WB_PATH.'/framework/convert.php');

341
   $string = strtr($string, $conversion_array);

342
	// Now replace spaces with page spcacer

343
	$string = str_replace(' ', PAGE_SPACER, $string);

344
	// Now remove all bad characters

345
	$bad = array(

346
	'\'', /* /  */ '"', /* " */	'<', /* < */	'>', /* > */

347
	'{', /* { */	'}', /* } */	'[', /* [ */	']', /* ] */	'`', /* ` */

348
	'!', /* ! */	'@', /* @ */	'#', /* # */	'$', /* $ */	'%', /* % */

349
	'^', /* ^ */	'&', /* & */	'*', /* * */	'(', /* ( */	')', /* ) */

350
	'=', /* = */	'+', /* + */	'|', /* | */	'/', /* / */	'\\', /* \ */

351
	';', /* ; */	':', /* : */	',', /* , */	'?' /* ? */

352
	);

353
	$string = str_replace($bad, '', $string);

354
	// Now convert to lower-case

355
	$string = strtolower($string);

356
	// Now remove multiple page spacers

357
	$string = str_replace(PAGE_SPACER.PAGE_SPACER, PAGE_SPACER, $string);

358
	// Clean any page spacers at the end of string

359
	$string = str_replace(PAGE_SPACER, ' ', $string);

360
	$string = trim($string);

361
	$string = str_replace(' ', PAGE_SPACER, $string);

362
	// If there are any weird language characters, this will protect us against possible problems they could cause

363
	$string = str_replace(array('%2F', '%'), array('/', ''), urlencode($string));

364 364
	// Finally, return the cleaned string
365 365
	return $string;
366
}
367

  
366
}

367

  
368 368
// Function to convert a desired media filename to a clean filename
369
function media_filename($string) {
370
	// First, translate any non-english characters to their english equivalents
371
	require(WB_PATH.'/framework/convert.php');
369
function media_filename($string) {

370
	// First, translate any non-english characters to their english equivalents

371
	require(WB_PATH.'/framework/convert.php');

372 372
   $string = strtr($string, $conversion_array);
373
	// Now remove all bad characters
374
	$bad = array(
375
	'\'', // '
376
	'"', // "
377
	'`', // `
378
	'!', // !
379
	'@', // @
380
	'#', // #
381
	'$', // $
382
	'%', // %
383
	'^', // ^
384
	'&', // &
385
	'*', // *
386
	'=', // =
387
	'+', // +
388
	'|', // |
389
	'/', // /
390
	'\\', // \
391
	';', // ;
392
	':', // :
393
	',', // ,
394
	'?' // ?
395
	);
396
	$string = str_replace($bad, '', $string);
397
	// Clean any page spacers at the end of string
398
	$string = trim($string);
373
	// Now remove all bad characters

374
	$bad = array(

375
	'\'', // '

376
	'"', // "

377
	'`', // `

378
	'!', // !

379
	'@', // @

380
	'#', // #

381
	'$', // $

382
	'%', // %

383
	'^', // ^

384
	'&', // &

385
	'*', // *

386
	'=', // =

387
	'+', // +

388
	'|', // |

389
	'/', // /

390
	'\\', // \

391
	';', // ;

392
	':', // :

393
	',', // ,

394
	'?' // ?

395
	);

396
	$string = str_replace($bad, '', $string);

397
	// Clean any page spacers at the end of string

398
	$string = trim($string);

399 399
	// Finally, return the cleaned string
400 400
	return $string;
401
}
401
}

402 402

  
403
// Function to work out a page link
403
// Function to work out a page link

404 404
if(!function_exists('page_link')) {
405 405
	function page_link($link) {
406 406
		// Check for :// in the link (used in URL's)
......
409 409
		} else {
410 410
			return $link;
411 411
		}
412
	}
412
	}

413 413
}
414 414

  
415 415
// Create a new file in the pages directory
416 416
function create_access_file($filename,$page_id,$level) {
417
	global $admin;
417 418
	if(!is_writable(WB_PATH.PAGES_DIRECTORY.'/')) {
418 419
		$admin->print_error($MESSAGE['PAGES']['CANNOT_CREATE_ACCESS_FILE']);
419 420
	} else {
......
431 432
		// The depth of the page directory in the directory hierarchy
432 433
		// '/pages' is at depth 1
433 434
		$pages_dir_depth=count(explode('/',PAGES_DIRECTORY))-1;
434
		// Work-out how many ../'s we need to get to the index page
435
		// Work-out how many ../'s we need to get to the index page

435 436
		$index_location = '';
436 437
		for($i = 0; $i < $level + $pages_dir_depth; $i++) {
437 438
			$index_location .= '../';
......
607 608
	// And finally, return either true or false
608 609
	return $$action;
609 610
}
610

  
611
// Function to delete a page
612
function delete_page($page_id) {
613
	
614
	global $admin, $database;
615
	
616
	// Find out more about the page
617
	$database = new database();
618
	$query = "SELECT page_id,menu_title,page_title,level,link,parent,modified_by,modified_when FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'";
619
	$results = $database->query($query);
620
	if($database->is_error()) {
621
		$admin->print_error($database->get_error());
622
	}
623
	if($results->numRows() == 0) {
624
		$admin->print_error($MESSAGE['PAGES']['NOT_FOUND']);
625
	}
626
	$results_array = $results->fetchRow();
627
	$parent = $results_array['parent'];
628
	$level = $results_array['level'];
629
	$link = $results_array['link'];
630
	$page_title = stripslashes($results_array['page_title']);
631
	$menu_title = stripslashes($results_array['menu_title']);
632
	
633
	// Get the sections that belong to the page
634
	$query_sections = $database->query("SELECT section_id,module FROM ".TABLE_PREFIX."sections WHERE page_id = '$page_id'");
635
	if($query_sections->numRows() > 0) {
636
		while($section = $query_sections->fetchRow()) {
637
			// Set section id
638
			$section_id = $section['section_id'];
639
			// Include the modules delete file if it exists
640
			if(file_exists(WB_PATH.'/modules/'.$section['module'].'/delete.php')) {
641
				require(WB_PATH.'/modules/'.$section['module'].'/delete.php');
642
			}
643
		}
644
	}
645
	
646
	// Update the pages table
647
	$query = "DELETE FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'";
648
	$database->query($query);
649
	if($database->is_error()) {
650
		$admin->print_error($database->get_error());
651
	}
652
	
653
	// Update the sections table
654
	$query = "DELETE FROM ".TABLE_PREFIX."sections WHERE page_id = '$page_id'";
655
	$database->query($query);
656
	if($database->is_error()) {
657
		$admin->print_error($database->get_error());
658
	}
659
	
660
	// Include the ordering class or clean-up ordering
661
	require_once(WB_PATH.'/framework/class.order.php');
662
	$order = new order(TABLE_PREFIX.'pages', 'position', 'page_id', 'parent');
663
	$order->clean($parent);
664
	
665
	// Unlink the page access file and directory
666
	$directory = WB_PATH.PAGES_DIRECTORY.$link;
667
	$filename = $directory.'.php';
668
	$directory .= '/';
669
	if(file_exists($filename)) {
670
		if(!is_writable(WB_PATH.PAGES_DIRECTORY.'/')) {
671
			$admin->print_error($MESSAGE['PAGES']['CANNOT_DELETE_ACCESS_FILE']);
672
		} else {
673
			unlink($filename);
674
			if(file_exists($directory)) {
675
				rm_full_dir($directory);
676
			}
677
		}
678
	}
679
	
680
}
681 611

  
682
?>
612
// Function to delete a page
613
function delete_page($page_id) {
614
	
615
	global $admin, $database;
616
	
617
	// Find out more about the page
618
	$database = new database();
619
	$query = "SELECT page_id,menu_title,page_title,level,link,parent,modified_by,modified_when FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'";
620
	$results = $database->query($query);
621
	if($database->is_error()) {
622
		$admin->print_error($database->get_error());
623
	}
624
	if($results->numRows() == 0) {
625
		$admin->print_error($MESSAGE['PAGES']['NOT_FOUND']);
626
	}
627
	$results_array = $results->fetchRow();
628
	$parent = $results_array['parent'];
629
	$level = $results_array['level'];
630
	$link = $results_array['link'];
631
	$page_title = stripslashes($results_array['page_title']);
632
	$menu_title = stripslashes($results_array['menu_title']);
633
	
634
	// Get the sections that belong to the page
635
	$query_sections = $database->query("SELECT section_id,module FROM ".TABLE_PREFIX."sections WHERE page_id = '$page_id'");
636
	if($query_sections->numRows() > 0) {
637
		while($section = $query_sections->fetchRow()) {
638
			// Set section id
639
			$section_id = $section['section_id'];
640
			// Include the modules delete file if it exists
641
			if(file_exists(WB_PATH.'/modules/'.$section['module'].'/delete.php')) {
642
				require(WB_PATH.'/modules/'.$section['module'].'/delete.php');
643
			}
644
		}
645
	}
646
	
647
	// Update the pages table
648
	$query = "DELETE FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'";
649
	$database->query($query);
650
	if($database->is_error()) {
651
		$admin->print_error($database->get_error());
652
	}
653
	
654
	// Update the sections table
655
	$query = "DELETE FROM ".TABLE_PREFIX."sections WHERE page_id = '$page_id'";
656
	$database->query($query);
657
	if($database->is_error()) {
658
		$admin->print_error($database->get_error());
659
	}
660
	
661
	// Include the ordering class or clean-up ordering
662
	require_once(WB_PATH.'/framework/class.order.php');
663
	$order = new order(TABLE_PREFIX.'pages', 'position', 'page_id', 'parent');
664
	$order->clean($parent);
665
	
666
	// Unlink the page access file and directory
667
	$directory = WB_PATH.PAGES_DIRECTORY.$link;
668
	$filename = $directory.'.php';
669
	$directory .= '/';
670
	if(file_exists($filename)) {
671
		if(!is_writable(WB_PATH.PAGES_DIRECTORY.'/')) {
672
			$admin->print_error($MESSAGE['PAGES']['CANNOT_DELETE_ACCESS_FILE']);
673
		} else {
674
			unlink($filename);
675
			if(file_exists($directory)) {
676
				rm_full_dir($directory);
677
			}
678
		}
679
	}
680
	
681
}
682

  
683
?>

Also available in: Unified diff