Revision 989
Added by aldus over 15 years ago
trunk/wb/framework/frontend.functions.php | ||
---|---|---|
338 | 338 |
// define default baselink and filename for optional module javascript and stylesheet files |
339 | 339 |
$head_links = ""; |
340 | 340 |
if($file_id == "css") { |
341 |
$base_link = '<link href="'.WB_URL.'/modules/{MODULE_DIRECTORY}/frontend.css"';
|
|
341 |
$base_link = '<link href="'.WB_URL.'/modules/{MODULE_DIRECTORY}/frontend.css"';
|
|
342 | 342 |
$base_link.= ' rel="stylesheet" type="text/css" media="screen" />'; |
343 | 343 |
$base_file = "frontend.css"; |
344 | 344 |
} else { |
... | ... | |
346 | 346 |
$base_file = "frontend.js"; |
347 | 347 |
} |
348 | 348 |
|
349 |
// gather information for all models embedded on actual page
|
|
349 |
// gather information for all models embedded on actual page
|
|
350 | 350 |
$page_id = $wb->page_id; |
351 |
$query_modules = $database->query("SELECT module FROM " .TABLE_PREFIX ."sections
|
|
352 |
WHERE page_id=$page_id AND module<>'wysiwyg'"); |
|
351 |
$query_modules = $database->query("SELECT module FROM " .TABLE_PREFIX ."sections
|
|
352 |
WHERE page_id=$page_id AND module<>'wysiwyg'");
|
|
353 | 353 |
|
354 |
while($row = $query_modules->fetchRow()) {
|
|
355 |
// check if page module directory contains a frontend.js or frontend.css file |
|
356 |
if(file_exists(WB_PATH ."/modules/" .$row['module'] ."/$base_file")) {
|
|
357 |
// create link with frontend.js or frontend.css source for the current module |
|
354 |
while($row = $query_modules->fetchRow()) {
|
|
355 |
// check if page module directory contains a frontend.js or frontend.css file
|
|
356 |
if(file_exists(WB_PATH ."/modules/" .$row['module'] ."/$base_file")) {
|
|
357 |
// create link with frontend.js or frontend.css source for the current module
|
|
358 | 358 |
$tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link); |
359 | 359 |
|
360 |
// define constant indicating that the register_frontent_files was invoked
|
|
360 |
// define constant indicating that the register_frontent_files was invoked
|
|
361 | 361 |
if($file_id == 'css') { |
362 | 362 |
if(!defined('MOD_FRONTEND_CSS_REGISTERED')) define('MOD_FRONTEND_CSS_REGISTERED', true); |
363 | 363 |
} else { |
364 | 364 |
if(!defined('MOD_FRONTEND_JAVASCRIPT_REGISTERED')) define('MOD_FRONTEND_JAVASCRIPT_REGISTERED', true); |
365 | 365 |
} |
366 |
|
|
367 |
// ensure that frontend.js or frontend.css is only added once per module type |
|
368 |
if(strpos($head_links, $tmp_link) === false) { |
|
366 |
// ensure that frontend.js or frontend.css is only added once per module type |
|
367 |
if(strpos($head_links, $tmp_link) === false) { |
|
369 | 368 |
$head_links .= $tmp_link ."\n"; |
370 | 369 |
} |
371 |
} |
|
372 |
} |
|
373 |
// include the Javascript email protection function |
|
374 |
if($file_id != 'css' && file_exists(WB_PATH .'/modules/output_filter/js/mdcr.js')) { |
|
375 |
$head_links .= '<script type="text/javascript" src="'.WB_URL.'/modules/output_filter/js/mdcr.js"></script>' ."\n"; |
|
370 |
}; |
|
376 | 371 |
} |
377 |
|
|
378 |
// write out links with all external module javascript/CSS files, remove last line feed |
|
372 |
|
|
373 |
// include the Javascript email protection function |
|
374 |
if( $file_id != 'css' && file_exists(WB_PATH .'/modules/droplets/js/mdcr.js')) { |
|
375 |
$head_links .= '<script type="text/javascript" src="'.WB_URL.'/modules/droplets/js/mdcr.js"></script>\n'; |
|
376 |
} elseif( $file_id != 'css' && file_exists(WB_PATH .'/modules/output_filter/js/mdcr.js')) { |
|
377 |
$head_links .= '<script type="text/javascript" src="'.WB_URL.'/modules/output_filter/js/mdcr.js"></script>\n'; |
|
378 |
} |
|
379 | 379 |
echo $head_links; |
380 | 380 |
} |
381 | 381 |
} |
trunk/wb/index.php | ||
---|---|---|
92 | 92 |
} |
93 | 93 |
} |
94 | 94 |
|
95 |
if(file_exists(WB_PATH .'/modules/output_filter/filter-routines.php')) { |
|
96 |
// reconnect to database |
|
97 |
$database = new database(); |
|
98 |
// include the output filter module routines |
|
99 |
@require_once(WB_PATH .'/modules/output_filter/filter-routines.php'); |
|
100 |
|
|
101 |
if(function_exists('filter_frontend_output')) { |
|
102 |
// store output in variable for filtering |
|
103 |
@ob_start(); |
|
104 |
require(WB_PATH.'/templates/'.TEMPLATE.'/index.php'); |
|
105 |
$frontend_output = ob_get_contents(); |
|
106 |
@ob_end_clean(); |
|
107 |
// Display the filtered output on the frontend |
|
108 |
echo filter_frontend_output($frontend_output); |
|
109 |
die; |
|
110 |
} |
|
111 |
} |
|
95 |
// Backwards compatible Frontend filter support |
|
96 |
// include the output filter module routines |
|
97 |
if(file_exists(WB_PATH .'/modules/output_filter/filter-routines.php')) {@require_once(WB_PATH .'/modules/output_filter/filter-routines.php');} |
|
98 |
// Load Droplet engine |
|
99 |
if(file_exists(WB_PATH .'/modules/droplets/droplets.php')) { @require_once(WB_PATH .'/modules/droplets/droplets.php'); } |
|
112 | 100 |
|
113 |
// Display the template (no output filtering) |
|
101 |
//Get pagecontent in buffer for Droplets and/or Filter operations |
|
102 |
ob_start(); |
|
114 | 103 |
require(WB_PATH.'/templates/'.TEMPLATE.'/index.php'); |
104 |
$output = ob_get_contents(); |
|
105 |
ob_end_clean(); |
|
115 | 106 |
|
107 |
if(function_exists('evalDroplets')) { $output = evalDroplets($output); } |
|
108 |
if(function_exists('filter_frontend_output')) { $output = filter_frontend_output($output); } |
|
109 |
echo $output; |
|
110 |
|
|
116 | 111 |
?> |
trunk/wb/search/search.php | ||
---|---|---|
196 | 196 |
$string = preg_replace('/\s+/', ' ', $string); |
197 | 197 |
$string = trim($string); |
198 | 198 |
// remove some bad chars |
199 |
$string = str_replace ( array('[[',']]'),'', $string); |
|
199 | 200 |
$string = preg_replace('/(^|\s+)[|.]+(?=\s+|$)/', '', $string); |
200 | 201 |
$search_display_string = htmlspecialchars($string); |
201 | 202 |
$search_entities_string = addslashes(umlauts_to_entities(htmlspecialchars($string))); |
trunk/wb/search/search_modext.php | ||
---|---|---|
89 | 89 |
$match_array = array(); |
90 | 90 |
$excerpt_array = array(); |
91 | 91 |
$word = '('.implode('|', $search_words).')'; |
92 |
|
|
93 |
//Filter droplets from the page data |
|
94 |
preg_match_all('~\[\[(.*?)\]\]~', $text, $matches); |
|
95 |
foreach ($matches[1] as $match) { |
|
96 |
$text = str_replace('[['.$match.']]', '', $text); |
|
97 |
} |
|
98 |
|
|
92 | 99 |
// Build the regex-string |
93 | 100 |
if(strpos(strtoupper(PHP_OS), 'WIN')===0) { // windows -> see below |
94 | 101 |
$str1=".!?;"; |
... | ... | |
123 | 130 |
} else { // compatible, but may be very slow with large pages |
124 | 131 |
if(preg_match_all($regex, $text, $match_array)) { |
125 | 132 |
foreach($match_array[1] AS $string) { |
126 |
if(!preg_match('/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\./', $string)) // skip excerpts with email-addresses |
|
133 |
if(!preg_match('/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\./', $string)) // skip excerpts with email-addresses
|
|
127 | 134 |
$excerpt_array[] = trim($string); |
135 |
|
|
128 | 136 |
} |
129 | 137 |
} |
130 | 138 |
} |
trunk/wb/modules/droplets/delete_droplet.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
require('../../config.php'); |
|
12 |
|
|
13 |
// Get id |
|
14 |
if(!isset($_GET['droplet_id']) OR !is_numeric($_GET['droplet_id'])) { |
|
15 |
header("Location: ".ADMIN_URL."/pages/index.php"); |
|
16 |
} else { |
|
17 |
$droplet_id = $_GET['droplet_id']; |
|
18 |
} |
|
19 |
|
|
20 |
// Include WB admin wrapper script |
|
21 |
require_once(WB_PATH.'/framework/class.admin.php'); |
|
22 |
require_once(WB_PATH.'/framework/functions.php'); |
|
23 |
|
|
24 |
// check website baker platform (with WB 2.7, Admin-Tools were moved out of settings dialogue) |
|
25 |
if(file_exists(ADMIN_PATH .'/admintools/tool.php')) { |
|
26 |
$admintool_link = ADMIN_URL .'/admintools/index.php'; |
|
27 |
$module_edit_link = ADMIN_URL .'/admintools/tool.php?tool=droplets'; |
|
28 |
$admin = new admin('admintools', 'admintools'); |
|
29 |
} else { |
|
30 |
$admintool_link = ADMIN_URL .'/settings/index.php?advanced=yes#administration_tools"'; |
|
31 |
$module_edit_link = ADMIN_URL .'/settings/tool.php?tool=droplets'; |
|
32 |
$admin = new admin('Settings', 'settings_advanced'); |
|
33 |
} |
|
34 |
|
|
35 |
// Delete droplet |
|
36 |
$database->query("DELETE FROM ".TABLE_PREFIX."mod_droplets WHERE id = '$droplet_id' LIMIT 1"); |
|
37 |
|
|
38 |
// Check if there is a db error, otherwise say successful |
|
39 |
if($database->is_error()) { |
|
40 |
$admin->print_error($database->get_error(), WB_URL.'/modules/droplets/modify_droplet.php?droplet_id='.$droplet_id); |
|
41 |
} else { |
|
42 |
$admin->print_success($TEXT['SUCCESS'], $module_edit_link); |
|
43 |
} |
|
44 |
|
|
45 |
// Print admin footer |
|
46 |
$admin->print_footer(); |
|
47 |
|
|
48 |
?> |
|
0 | 49 |
trunk/wb/modules/droplets/info.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
$module_directory = 'droplets'; |
|
12 |
$module_name = 'Droplets'; |
|
13 |
$module_function = 'tool'; |
|
14 |
$module_version = '1.0.0'; |
|
15 |
$module_platform = '2.8.x'; |
|
16 |
$module_author = 'Ruud and pcwacht'; |
|
17 |
$module_license = 'GPL'; |
|
18 |
$module_description = 'This tool allows you to manage your local Droplets.'; |
|
19 |
|
|
20 |
$module_home = 'http://www.websitebakers.com/pages/droplets/about-droplets.php'; |
|
21 |
$module_guid = '9F2AC2DF-C3E1-4E15-BA4C-2A86E37FE6E5'; |
|
22 |
?> |
|
0 | 23 |
trunk/wb/modules/droplets/droplets.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
function evalDroplets ($wb_page_data) { |
|
12 |
global $database; |
|
13 |
$parameter = array(); |
|
14 |
preg_match_all('~\[\[(.*?)\]\]~', $wb_page_data, $matches); |
|
15 |
foreach ($matches[1] as $match) { |
|
16 |
if (strpos($match,"?")) { |
|
17 |
list ($droplet,$params) = explode("?",$match); |
|
18 |
if(!empty($params)) { |
|
19 |
$params = str_replace("&", "&", $params); // replace & to single & |
|
20 |
$paramarray = explode("&",$params); //create array of parms as parm=value |
|
21 |
foreach ($paramarray as $paramelement) { |
|
22 |
$parameterTemp = explode("=", $paramelement,2); |
|
23 |
if (count($parameterTemp) == 2) |
|
24 |
$parameter[$parameterTemp[0]] = $parameterTemp[1]; |
|
25 |
else |
|
26 |
$parameter['parm'] = $parameterTemp[0]; |
|
27 |
} |
|
28 |
} |
|
29 |
} else { |
|
30 |
$droplet = $match; |
|
31 |
$parameter = ""; |
|
32 |
} |
|
33 |
$query_content = $database->query("SELECT * FROM ".TABLE_PREFIX."mod_droplets WHERE name = '$droplet' AND active = 1 "); |
|
34 |
if ($query_content && $query_content->numRows() > 0){ |
|
35 |
$fetch_content = $query_content->fetchRow(); |
|
36 |
$codedata = ($fetch_content['code']); |
|
37 |
if(is_array($parameter)) extract($parameter, EXTR_SKIP); |
|
38 |
$newvalue = eval($codedata); |
|
39 |
if ($newvalue == "" && !$newvalue === true) |
|
40 |
$newvalue = "<font color=\"red\">Error in: $match, no correct returnvalue.</font>"; |
|
41 |
if ($newvalue === true) |
|
42 |
$newvalue = ""; |
|
43 |
$wb_page_data = str_replace("[[".$match."]]", $newvalue, $wb_page_data); |
|
44 |
} |
|
45 |
} |
|
46 |
return $wb_page_data; |
|
47 |
} |
|
48 |
?> |
|
0 | 49 |
trunk/wb/modules/droplets/example/PreviousPage.php | ||
---|---|---|
1 |
//:Create a previous link to your page |
|
2 |
//:Display a link to the previous page on the same menu level |
|
3 |
$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, '[if(class==menu-current){[level] [sib] [sibCount] [parent]}]', '', '', ''); +list($nLevel, $nSib, $nSibCount, $nParent) = explode(' ', $info); + +// show previous +$prv = $nSib > 1 ? $nSib - 1 : 0; +if ($prv > 0) { +return show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, "[if(sib==$prv){[a][menu_title]</a> <<}]", '', '', ''); +} +else +return '(no previous)'; + Index: trunk/wb/modules/droplets/example/Text2Image.php |
trunk/wb/modules/droplets/example/Text2Image.php | ||
---|---|---|
1 |
//:Create an image from the textparameter |
|
2 |
//:Use [[text2image?text=The text to create]] |
|
3 |
//clean up old files.. +$dir = WB_PATH.'/temp/'; +$dp = opendir($dir) or die ('Could not open '.$dir); +while ($file = readdir($dp)) { + if ((eregi('img_',$file)) && (filemtime($dir.$file)) < (strtotime('-10 minutes'))) { + unlink($dir.$file); + } +} +closedir($dp); + +$imgfilename = 'img_'.rand().'_'.time().'.jpg'; +//create image +$padding = 0; +$font = 3; + +$height = imagefontheight($font) + ($padding * 2); +$width = imagefontwidth($font) * strlen($text) + ($padding * 2); +$image_handle = imagecreatetruecolor($width, $height); +$text_color = imagecolorallocate($image_handle, 0, 0, 0); +$background_color = imagecolorallocate($image_handle, 255, 255, 255); +$bg_height = imagesy($image_handle); +$bg_width = imagesx($image_handle); +imagefilledrectangle($image_handle, 0, 0, $bg_width, $bg_height, $background_color); +imagestring($image_handle, $font, $padding, $padding, $text, $text_color); +imagejpeg($image_handle,WB_PATH.'/temp/'.$imgfilename,100); +imagedestroy($image_handle); + +return '<img src="'.WB_URL.'/temp/'.$imgfilename.'" style="border:0px;margin:0px;padding:0px;vertical-align:middle;" />'; |
trunk/wb/modules/droplets/example/NextPage.php | ||
---|---|---|
1 |
//:Create a next link to your page |
|
2 |
//:Display a link to the next page on the same menu level |
|
3 |
$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, '[if(class==menu-current){[level] [sib] [sibCount] [parent]}]', '', '', ''); +list($nLevel, $nSib, $nSibCount, $nParent) = explode(' ', $info); + +// show next +$nxt = $nSib < $nSibCount ? $nSib + 1 : 0; +if ($nxt > 0) { +return show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, "[if(sib==$nxt){>> [a][menu_title]</a>}]", '', '', ''); +} +else return '(no next)'; Index: trunk/wb/modules/droplets/example/Oneliner.php |
trunk/wb/modules/droplets/example/Oneliner.php | ||
---|---|---|
1 |
//:Create a random oneliner on your page |
|
2 |
//:Use: [[OneLiner]]. The file with the oneliner data is located in /modules/droplets/example/oneliners.txt |
|
3 |
$line = file (dirname(__FILE__)."/example/oneliners.txt"); +shuffle($line); +return $line[0]; Index: trunk/wb/modules/droplets/example/Skype.php |
trunk/wb/modules/droplets/example/Skype.php | ||
---|---|---|
1 |
//:Your skype status as an image |
|
2 |
//:Commandline to use: [[skype?user=skypename]] |
|
3 |
return '<img src="http://mystatus.skype.com/'.$user.'.png?t='.time().'" alt="My Skype status" />'; |
trunk/wb/modules/droplets/example/EmailFilter.php | ||
---|---|---|
1 |
//:Emailfiltering on your output - output filtering with the options below - Mailto links can be encrypted by a Javascript |
|
2 |
//:usage: [[EmailFilter]] + |
|
3 |
// You can configure the output filtering with the options below. |
|
4 |
// Tip: Mailto links can be encrypted by a Javascript function. |
|
5 |
// To make use of this option, one needs to add the PHP code |
|
6 |
// register_frontend_modfiles('js'); |
|
7 |
// into the <head> section of the index.php of your template. |
|
8 |
// Without this modification, only the @ character in the mailto part will be replaced. |
|
9 |
|
|
10 |
// Basic Email Configuration: |
|
11 |
// Filter Email addresses in text 0 = no, 1 = yes - default 1 |
|
12 |
$filter_settings['email_filter'] = '1'; |
|
13 |
|
|
14 |
// Filter Email addresses in mailto links 0 = no, 1 = yes - default 1 |
|
15 |
$filter_settings['mailto_filter'] = '1'; |
|
16 |
|
|
17 |
// Email Replacements, replace the '@' and the '.' by default (at) and (dot) |
|
18 |
$filter_settings['at_replacement'] = '(at)'; |
|
19 |
$filter_settings['dot_replacement'] = '(dot)'; |
|
20 |
|
|
21 |
// No need to change stuff underneatch unless you know what you are doing. |
|
22 |
|
|
23 |
// work out the defined output filter mode: possible output filter modes: [0], 1, 2, 3, 6, 7 |
|
24 |
// 2^0 * (0.. disable, 1.. enable) filtering of mail addresses in text |
|
25 |
// 2^1 * (0.. disable, 1.. enable) filtering of mail addresses in mailto links |
|
26 |
// 2^2 * (0.. disable, 1.. enable) Javascript mailto encryption (only if mailto filtering enabled) |
|
27 |
|
|
28 |
// only filter output if we are supposed to |
|
29 |
if($filter_settings['email_filter'] != '1' && $filter_settings['mailto_filter'] != '1'){ |
|
30 |
// nothing to do ... |
|
31 |
return true; |
|
32 |
} |
|
33 |
|
|
34 |
// check if non mailto mail addresses needs to be filtered |
|
35 |
$output_filter_mode = ($filter_settings['email_filter'] == '1') ? 1 : 0; // 0|1 |
|
36 |
|
|
37 |
// check if mailto mail addresses needs to be filtered |
|
38 |
if($filter_settings['mailto_filter'] == '1') { |
|
39 |
$output_filter_mode = $output_filter_mode + 2; // 0|2 |
|
40 |
|
|
41 |
// check if Javascript mailto encryption is enabled (call register_frontend_functions in the template) |
|
42 |
$search = '<script type="text/javascript" src="' .WB_URL .'/modules/droplets/js/mdcr.js"></script>'; |
|
43 |
if(strpos($wb_page_data, $search) !== false) { |
|
44 |
$output_filter_mode = $output_filter_mode + 4; // 0|4 |
|
45 |
} |
|
46 |
} |
|
47 |
|
|
48 |
// define some constants so we do not call the database in the callback function again |
|
49 |
define('OUTPUT_FILTER_MODE', (int) $output_filter_mode); |
|
50 |
define('OUTPUT_FILTER_AT_REPLACEMENT', $filter_settings['at_replacement']); |
|
51 |
define('OUTPUT_FILTER_DOT_REPLACEMENT', $filter_settings['dot_replacement']); |
|
52 |
|
|
53 |
// function to filter mail addresses embedded in text or mailto links before outputing them on the frontend |
|
54 |
if (!function_exists('filter_mail_addresses')) { |
|
55 |
function filter_mail_addresses($match) { |
|
56 |
|
|
57 |
// check if required output filter mode is defined |
|
58 |
if(!(defined('OUTPUT_FILTER_MODE') && defined('OUTPUT_FILTER_MODE') && defined('OUTPUT_FILTER_MODE'))) { |
|
59 |
return $match[0]; |
|
60 |
} |
|
61 |
|
|
62 |
$search = array('@', '.'); |
|
63 |
$replace = array(OUTPUT_FILTER_AT_REPLACEMENT ,OUTPUT_FILTER_DOT_REPLACEMENT); |
|
64 |
|
|
65 |
// check if the match contains the expected number of subpatterns (6|8) |
|
66 |
if(count($match) == 8) { |
|
67 |
/** |
|
68 |
OUTPUT FILTER FOR EMAIL ADDRESSES EMBEDDED IN TEXT |
|
69 |
**/ |
|
70 |
|
|
71 |
// 1.. text mails only, 3.. text mails + mailto (no JS), 7 text mails + mailto (JS) |
|
72 |
if(!in_array(OUTPUT_FILTER_MODE, array(1,3,7))) return $match[0]; |
|
73 |
|
|
74 |
// do not filter mail addresses included in input tags (<input ... value = "test@mail) |
|
75 |
if (strpos($match[6], 'value') !== false) return $match[0]; |
|
76 |
|
|
77 |
// filtering of non mailto email addresses enabled |
|
78 |
return str_replace($search, $replace, $match[0]); |
|
79 |
|
|
80 |
} elseif(count($match) == 6) { |
|
81 |
/** |
|
82 |
OUTPUT FILTER FOR EMAIL ADDRESSES EMBEDDED IN MAILTO LINKS |
|
83 |
**/ |
|
84 |
|
|
85 |
// 2.. mailto only (no JS), 3.. text mails + mailto (no JS), 6.. mailto only (JS), 7.. all filters active |
|
86 |
if(!in_array(OUTPUT_FILTER_MODE, array(2,3,6,7))) return $match[0]; |
|
87 |
|
|
88 |
// check if last part of the a href link: >xxxx</a> contains a email address we need to filter |
|
89 |
$pattern = '#[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}#i'; |
|
90 |
if(preg_match_all($pattern, $match[5], $matches)) { |
|
91 |
foreach($matches as $submatch) { |
|
92 |
foreach($submatch as $value) { |
|
93 |
// replace all . and all @ in email address parts by (dot) and (at) strings |
|
94 |
$match[5] = str_replace($value, str_replace($search, $replace, $value), $match[5]); |
|
95 |
} |
|
96 |
} |
|
97 |
} |
|
98 |
|
|
99 |
// check if Javascript encryption routine is enabled |
|
100 |
if(in_array(OUTPUT_FILTER_MODE, array(6,7))) { |
|
101 |
/** USE JAVASCRIPT ENCRYPTION FOR MAILTO LINKS **/ |
|
102 |
|
|
103 |
// extract possible class and id attribute from ahref link |
|
104 |
preg_match('/class\s*?=\s*?("|\')(.*?)\1/ix', $match[0], $class_attr); |
|
105 |
$class_attr = empty($class_attr) ? '' : 'class="' . $class_attr[2] . '" '; |
|
106 |
preg_match('/id\s*?=\s*?("|\')(.*?)\1/ix', $match[0], $id_attr); |
|
107 |
$id_attr = empty($id_attr) ? '' : 'id="' . $id_attr[2] . '" '; |
|
108 |
|
|
109 |
// preprocess mailto link parts for further usage |
|
110 |
$search = array('@', '.', '_', '-'); $replace = array('F', 'Z', 'X', 'K'); |
|
111 |
$email_address = str_replace($search, $replace, strtolower($match[2])); |
|
112 |
$email_subject = rawurlencode(html_entity_decode($match[3])); |
|
113 |
|
|
114 |
// create a random encryption key for the Caesar cipher |
|
115 |
mt_srand((double)microtime()*1000000); // (PHP < 4.2.0) |
|
116 |
$shift = mt_rand(1, 25); |
|
117 |
|
|
118 |
// encrypt the email using an adapted Caesar cipher |
|
119 |
$encrypted_email = ""; |
|
120 |
for($i = strlen($email_address) -1; $i > -1; $i--) { |
|
121 |
if(preg_match('#[FZXK0-9]#', $email_address[$i], $characters)) { |
|
122 |
$encrypted_email .= $email_address[$i]; |
|
123 |
} else { |
|
124 |
$encrypted_email .= chr((ord($email_address[$i]) -97 + $shift) % 26 + 97); |
|
125 |
} |
|
126 |
} |
|
127 |
$encrypted_email .= chr($shift + 97); |
|
128 |
|
|
129 |
// build the encrypted Javascript mailto link |
|
130 |
$mailto_link = "<a {$class_attr}{$id_attr}href=\"javascript:mdcr('$encrypted_email','$email_subject')\">" .$match[5] ."</a>"; |
|
131 |
|
|
132 |
return $mailto_link; |
|
133 |
|
|
134 |
} else { |
|
135 |
/** DO NOT USE JAVASCRIPT ENCRYPTION FOR MAILTO LINKS **/ |
|
136 |
|
|
137 |
// as minimum protection, replace replace @ in the mailto part by (at) |
|
138 |
// dots are not transformed as this would transform my.name@domain.com into: my(dot)name(at)domain(dot)com |
|
139 |
|
|
140 |
// rebuild the mailto link from the subpatterns (at the missing characters " and </a>") |
|
141 |
return $match[1] .str_replace('@', OUTPUT_FILTER_AT_REPLACEMENT, $match[2]) .$match[3] .'"' .$match[4] .$match[5] .'</a>'; |
|
142 |
// if you want to protect both, @ and dots, comment out the line above and remove the comment from the line below |
|
143 |
// return $match[1] .str_replace($search, $replace, $match[2]) .$match[3] .'"' .$match[4] .$match[5] .'</a>'; |
|
144 |
} |
|
145 |
|
|
146 |
} |
|
147 |
|
|
148 |
// number of subpatterns do not match the requirements ... do nothing |
|
149 |
return $match[0]; |
|
150 |
} |
|
151 |
} |
|
152 |
|
|
153 |
// first search part to find all mailto email addresses |
|
154 |
$pattern = '#(<a[^<]*href\s*?=\s*?"\s*?mailto\s*?:\s*?)([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})([^"]*?)"([^>]*>)(.*?)</a>'; |
|
155 |
// second part to find all non mailto email addresses |
|
156 |
$pattern .= '|(value\s*=\s*"|\')??\b([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})\b#i'; |
|
157 |
|
|
158 |
// Sub 1:\b(<a.[^<]*href\s*?=\s*?"\s*?mailto\s*?:\s*?) --> "<a id="yyy" class="xxx" href = " mailto :" ignoring white spaces |
|
159 |
// Sub 2:([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}) --> the email address in the mailto: part of the mail link |
|
160 |
// Sub 3:([^"]*?)" --> possible ?Subject&cc... stuff attached to the mail address |
|
161 |
// Sub 4:([^>]*>) --> all class or id statements after the mailto but before closing ..> |
|
162 |
// Sub 5:(.*?)</a>\b --> the mailto text; all characters between >xxxxx</a> |
|
163 |
// Sub 6:|\b([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})\b --> email addresses which may appear in the text (require word boundaries) |
|
164 |
$content = $wb_page_data; |
|
165 |
// find all email addresses embedded in the content and filter them using a callback function |
|
166 |
$content = preg_replace_callback($pattern, 'filter_mail_addresses', $content); |
|
167 |
$wb_page_data = $content; |
|
168 |
return true; |
|
169 |
|
trunk/wb/modules/droplets/example/Lorem.php | ||
---|---|---|
1 |
//:Create Lorum Ipsum text |
|
2 |
//:Use: [[Lorem?blocks=6]] (max 6 paragraphs) |
|
3 |
$lorem = array(); |
|
4 |
$lorem[] = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut odio. Nam sed est. Nam a risus et est iaculis adipiscing. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ut justo. In tincidunt viverra nisl. Donec dictum malesuada magna. Curabitur id nibh auctor tellus adipiscing pharetra. Fusce vel justo non orci semper feugiat. Cras eu leo at purus ultrices tristique.<br /><br />"; |
|
5 |
$lorem[] = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.<br /><br />"; |
|
6 |
$lorem[] = "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.<br /><br />"; |
|
7 |
$lorem[] = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.<br /><br />"; |
|
8 |
$lorem[] = "Cras consequat magna ac tellus. Duis sed metus sit amet nunc faucibus blandit. Fusce tempus cursus urna. Sed bibendum, dolor et volutpat nonummy, wisi justo convallis neque, eu feugiat leo ligula nec quam. Nulla in mi. Integer ac mauris vel ligula laoreet tristique. Nunc eget tortor in diam rhoncus vehicula. Nulla quis mi. Fusce porta fringilla mauris. Vestibulum sed dolor. Aliquam tincidunt interdum arcu. Vestibulum eget lacus. Curabitur pellentesque egestas lectus. Duis dolor. Aliquam erat volutpat. Aliquam erat volutpat. Duis egestas rhoncus dui. Sed iaculis, metus et mollis tincidunt, mauris dolor ornare odio, in cursus justo felis sit amet arcu. Aenean sollicitudin. Duis lectus leo, eleifend mollis, consequat ut, venenatis at, ante.<br /><br />"; |
|
9 |
$lorem[] = "Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.<br /><br />"; |
|
10 |
|
|
11 |
$blocks = (int)$blocks - 1; |
|
12 |
if ($blocks <= 0) $blocks = 0; |
|
13 |
if ($blocks > 5) $blocks = 5; |
|
14 |
$returnvalue = ""; |
|
15 |
for ( $i=0 ; $i<=$blocks ; $i++) { |
|
16 |
$returnvalue .= $lorem[$i]; |
|
17 |
} |
|
18 |
return $returnvalue; |
trunk/wb/modules/droplets/example/SearchBox.php | ||
---|---|---|
1 |
//:Create a searchbox |
|
2 |
//:Creates a serachbox on the position of [[searchbox]]. Optional parameter "?msg=the search message" |
|
3 |
global $TEXT; |
|
4 |
$return_value = true; |
|
5 |
if (!isset($msg)) $msg='search this site..'; |
|
6 |
$j = "onfocus=\"if(this.value=='$msg'){this.value='';this.style.color='#000';}else{this.select();}\" |
|
7 |
onblur=\"if(this.value==''){this.value='$msg';this.style.color='#b3b3b3';}\""; |
|
8 |
if(SHOW_SEARCH) { |
|
9 |
$return_value = '<div class="searchbox">'; |
|
10 |
$return_value .= '<form action="'.WB_URL.'/search/index'.PAGE_EXTENSION.'" method="get" name="search" class="searchform" id="search">'; |
|
11 |
$return_value .= '<input style="color:#b3b3b3;" type="text" name="string" size="25" class="textbox" value="'.$msg.'" '.$j.' /> '; |
|
12 |
$return_value .= '</form>'; |
|
13 |
$return_value .= '</div>'; |
|
14 |
} |
|
15 |
return $return_value; |
trunk/wb/modules/droplets/example/LoginBox.php | ||
---|---|---|
1 |
//:Puts a Login / Logout box on your page. |
|
2 |
//:Use: [[LoginBox]]. Remember to enable frontend login in your website settings. |
|
3 |
global $wb, $TEXT, $MENU; |
|
4 |
$return_value = " "; |
|
5 |
if(FRONTEND_LOGIN == 'enabled' && VISIBILITY != 'private' && $wb->get_session('USER_ID') == '') { |
|
6 |
$return_value = '<form name="login" action="'.LOGIN_URL.'" method="post" class="login_table">'; |
|
7 |
$return_value .= '<h2>'.$TEXT['LOGIN'].'</h2>'; |
|
8 |
$return_value .= $TEXT['USERNAME'].':<input type="text" name="username" style="text-transform: lowercase;" /><br />'; |
|
9 |
$return_value .= $TEXT['PASSWORD'].':<input type="password" name="password" /><br />'; |
|
10 |
$return_value .= '<input type="submit" name="submit" value="'.$TEXT['LOGIN'].'" class="dbutton" /><br />'; |
|
11 |
$return_value .= '<a href="'.FORGOT_URL.'">'.$TEXT['FORGOT_DETAILS'].'</a><br />'; |
|
12 |
if(is_numeric(FRONTEND_SIGNUP)) |
|
13 |
$return_value .= '<a href="'.SIGNUP_URL.'">'.$TEXT['SIGNUP'].'</a>'; |
|
14 |
$return_value .= '</form>'; |
|
15 |
} elseif(FRONTEND_LOGIN == 'enabled' && is_numeric($wb->get_session('USER_ID'))) { |
|
16 |
$return_value = '<form name="logout" action="'.LOGOUT_URL.'" method="post" class="login_table">'; |
|
17 |
$return_value .= '<h2>'.$TEXT['LOGGED_IN'].'</h2>'; |
|
18 |
$return_value .= $TEXT['WELCOME_BACK'].', '.$wb->get_display_name().'<br />'; |
|
19 |
$return_value .= '<input type="submit" name="submit" value="'.$MENU['LOGOUT'].'" class="dbutton" /><br />'; |
|
20 |
$return_value .= '<a href="'.PREFERENCES_URL.'">'.$MENU['PREFERENCES'].'</a><br />'; |
|
21 |
$return_value .= '<a href="'.ADMIN_URL.'/index.php" target="_blank">'.$TEXT['ADMINISTRATION'].'</a>'; |
|
22 |
$return_value .= '</form>'; |
|
23 |
} |
|
24 |
return $return_value; |
trunk/wb/modules/droplets/example/ModifiedWhen.php | ||
---|---|---|
1 |
//:Displays the last modification time of the current page |
|
2 |
//:Use [[ModifiedWhen]] |
|
3 |
global $database, $wb; +if (PAGE_ID>0) { + $query=$database->query("SELECT modified_when FROM ".TABLE_PREFIX."pages where page_id=".PAGE_ID); + $mod_details=$query->fetchRow(); + return "This page was last modified on ".date("d/m/Y",$mod_details[0]). " at ".date("H:i",$mod_details[0])."."; +} |
trunk/wb/modules/droplets/example/RandomImage.php | ||
---|---|---|
1 |
//:Get a random image from a folder in the MEDIA folder. |
|
2 |
//:Commandline to use: [[RandomImage?dir=subfolder_in_mediafolder]] |
|
3 |
$folder=opendir(WB_PATH.MEDIA_DIRECTORY.'/'.$dir.'/.'); +$names = array(); +while ($file = readdir($folder)) { + $ext=strtolower(substr($file,-4)); + if ($ext==".jpg"||$ext==".gif"||$ext==".png"){ + $names[count($names)] = $file; + } +} +closedir($folder); +shuffle($names); +$image=$names[0]; +$name=substr($image,0,-4); +return '<img src="'.WB_URL.MEDIA_DIRECTORY.'/'.$dir.'/'.$image.'" alt="'.$name.'" width="'.$width.'" height="'.$height.'"/>'; Index: trunk/wb/modules/droplets/example/SiteModified.php |
trunk/wb/modules/droplets/example/SiteModified.php | ||
---|---|---|
1 |
//:Create information on when your site was last updated. |
|
2 |
//:Create information on when your site was last updated. Any page update counts. |
|
3 |
global $database, $wb; +if (PAGE_ID>0) { + $query=$database->query("SELECT max(modified_when) FROM ".TABLE_PREFIX."pages"); + $mod_details=$query->fetchRow(); + return "This site was last modified on ".date("d/m/Y",$mod_details[0]). " at ".date("H:i",$mod_details[0])."."; +} |
trunk/wb/modules/droplets/example/ParentPage.php | ||
---|---|---|
1 |
//:Create a parent link to your page |
|
2 |
//:Display a link to the parent page of the current page |
|
3 |
$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, '[if(class==menu-current){[level] [sib] [sibCount] [parent]}]', '', '', ''); +list($nLevel, $nSib, $nSibCount, $nParent) = explode(' ', $info); + +// show up level +if ($nLevel > 0) { +$lev = $nLevel - 1; +return show_menu2(0, SM2_ROOT, SM2_CURR, SM2_CRUMB|SM2_BUFFER, "[if(level==$lev){[a][menu_title]</a>}]", '', '', ''); +} +else +return '(no parent)'; + Index: trunk/wb/modules/droplets/example/oneliners.txt |
trunk/wb/modules/droplets/example/oneliners.txt | ||
---|---|---|
1 |
A bug in the code is worth two in the documentation. |
|
2 |
According to my calculations the problem doesn't exist. |
|
3 |
A computer's attention span is as long as its power cord. |
|
4 |
A computer scientist is someone who fixes things that aren't broken. |
|
5 |
Adding manpower to a late software project makes it later. |
|
6 |
Air conditioned environment - Do NOT open Windows! |
|
7 |
All computers wait at the same speed. |
|
8 |
All wiyht. Rho sritched mg kegtops awound? |
|
9 |
Willyoupleasehelpmefixmykeyboard?Thespacebarisbroken! |
|
10 |
All you need to know is the user interface. |
|
11 |
Alpha. Software undergoes alpha testing as a first step in getting user feedback. Alpha is Latin for "doesn't work." |
|
12 |
Any programming language is at its best before it is implemented and used. |
|
13 |
Any program that runs right is obsolete. |
|
14 |
A paperless office has about as much chance as a paperless bathroom. |
|
15 |
A printer consists of three main parts: the case, the jammed paper tray and the blinking red light. |
|
16 |
A Life? Cool! Where can I download one of those from? |
|
17 |
A program is never finished until the programmer dies. |
|
18 |
ASCII stupid question, get a stupid ANSI! |
|
19 |
As far as we know, our computer has never had an undetected error. |
|
20 |
A user friendly computer first requires a friendly user. |
|
21 |
A user will find any interface design intuitive...with enough practice. |
|
22 |
Backup not found: (A)bort (R)etry (P)anic |
|
23 |
Bad or missing mouse driver. Spank the cat [Y/N]? |
|
24 |
Be aware of Programmers who carry screwdrivers. |
|
25 |
Best file compression around: "DEL *.*" = 100% compression |
|
26 |
Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for "still doesn't work." |
|
27 |
Bug? That's not a bug, that's a feature. |
|
28 |
Build a system that even a fool can use, and only a fool will use it. |
|
29 |
Buy a Pentium IV 2GHz so you can reboot faster. |
|
30 |
Cannot load Windows 95, Incorrect DOS Version. |
|
31 |
COFFEE.EXE Missing---Insert Cup and Press Any Key. |
|
32 |
Compatible: Gracefully accepts erroneous data from any source. |
|
33 |
Computer analyst to programmer: "You start coding. I'll go find out what they want." |
|
34 |
Computer and car salesmen differ in that the latter know when they are lying. |
|
35 |
Computer programmers do it byte by byte. |
|
36 |
Computer programmers don't byte, they nibble a bit. |
|
37 |
Computers are a more fun way to do the same work you'd have to do without them. |
|
38 |
Computers are like air-conditioners: both stop working, if you open windows. |
|
39 |
Computers are not intelligent. They only think they are. |
|
40 |
Computers are unreliable, but humans are even more unreliable. |
|
41 |
Computers can never replace human stupidity. |
|
42 |
Computer Science: solving today's problems tomorrow. |
|
43 |
Computers follow your orders, not your intentions. |
|
44 |
Computers make very fast, very accurate mistakes. |
|
45 |
Crashing is the only thing windows does quickly. |
|
46 |
Daddy, what does FORMATTING DRIVE C mean? |
|
47 |
Disclaimer: Any errors in spelling, tact, or fact are transmission errors. |
|
48 |
Disinformation is not as good as datinformation. |
|
49 |
Don't compute and drive; the life you save may be your own. |
|
50 |
Don't document the program; program the document. |
|
51 |
Don't hit the keys so hard, it hurts. |
|
52 |
Don't let the computer bugs bite! |
|
53 |
DOS=HIGH? I knew it was on something! |
|
54 |
DOS Tip #1: Add DEVICE=FNGRCROS.SYS to CONFIG.SYS |
|
55 |
DOS Tip #2: Add BUGS=OFF to your CONFIG.SYS |
|
56 |
Email returned to sender -- insufficient voltage. |
|
57 |
Enter any 11-digit prime number to continue... |
|
58 |
Error:015: Unable to exit Windows. Try the door. |
|
59 |
Error reading FAT record: Try the SKINNY one? (Y/N) |
|
60 |
Ever notice how fast Windows runs? Neither did I... |
|
61 |
Every bug you find is the last one. |
|
62 |
Every time I type 'win', I loose ... |
|
63 |
Excuse me for butting in, but I'm interrupt-driven. |
|
64 |
Failure is not an option, it comes bundled with the software. |
|
65 |
.....File not found. Should I fake it? (Y/N) |
|
66 |
For any problem there is a solution that is simple, quick, and ultimately worse than the problem. |
|
67 |
Hardware: The parts of a computer system that can be kicked. |
|
68 |
Hi, my name is Any Key. Please don't hit me! |
|
69 |
Hiroshima..45........Tjernobil..86........Windows..95.... |
|
70 |
Hit any user to continue. |
|
71 |
Home is where the computer is plugged in. |
|
72 |
How an engineer writes a program: Start by debugging an empty file... |
|
73 |
I am a computer, dumber than any human and smarter than an administrator. |
|
74 |
If at first you don't succeed, call it version 1.0. |
|
75 |
If a train station is where the train stops, what is a work station? |
|
76 |
I finally made my stupid computer faster; I dropped it out of the window, and it went really fast. |
|
77 |
If the automobile had followed the same development cycle as the computer, a Rolls-Royce today would cost $100, get a million miles to the gallon, and explode once a year, illing everyone inside. |
|
78 |
If the pen is mightier than the sword, and a picture is worth a thousand words, how dangerous is a fax? |
|
79 |
If your computer says, "Printer out of Paper," this problem cannot be resolved by continuously clicking the "OK" button. |
|
80 |
I have a dream: 1073741824 bytes free. |
|
81 |
I haven't lost my mind; it's backed up on tape somewhere. |
|
82 |
I hit the CTRL key but I'm still not in control! |
|
83 |
I'm writing a book. I've got the page numbers done. |
|
84 |
In a few minutes a computer can make a mistake so great that it would take many men many months to equal it. |
|
85 |
Is reading in the bathroom considered Multi-Tasking. |
|
86 |
It is easier to write an incorrect program than understand a correct one. |
|
87 |
It said "Insert disk 3..." but only 2 fit. |
|
88 |
It's not a bug; it's an undocumented feature. |
|
89 |
It works! Now if only I could remember what I did... |
|
90 |
I wish life has a scroll back buffer. |
|
91 |
Keyboard : Instrument used to enter errors into computer. |
|
92 |
Keyboard not connected, press F1 to continue. |
|
93 |
MACINTOSH stands for Most Applications Crash If Not The Operating System Hangs. |
|
94 |
Maintenance-free: When it breaks, it can't be fixed... |
|
95 |
Math problems? Call 1-800-[(10x)(ln(13e))]-[sin(xy)/2.362x] |
|
96 |
Melted fruit snacks found on Keyboard. Delete nephew [Y/N]? |
|
97 |
MICROSOFT: Most Intelligent Customers Realize Our Software is Only for Fools and Teenagers. |
|
98 |
Mommy! The cursor's winking at me! |
|
99 |
My software never has bugs. It just develops random features. |
|
100 |
Never say "OOPS!" always say "Ah, Interesting!" |
|
101 |
No matter how much data you add to your laptop, it will not get heavier. |
|
102 |
Of course I know how to copy disks. Where's the xerox machine? |
|
103 |
One person's error is another person's data. |
|
104 |
One picture is worth 128K words. |
|
105 |
Operator! Trace this call and tell me where I am. |
|
106 |
Owners of digital watches: Your day's are numbered! |
|
107 |
Oxymoron: Microsoft Works. |
|
108 |
Press any key...no, no, no, NOT THAT ONE! |
|
109 |
Press any key to continue or any other key to quit... |
|
110 |
Press CTRL-ALT-DEL to continue.... |
|
111 |
Programmers don't die, they just GOSUB without RETURN. |
|
112 |
Programmer's Time-Space Continuum: Programmers continuously space the time. |
|
113 |
RAM disk is NOT an installation procedure. |
|
114 |
Reference Manual: Object that raises the monitor to eye level. Also used to compensate for that short table leg. |
|
115 |
Scheduled Release Date: A carefully calculated date determined by estimating the actual shipping date and subtracting six months from it. |
|
116 |
Shift to the left! Shift to the right! Pop up, push down, byte, byte, byte! |
|
117 |
Southern DOS: Y'all reckon? (Yep/Nope) |
|
118 |
Speed Kills! Use Windows 95. |
|
119 |
System going down at 1:45 for disk crashing. |
|
120 |
The box said: 'install on Windows 95, NT 4.0 or better'. So I installed it on Linux. |
|
121 |
The definition of an upgrade: Take old bugs out, put new ones in. |
|
122 |
The name is Baud......, James Baud. |
|
123 |
The program is absolutely right; therefore the computer must be wrong. |
|
124 |
The programmer's national anthem is 'AAAAAAAAHHHHHHHH'. |
|
125 |
The Queue Principle: The longer you wait in line, the greater the likelihood that you are standing in the wrong line. |
|
126 |
There are never enough hours in a day, but always too many days before Saturday. |
|
127 |
There are two ways to write error-free programs; only the third one works. |
|
128 |
There can never be a computer language in which you cannot write a bad program. |
|
129 |
There were computers in Biblical times. Eve had an Apple. |
|
130 |
These settings will have no effect until you restart the system. |
|
131 |
Reset Universe (Y/N) ? |
|
132 |
Those who can, do. Those who cannot, teach. Those who cannot teach, HACK! |
|
133 |
To be, or not to be, those are the parameters. |
|
134 |
To err is human, but to really foul things up requires a computer. |
|
135 |
User error: replace user and press any key to continue. |
|
136 |
Warning, keyboard not found. Press Enter to continue. |
|
137 |
What boots up must come down. |
|
138 |
Who's General Failure and why's he reading my disk? |
|
139 |
Why doesn't DOS ever say "EXCELLENT command or filename!" |
|
140 |
Why do they call this a word processor? It's simple, ... you've seen what food processors do to food, right? |
|
141 |
Why do we want intelligent terminals when there are so many stupid users? |
|
142 |
Will the information superhighway have any rest stops? |
|
143 |
Windows 3.1 not found: (C)heer, (P)arty, (D)ance? |
|
144 |
Windows is NOT a virus. Viruses DO something. |
|
145 |
WINDOWS stands for Will Install Needless Data On Whole System. |
|
146 |
Windows: the ultimate triumph of marketing over technology. |
|
147 |
You are making progress if each mistake is a new one. |
|
148 |
You don't have to know how the computer works, just how to work the computer. |
|
149 |
You forgot to do your backup 16 days ago. Tomorrow you'll need that version. |
|
150 |
You had mail, but the super-user read it, and deleted it! |
|
151 |
You never finish a program, you just stop working on it. |
trunk/wb/modules/droplets/example/index.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
// $Id: index.php 915 2009-01-21 19:27:01Z Ruebenwurzel $ |
|
4 |
|
|
5 |
/* |
|
6 |
|
|
7 |
Website Baker Project <http://www.websitebaker.org/> |
|
8 |
Copyright (C) 2004-2009, Ryan Djurovich |
|
9 |
|
|
10 |
Website Baker is free software; you can redistribute it and/or modify |
|
11 |
it under the terms of the GNU General Public License as published by |
|
12 |
the Free Software Foundation; either version 2 of the License, or |
|
13 |
(at your option) any later version. |
|
14 |
|
|
15 |
Website Baker is distributed in the hope that it will be useful, |
|
16 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
17 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
18 |
GNU General Public License for more details. |
|
19 |
|
|
20 |
You should have received a copy of the GNU General Public License |
|
21 |
along with Website Baker; if not, write to the Free Software |
|
22 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
23 |
|
|
24 |
*/ |
|
25 |
|
|
26 |
header("Location: ../../../index.php"); |
|
27 |
|
|
28 |
?> |
trunk/wb/modules/droplets/install.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
// prevent this file from being accessed directly |
|
12 |
if(!defined('WB_PATH')) die(header('Location: ../index.php')); |
|
13 |
|
|
14 |
$table = TABLE_PREFIX .'mod_droplets'; |
|
15 |
$database->query("DROP TABLE IF EXISTS `$table`"); |
|
16 |
|
|
17 |
$database->query("CREATE TABLE `$table` ( |
|
18 |
`id` INT NOT NULL auto_increment, |
|
19 |
`name` VARCHAR(32) NOT NULL, |
|
20 |
`code` LONGTEXT NOT NULL , |
|
21 |
`description` TEXT NOT NULL, |
|
22 |
`modified_when` INT NOT NULL default '0', |
|
23 |
`modified_by` INT NOT NULL default '0', |
|
24 |
`active` INT NOT NULL default '0', |
|
25 |
`admin_edit` INT NOT NULL default '0', |
|
26 |
`admin_view` INT NOT NULL default '0', |
|
27 |
`show_wysiwyg` INT NOT NULL default '0', |
|
28 |
`comments` TEXT NOT NULL, |
|
29 |
PRIMARY KEY ( `id` ) |
|
30 |
)" |
|
31 |
); |
|
32 |
|
|
33 |
//add all droplets from the droplet subdirectory |
|
34 |
$folder=opendir(WB_PATH.'/modules/droplets/example/.'); |
|
35 |
$names = array(); |
|
36 |
while ($file = readdir($folder)) { |
|
37 |
$ext=strtolower(substr($file,-4)); |
|
38 |
if ($ext==".php"){ |
|
39 |
if ($file<>"index.php" ) { |
|
40 |
$names[count($names)] = $file; |
|
41 |
} |
|
42 |
} |
|
43 |
} |
|
44 |
closedir($folder); |
|
45 |
|
|
46 |
foreach ($names as $dropfile) { |
|
47 |
$droplet = addslashes(getDropletCodeFromFile($dropfile)); |
|
48 |
if ($droplet != "") { |
|
49 |
$description = "Example Droplet"; |
|
50 |
$comments = "Example Droplet"; |
|
51 |
$cArray = explode("\n",$droplet); |
|
52 |
if (substr($cArray[0],0,3) == "//:") { |
|
53 |
$description = trim(substr($cArray[0],3)); |
|
54 |
array_shift ( $cArray ); |
|
55 |
} |
|
56 |
if (substr($cArray[0],0,3) == "//:") { |
|
57 |
$comments = trim(substr($cArray[0],3)); |
|
58 |
array_shift ( $cArray ); |
|
59 |
} |
|
60 |
$droplet = implode ( "\n", $cArray ); |
|
61 |
$name = substr($dropfile,0,-4); |
|
62 |
$modified_when = mktime(); |
|
63 |
$modified_by = method_exists($admin, 'get_user_id') ? $admin->get_user_id() : 1; |
|
64 |
$database->query("INSERT INTO `$table` |
|
65 |
(name, code, description, comments, active, modified_when, modified_by) |
|
66 |
VALUES |
|
67 |
('$name', '$droplet', '$description', '$comments', '1', '$modified_when', '$modified_by')"); |
|
68 |
|
|
69 |
// do not output anything if this script is called during fresh installation |
|
70 |
if (method_exists($admin, 'get_user_id')) echo "Droplet import: $name<br/>"; |
|
71 |
} |
|
72 |
} |
|
73 |
|
|
74 |
|
|
75 |
function getDropletCodeFromFile ( $dropletfile ) { |
|
76 |
$data = ""; |
|
77 |
$filename = WB_PATH."/modules/droplets/example/".$dropletfile; |
|
78 |
if (file_exists($filename)) { |
|
79 |
$filehandle = fopen ($filename, "r"); |
|
80 |
$data = fread ($filehandle, filesize ($filename)); |
|
81 |
fclose($filehandle); |
|
82 |
// unlink($filename); doesnt work in unix |
|
83 |
} |
|
84 |
return $data; |
|
85 |
} |
|
86 |
?> |
|
0 | 87 |
trunk/wb/modules/droplets/index.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
header('Location: ../index.php'); |
|
4 |
|
|
5 |
?> |
|
0 | 6 |
trunk/wb/modules/droplets/readme/readme.html | ||
---|---|---|
1 |
<html> |
|
2 |
|
|
3 |
<head> |
|
4 |
<title>Droplets</title> |
|
5 |
<link href="readme.css" rel="stylesheet" type="text/css" media="screen" /> |
|
6 |
</head> |
|
7 |
|
|
8 |
<body> |
|
9 |
<small><font color="#7f7f7f">Droplets Help</font></small><br /> |
|
10 |
<h2> <img src="../img/droplets_logo.png" alt="" width="297" height="81" border="0"></h2> <br /> |
|
11 |
Droplets are small chunks of php code (just like the code module) that can be included in your template or any other content section. <br /> |
|
12 |
Including a droplet is done by encapsulating the droplet name in double brackets. <br /> |
|
13 |
If you want to use the droplet "ModifiedWhen" (to show the last modified date and time of the current page) you only need to add <b>[[ModifiedWhen]]</b> to your template or WYSIWYG contentpage. <br /> |
|
14 |
<br /> |
|
15 |
You are encouraged to create your own droplets and share them with the community. <br /> |
|
16 |
<br /> |
|
17 |
<h3>Installation</h3> |
|
18 |
<br /> |
|
19 |
Droplets are installed as a admin tool. The installation is done using the normal "Add module" page in the WB backend. <br /> |
|
20 |
When the installation is successfull, there is a new tool added to the Admin-Tools menu. <br /> |
|
21 |
Clicking the tool will display the current installed droplets, and a button to create your own. <br /> |
|
22 |
<br /> |
|
23 |
<h3>Getting Droplets</h3> |
|
24 |
<br /> |
|
25 |
A fast growing number of Droplets are available for use, you can use the <a href="http://www.websitebakers.com/pages/droplets/official-library.php" target="_new">Official Droplets Library</a> in the AMASP project website, or you can search the WB Forum. <br /> |
|
26 |
<br /> |
|
27 |
<h3>Coding Droplets</h3> |
|
28 |
<br /> |
|
29 |
Droplets run in PHP mode, no <font color="#ff0000"><?php</font> or <font color="#ff0000">?></font> is allowed in the code! If any of these tags are found in the code they will be removed. Your code will not run as expected. <br /> |
|
30 |
The droplet code can NOT echo or print data to the output stream directly. The Droplet name is replaced by the return value of the PHP code.<br /> |
|
31 |
Example: [[HelloWorld]] <br /> |
|
32 |
<br /> |
|
33 |
<font color="#ff0000">Wrong code:</font> echo "Hello World"; <br /> |
|
34 |
<font color="#339966">Correct code:</font> return "Hello World"; <br /> |
|
35 |
<br /> |
|
36 |
Since version 0.3 Droplets can modify the complete page content. <br /> |
|
37 |
When the Droplet is called, an extra variable ($wb_page_data) is made available. |
|
38 |
This variable holds all the content of your current generated webpage. |
|
39 |
You can modify any part of this content simply by replacing it in the variable. There is no need to return this variable, the Droplet code will process changed content automatically.<br /><br /> |
|
40 |
|
|
41 |
Since version 0.3 Droplets will check the PHP code you have saved for validity. <br /> |
|
42 |
When the code will not execute correctly a red flashing icon will apear in the backend Droplets list. <br /> |
|
43 |
The standard blue icon is no guarantee that the Droplets does what you would expect it to do, it will just tell you if the code is valid PHP code.<br /><br /> |
|
44 |
|
|
45 |
Since version 0.3 Droplets you do not need to return any data. When you end your code with <pre>return true;</pre> there will not be an errormessage. The processed Droplet tag will be removed.<br /> |
|
46 |
|
|
47 |
<br /> |
|
48 |
<h3>PHP color coding</h3> |
|
49 |
<br /> |
|
50 |
The Droplets edit page is ready to use the EditArea module. This module creates a color coded editor for PHP code. <br /> |
|
51 |
EditArea comes as a seperate module (installed as an admin tool). <br /> |
|
52 |
Use the WB Forum or the <a href="http://www.websitebakers.com/" target="_new">AMASP</a> project to find the latest EditArea download. <br /> |
|
53 |
<br /> |
|
54 |
<h3>More Information</h3> |
|
55 |
<br /> |
|
56 |
More information (including localized help) can be found on the <a href="http://www.websitebakers.com/pages/droplets/about-droplets.php" target="_new">Droplets pages</a> of the AMASP project website. <br /> |
|
57 |
<br /> |
|
58 |
<br /> |
|
59 |
<br /> |
|
60 |
</body> |
|
61 |
|
|
62 |
</html> |
trunk/wb/modules/droplets/readme/readme.css | ||
---|---|---|
1 |
html { |
|
2 |
font-size:76%; |
|
3 |
} |
|
4 |
body { |
|
5 |
font-family:"Trebuchet MS",Tahoma,Verdana,Arial,Helvetica,sans-serif; |
|
6 |
font-size:1.1em; |
|
7 |
line-height:1.5em; |
|
8 |
margin:10px; |
|
9 |
padding:0; |
|
10 |
text-align:left; |
|
11 |
} |
|
12 |
h1, h2, h3, h4, h5, h6 { |
|
13 |
color:#009999; |
|
14 |
font-family:"Trebuchet MS",Tahoma,Verdana,Arial,Helvetica,sans-serif; |
|
15 |
font-weight:normal; |
|
16 |
letter-spacing:-1px; |
|
17 |
margin:0; |
|
18 |
} |
|
19 |
h1, h2 { |
|
20 |
border-bottom:1px solid #009999; |
|
21 |
font-size:1.8em; |
|
22 |
margin:15px 0 5px; |
|
23 |
padding-bottom:15px; |
|
24 |
} |
|
25 |
h3 { |
|
26 |
border-bottom:1px solid #009999; |
|
27 |
font-size:1.8em; |
|
28 |
margin:15px 0 5px; |
|
29 |
padding-bottom:15px; |
|
30 |
} |
|
31 |
h4 { |
|
32 |
font-size:1.4em; |
|
33 |
margin:10px 0 5px; |
|
34 |
} |
|
35 |
h5 { |
|
36 |
font-size:1.2em; |
|
37 |
margin:10px 0 5px; |
|
38 |
} |
|
39 |
h6 { |
|
40 |
font-size:1em; |
|
41 |
margin:10px 0 0; |
|
42 |
} |
|
43 |
p { |
|
44 |
margin:8px 0; |
|
45 |
} |
|
46 |
acronym { |
|
47 |
cursor:help; |
|
48 |
} |
|
49 |
code, blockquote { |
|
50 |
background:#FFFFFF none repeat scroll 0 0; |
|
51 |
border:1px dashed #DDDDDD; |
|
52 |
color:#666666; |
|
53 |
display:block; |
|
54 |
margin:15px 0; |
|
55 |
padding:5px; |
|
56 |
} |
|
57 |
pre { |
|
58 |
background:#FFFFFF none repeat scroll 0 0; |
|
59 |
border:1px dashed #DDDDDD; |
|
60 |
color:#666666; |
|
61 |
display:inline; |
|
62 |
margin:15px 0; |
|
63 |
padding:5px; |
|
64 |
} |
|
65 |
hr { |
|
66 |
background-color:#009999; |
|
67 |
border:0 none; |
|
68 |
color:#DDDDDD; |
|
69 |
height:1px; |
|
70 |
margin:5px 0; |
|
71 |
} |
|
72 |
.left { |
|
73 |
float:left; |
|
74 |
} |
|
75 |
.right { |
|
76 |
float:right; |
|
77 |
} |
|
78 |
.hide { |
|
79 |
display:none; |
|
80 |
} |
|
81 |
|
|
82 |
#body { |
|
83 |
background:#222222; |
|
84 |
padding:20px; |
|
85 |
} |
trunk/wb/modules/droplets/readme/index.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
// $Id: index.php 915 2009-01-21 19:27:01Z Ruebenwurzel $ |
|
4 |
|
|
5 |
/* |
|
6 |
|
|
7 |
Website Baker Project <http://www.websitebaker.org/> |
|
8 |
Copyright (C) 2004-2009, Ryan Djurovich |
|
9 |
|
|
10 |
Website Baker is free software; you can redistribute it and/or modify |
|
11 |
it under the terms of the GNU General Public License as published by |
|
12 |
the Free Software Foundation; either version 2 of the License, or |
|
13 |
(at your option) any later version. |
|
14 |
|
|
15 |
Website Baker is distributed in the hope that it will be useful, |
|
16 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
17 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
18 |
GNU General Public License for more details. |
|
19 |
|
|
20 |
You should have received a copy of the GNU General Public License |
|
21 |
along with Website Baker; if not, write to the Free Software |
|
22 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
23 |
|
|
24 |
*/ |
|
25 |
|
|
26 |
header("Location: ../../../index.php"); |
|
27 |
|
|
28 |
?> |
trunk/wb/modules/droplets/uninstall.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
// prevent this file from being accessed directly |
|
12 |
if(!defined('WB_PATH')) die(header('Location: ../index.php')); |
|
13 |
|
|
14 |
$table = TABLE_PREFIX .'mod_droplets'; |
|
15 |
$database->query("DROP TABLE IF EXISTS `$table`"); |
|
16 |
|
|
17 |
?> |
|
0 | 18 |
trunk/wb/modules/droplets/tool.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
// Direct access prevention |
|
12 |
defined('WB_PATH') OR die(header('Location: ../index.php')); |
|
13 |
|
|
14 |
// Load Language file |
|
15 |
if(LANGUAGE_LOADED) { |
|
16 |
if(!file_exists(WB_PATH.'/modules/droplets/languages/'.LANGUAGE.'.php')) { |
|
17 |
require_once(WB_PATH.'/modules/droplets/languages/EN.php'); |
|
18 |
} else { |
|
19 |
require_once(WB_PATH.'/modules/droplets/languages/'.LANGUAGE.'.php'); |
|
20 |
} |
|
21 |
} |
|
22 |
|
|
23 |
// check if backend.css file needs to be included into the <body></body> |
|
24 |
if(!method_exists($admin, 'register_backend_modfiles') && file_exists(WB_PATH .'/modules/droplets/backend.css')) { |
|
25 |
echo '<style type="text/css">'; |
|
26 |
include(WB_PATH .'/modules/droplets/backend.css'); |
|
27 |
echo "\n</style>\n"; |
|
28 |
} |
|
29 |
|
|
30 |
// Get userid for showing admin only droplets or not |
|
31 |
$loggedin_user = $admin->get_user_id(); |
|
32 |
|
|
33 |
// And... action |
|
34 |
$admintool_url = ADMIN_URL .'/admintools/index.php'; |
|
35 |
|
|
36 |
//removes empty entries from the table so they will not be displayed |
|
37 |
$database->query("DELETE FROM ".TABLE_PREFIX."mod_droplets WHERE name=''"); |
|
38 |
?> |
|
39 |
<style type="text/css"> |
|
40 |
a.tooltip span {display:none; margin-left:14px; width:430px;} |
|
41 |
a.tooltip:hover span{display:inline; position:absolute; padding:5px; border:1px solid #000000; background:#ffffff; color:#000000;} |
|
42 |
</style> |
|
43 |
|
|
44 |
<br /> |
|
45 |
<table cellpadding="0" cellspacing="0" border="0" width="100%"> |
|
46 |
<tr> |
|
47 |
<td valign="bottom" width="30%"> |
|
48 |
<button class="add" type="button" name="add_droplet" onclick="javascript: window.location = '<?php echo WB_URL; ?>/modules/droplets/add_droplet.php';"><?php echo $TEXT['ADD'].' '.$DR_TEXT['DROPLETS']; ?></button> |
|
49 |
</td> |
|
50 |
<td align="center"><img src="<?php echo WB_URL; ?>/modules/droplets/img/droplets_logo.png" border="1" alt=""/></td> |
|
51 |
<td valign="top" width="30%" align="right"> |
|
52 |
<a href="#" onclick="javascript: window.open('<?php echo WB_URL; ?>/modules/droplets/readme/<?php echo $DR_TEXT['README']; ?>','helpwindow','width=700,height=550,directories=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=yes');"><?php echo $DR_TEXT['HELP']; ?></a> |
|
53 |
<br /><br /> |
|
54 |
<a href="#" onclick="javascript: window.location = '<?php echo WB_URL; ?>/modules/droplets/backup_droplets.php';"><?php echo $DR_TEXT['BACKUP']; ?></a> |
|
55 |
</td> |
|
56 |
</tr> |
|
57 |
</table> |
|
58 |
<br /> |
|
59 |
|
|
60 |
<h2><?php echo $TEXT['MODIFY'].'/'.$TEXT['DELETE'].' '.$DR_TEXT['DROPLETS']; ?></h2> |
|
61 |
<?php |
|
62 |
if ($loggedin_user == '1') { |
|
63 |
$query_droplets = $database->query("SELECT * FROM ".TABLE_PREFIX."mod_droplets ORDER BY modified_when DESC"); |
|
64 |
} else { |
|
65 |
$query_droplets = $database->query("SELECT * FROM ".TABLE_PREFIX."mod_droplets WHERE admin_view <> '1' ORDER BY modified_when DESC"); |
|
66 |
} |
|
67 |
$num_droplets = $query_droplets->numRows(); |
|
68 |
if($num_droplets > 0) { |
|
69 |
?> |
|
70 |
<table class="row_a" border="0" cellspacing="0" cellpadding="3" width="100%"> |
|
71 |
<tr> |
|
72 |
<thead> |
|
73 |
<td width="3%"></td> |
|
74 |
<td width="21%"><?php echo $TEXT['NAME']; ?></td> |
|
75 |
<td width="68%"><?php echo $TEXT['DESCRIPTION']; ?></td> |
|
76 |
<td width="4%"><?php echo $TEXT['ACTIVE']; ?></td> |
|
77 |
<td width="3%"></td> |
|
78 |
</thead> |
|
79 |
</tr> |
|
80 |
<?php |
|
81 |
$row = 'a'; |
|
82 |
while($droplet = $query_droplets->fetchRow()) { |
|
83 |
$get_modified_user = $database->query("SELECT display_name,username, user_id FROM ".TABLE_PREFIX."users WHERE user_id = '".$droplet['modified_by']."' LIMIT 1"); |
|
84 |
if($get_modified_user->numRows() > 0) { |
|
85 |
$fetch_modified_user = $get_modified_user->fetchRow(); |
|
86 |
$modified_user = $fetch_modified_user['username']; |
|
87 |
$modified_userid = $fetch_modified_user['user_id']; |
|
88 |
} else { |
|
89 |
$modified_user = $TEXT['UNKNOWN']; |
|
90 |
$modified_userid = 0; |
|
91 |
} |
|
92 |
$comments = str_replace(array("\r\n", "\n", "\r"), '<br />', $droplet['comments']); |
|
93 |
if (!strpos($comments,"[[")) $comments = "Use: [[".$droplet['name']."]]<br />".$comments; |
|
94 |
$comments = str_replace(array("[[", "]]"), array('<b>[[',']]</b>'), $comments); |
|
95 |
$valid_code = check_syntax($droplet['code']); |
|
96 |
if (!$valid_code === true) $comments = '<font color=\'red\'><strong>'.$DR_TEXT['INVALIDCODE'].'</strong></font><br /><br />'.$comments; |
|
97 |
$unique_droplet = check_unique ($droplet['name']); |
|
98 |
if ($unique_droplet === false) $comments = '<font color=\'red\'><strong>'.$DR_TEXT['NOTUNIQUE'].'</strong></font><br /><br />'.$comments; |
|
99 |
$comments = '<span>'.$comments.'</span>'; |
|
100 |
?> |
|
101 |
|
|
102 |
<tr class="row_<?php echo $row; ?>" height="20"> |
|
103 |
<td > |
|
104 |
<a href="<?php echo WB_URL; ?>/modules/droplets/modify_droplet.php?droplet_id=<?php echo $droplet['id']?>" title="<?php echo $TEXT['MODIFY']; ?>"> |
|
105 |
<img src="<?php echo THEME_URL; ?>/images/modify_16.png" border="0" alt="Modify" /> |
|
106 |
</a> |
|
107 |
</td> |
|
108 |
<td > |
|
109 |
<a href="<?php echo WB_URL; ?>/modules/droplets/modify_droplet.php?droplet_id=<?php echo $droplet['id']?>" class="tooltip"> |
|
110 |
<?php if ($valid_code && $unique_droplet) { ?><img src="<?php echo WB_URL; ?>/modules/droplets/img/droplet.png" border="0" alt=""/> |
|
111 |
<?php } else { ?><img src="<?php echo WB_URL; ?>/modules/droplets/img/invalid.gif" border="0" title="" alt=""/><?php } ?> |
|
112 |
<?php echo $droplet['name']; ?><?php echo $comments; ?> |
|
113 |
</a> |
|
114 |
</td> |
|
115 |
<td > |
|
116 |
<small><?php echo substr($droplet['description'],0,90); ?></small> |
|
117 |
</td> |
|
118 |
<td > |
|
119 |
<b><?php if($droplet['active'] == 1){ echo '<span style="color: green;">'. $TEXT['YES']. '</span>'; } else { echo '<span style="color: red;">'.$TEXT['NO'].'</span>'; } ?></b> |
|
120 |
</td> |
|
121 |
<td > |
|
122 |
<a href="javascript: confirm_link('<?php echo $TEXT['ARE_YOU_SURE']; ?>', '<?php echo WB_URL; ?>/modules/droplets/delete_droplet.php?droplet_id=<?php echo $droplet['id']?>');" title="<?php echo $TEXT['DELETE']; ?>"> |
|
123 |
<img src="<?php echo THEME_URL; ?>/images/delete_16.png" border="0" alt="X" /> |
|
124 |
</a> |
|
125 |
</td> |
|
126 |
</tr> |
|
127 |
<?php |
|
128 |
// Alternate row color |
|
129 |
if($row == 'a') { |
|
130 |
$row = 'b'; |
|
131 |
} else { |
|
132 |
$row = 'a'; |
|
133 |
} |
|
134 |
} |
|
135 |
?> |
|
136 |
</table> |
|
137 |
<?php |
|
138 |
} |
|
139 |
|
|
140 |
function check_syntax($code) { |
|
141 |
return @eval('return true;' . $code); |
|
142 |
} |
|
143 |
|
|
144 |
function check_unique($name) { |
|
145 |
global $database; |
|
146 |
$query_droplets = $database->query("SELECT name FROM ".TABLE_PREFIX."mod_droplets WHERE name = '$name'"); |
|
147 |
return ($query_droplets->numRows() == 1); |
|
148 |
|
|
149 |
|
|
150 |
|
|
151 |
} |
|
152 |
|
|
153 |
?> |
|
0 | 154 |
trunk/wb/modules/droplets/languages/EN.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
$DR_TEXT['DROPLETS'] = 'Droplet'; |
|
4 |
$DR_TEXT['BACKUP'] = 'Backup Droplets (Zip)'; |
|
5 |
$DR_TEXT['RESTORE'] = 'Restore Droplets (Zipped)'; |
|
6 |
$DR_TEXT['HELP'] = 'Help / Readme'; |
|
7 |
$DR_TEXT['README'] = 'readme.html'; |
|
8 |
$DR_TEXT['INVALIDCODE'] = 'This Droplet has invalid PHP code'; |
|
9 |
$DR_TEXT['NOTUNIQUE'] = 'This Dropletname is used more than once!'; |
|
10 |
$DR_TEXT['ADMIN_EDIT'] = 'Edit-Only'; |
|
11 |
$DR_TEXT['ADMIN_VIEW'] = 'View-Only'; |
|
12 |
$DR_TEXT['WYSIWYG'] = 'Wysiwyg'; |
|
13 |
$DR_TEXT['HELP'] = 'Help / Readme'; |
|
14 |
|
|
15 |
?> |
trunk/wb/modules/droplets/languages/index.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
// $Id: index.php 915 2009-01-21 19:27:01Z Ruebenwurzel $ |
|
4 |
|
|
5 |
/* |
|
6 |
|
|
7 |
Website Baker Project <http://www.websitebaker.org/> |
|
8 |
Copyright (C) 2004-2009, Ryan Djurovich |
|
9 |
|
|
10 |
Website Baker is free software; you can redistribute it and/or modify |
|
11 |
it under the terms of the GNU General Public License as published by |
|
12 |
the Free Software Foundation; either version 2 of the License, or |
|
13 |
(at your option) any later version. |
|
14 |
|
|
15 |
Website Baker is distributed in the hope that it will be useful, |
|
16 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
17 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
18 |
GNU General Public License for more details. |
|
19 |
|
|
20 |
You should have received a copy of the GNU General Public License |
|
21 |
along with Website Baker; if not, write to the Free Software |
|
22 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
23 |
|
|
24 |
*/ |
|
25 |
|
|
26 |
header("Location: ../../../index.php"); |
|
27 |
|
|
28 |
?> |
trunk/wb/modules/droplets/modify_droplet.php | ||
---|---|---|
1 |
<?php |
|
2 |
/* |
|
3 |
* @version 1.0 |
|
4 |
* @author Ruud Eisinga (Ruud) John (PCWacht) |
|
5 |
* @date June 2009 |
|
6 |
* |
|
7 |
* droplets are small codeblocks that are called from anywhere in the template. |
|
8 |
* To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value¶meter2=value]] |
|
9 |
*/ |
|
10 |
|
|
11 |
require('../../config.php'); |
|
12 |
|
|
13 |
// Get id |
|
14 |
if(!isset($_GET['droplet_id']) OR !is_numeric($_GET['droplet_id'])) { |
|
15 |
header("Location: ".ADMIN_URL."/pages/index.php"); |
|
16 |
} else { |
|
17 |
$droplet_id = $_GET['droplet_id']; |
|
18 |
} |
|
19 |
|
|
20 |
require_once(WB_PATH.'/framework/class.admin.php'); |
|
21 |
require_once(WB_PATH.'/framework/functions.php'); |
|
22 |
|
|
23 |
$admintool_link = ADMIN_URL .'/admintools/index.php'; |
|
24 |
$module_edit_link = ADMIN_URL .'/admintools/tool.php?tool=droplets'; |
|
25 |
$admin = new admin('admintools', 'admintools'); |
|
26 |
|
|
27 |
// check if backend.css file needs to be included into the <body></body> of modify.php |
|
28 |
if(!method_exists($admin, 'register_backend_modfiles') && file_exists(WB_PATH ."/modules/droplets/backend.css")) { |
|
29 |
echo '<style type="text/css">'; |
|
30 |
include(WB_PATH .'/modules/droplets/backend.css'); |
|
31 |
echo "n</style>n"; |
|
32 |
} |
|
33 |
|
|
34 |
// Load Language file |
|
35 |
if(LANGUAGE_LOADED) { |
|
36 |
if(!file_exists(WB_PATH.'/modules/droplets/languages/'.LANGUAGE.'.php')) { |
|
37 |
require_once(WB_PATH.'/modules/droplets/languages/EN.php'); |
|
38 |
} else { |
|
39 |
require_once(WB_PATH.'/modules/droplets/languages/'.LANGUAGE.'.php'); |
|
40 |
} |
|
41 |
} |
|
42 |
require_once(WB_PATH . '/include/editarea/wb_wrapper_edit_area.php'); |
|
43 |
echo registerEditArea ('contentedit','php',true,'both',true,true,600,450,'search, fullscreen, |, undo, redo, |, select_font,|, highlight, reset_highlight, |, help'); |
|
44 |
|
|
45 |
|
|
46 |
$modified_when = mktime(); |
|
47 |
$modified_by = $admin->get_user_id(); |
|
48 |
|
|
49 |
// Get header and footer |
|
50 |
$query_content = $database->query("SELECT * FROM ".TABLE_PREFIX."mod_droplets WHERE id = '$droplet_id'"); |
|
51 |
$fetch_content = $query_content->fetchRow(); |
|
52 |
$content = (htmlspecialchars($fetch_content['code'])); |
|
53 |
?> |
|
54 |
<h4 style="margin: 0; border-bottom: 1px solid #DDD; padding-bottom: 5px;"> |
|
55 |
<a href="<?php echo $admintool_link;?>"><?php echo $HEADING['ADMINISTRATION_TOOLS']; ?></a> |
|
56 |
-> |
|
57 |
<a href="<?php echo $module_edit_link;?>">Droplet Edit</a> |
|
58 |
</h4> |
|
59 |
<br /> |
|
60 |
<form name="modify" action="<?php echo WB_URL; ?>/modules/droplets/save_droplet.php" method="post" style="margin: 0;"> |
|
61 |
<input type="hidden" name="data_codepress" value="" /> |
|
62 |
<input type="hidden" name="droplet_id" value="<?php echo $droplet_id; ?>"> |
|
63 |
<input type="hidden" name="show_wysiwyg" value="<?php echo $fetch_content['show_wysiwyg']; ?>"> |
|
64 |
|
|
65 |
<table class="row_a" cellpadding="4" cellspacing="0" border="0" width="100%"> |
|
66 |
<tr> |
|
67 |
<td width="10%" class="setting_name"> |
|
68 |
<?php echo $TEXT['NAME']; ?>: |
|
69 |
</td> |
|
70 |
<td width="90%"> |
|
71 |
<input type="text" name="title" value="<?php echo stripslashes($fetch_content['name']); ?>" style="width: 38%;" maxlength="32" /> |
|
72 |
</td> |
|
73 |
</tr> |
|
74 |
<tr> |
|
75 |
<td valign="top" class="setting_name" width="60px"><?php echo $TEXT['DESCRIPTION']; ?>:</td> |
|
76 |
<td> |
|
77 |
<input type="text" name="description" value="<?php echo stripslashes($fetch_content['description']); ?>" style="width: 98%;" /> |
|
78 |
</td> |
|
79 |
</tr> |
|
80 |
<tr> |
|
81 |
<td class="setting_name" width="60px"> |
|
82 |
<?php echo $TEXT['ACTIVE']; ?>: |
|
83 |
</td> |
|
84 |
<td> |
|
85 |
<input type="radio" name="active" id="active_true" value="1" <?php if($fetch_content['active'] == 1) { echo ' checked'; } ?> /> |
|
86 |
<a href="#" onclick="javascript: document.getElementById('active_true').checked = true;"> |
|
87 |
<label><?php echo $TEXT['YES']; ?></label> |
|
88 |
</a> |
|
89 |
<input type="radio" name="active" id="active_false" value="0" <?php if($fetch_content['active'] == 0) { echo ' checked'; } ?> /> |
|
90 |
<a href="#" onclick="javascript: document.getElementById('active_false').checked = true;"> |
|
91 |
<label><?php echo $TEXT['NO']; ?></label> |
|
92 |
</a> |
|
93 |
</td> |
|
94 |
</tr> |
|
95 |
<?php |
|
96 |
// Next show only if admin is logged in, user_id = 1 |
|
97 |
if ($modified_by == 1) { |
|
98 |
?> |
|
99 |
<tr> |
|
100 |
<td class="setting_name" width="60px"> |
|
101 |
<?php echo $TEXT['ADMIN']; ?>: |
|
102 |
</td> |
|
103 |
<td> |
|
104 |
<?php echo $DR_TEXT['ADMIN_EDIT']; ?> |
|
105 |
<input type="radio" name="admin_edit" id="admin_edit_true" value="1" <?php if($fetch_content['admin_edit'] == 1) { echo ' checked'; } ?> /> |
|
106 |
<a href="#" onclick="javascript: document.getElementById('admin_edit_true').checked = true;"> |
|
107 |
<label><?php echo $TEXT['YES']; ?></label> |
|
108 |
</a> |
|
109 |
<input type="radio" name="admin_edit" id="admin_edit_false" value="0" <?php if($fetch_content['admin_edit'] == 0) { echo ' checked'; } ?> /> |
|
110 |
<a href="#" onclick="javascript: document.getElementById('admin_edit_false').checked = true;"> |
|
111 |
<label><?php echo $TEXT['NO']; ?></label> |
|
112 |
</a> |
|
113 |
|
|
114 |
<?php echo $DR_TEXT['ADMIN_VIEW']; ?>: |
|
115 |
<input type="radio" name="admin_view" id="admin_view_true" value="1" <?php if($fetch_content['admin_view'] == 1) { echo ' checked'; } ?> /> |
|
116 |
<a href="#" onclick="javascript: document.getElementById('admin_view_true').checked = true;"> |
|
117 |
<label><?php echo $TEXT['YES']; ?></label> |
Also available in: Unified diff
Add Droplets Modul to the project and the modificated files (index, seach and frontendfunctions)