| [ Index ] |
|
Code source de CMS made simple 1.0.5 |
1 <?php 2 #CMS - CMS Made Simple 3 #(c)2004 by Ted Kulp (tedkulp@users.sf.net) 4 #This project's homepage is: http://cmsmadesimple.org 5 # 6 #This program is free software; you can redistribute it and/or modify 7 #it under the terms of the GNU General Public License as published by 8 #the Free Software Foundation; either version 2 of the License, or 9 #(at your option) any later version. 10 # 11 #This program is distributed in the hope that it will be useful, 12 #BUT withOUT ANY WARRANTY; without even the implied warranty of 13 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 #GNU General Public License for more details. 15 #You should have received a copy of the GNU General Public License 16 #along with this program; if not, write to the Free Software 17 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 # 19 #$Id: class.bookmark.inc.php 2746 2006-05-09 01:18:15Z wishy $ 20 21 /** 22 * Events class for admin 23 * 24 * @package CMS 25 */ 26 class Events 27 { 28 29 /** 30 * Inform the system about a new event that can be generated 31 * 32 * @param string The name of the module that is sending the event 33 * @param string The name of the event 34 * @returns nothing 35 */ 36 function CreateEvent( $modulename, $eventname ) 37 { 38 global $gCms; 39 $db =& $gCms->GetDb(); 40 $count = $db->GetOne('SELECT count(*) from '.cms_db_prefix().'events where originator = ? and event_name = ?', array($modulename, $eventname)); 41 if ($count < 1) 42 { 43 $id = $db->GenID( cms_db_prefix()."events_seq" ); 44 $q = "INSERT INTO ".cms_db_prefix()."events values (?,?,?)"; 45 $db->Execute( $q, array( $modulename, $eventname, $id )); 46 } 47 } 48 49 50 /** 51 * Remove an event from the CMS system 52 * This function removes all handlers to the event, and completely removes 53 * all references to this event from the database 54 * 55 * Note, only events created by this module can be removed. 56 * 57 * @param string The name of the module that is sending the event 58 * @param string The name of the event 59 * @returns nothing 60 */ 61 function RemoveEvent( $modulename, $eventname ) 62 { 63 global $gCms; 64 $db =& $gCms->GetDb(); 65 66 // get the id 67 $q = "SELECT event_id FROM ".cms_db_prefix()."events WHERE 68 originator = ? AND event_name = ?"; 69 $dbresult = $db->Execute( $q, array( $modulename, $eventname ) ); 70 if( $dbresult == false || $dbresult->RecordCount() == 0 ) 71 { 72 // query failed, event not found 73 return false; 74 } 75 $row = $dbresult->FetchRow(); 76 $id = $row['event_id']; 77 78 // delete all the handlers 79 $q = "DELETE FROM ".cms_db_prefix()."event_handlers WHERE 80 event_id = ?"; 81 $db->Execute( $q, array( $id ) ); 82 83 // then delete the event 84 $q = "DELETE FROM ".cms_db_prefix()."events WHERE 85 event_id = ?"; 86 $db->Execute( $q, array( $id ) ); 87 } 88 89 90 /** 91 * Trigger an event. 92 * This function will call all registered event handlers for the event 93 * 94 * @param string The name of the module that is sending the event 95 * @param string The name of the event 96 * @param array The parameters associated with this event. 97 * @returns nothing 98 */ 99 function SendEvent( $modulename, $eventname, $params = array() ) 100 { 101 global $gCms; 102 $usertagops =& $gCms->GetUserTagOperations(); 103 104 $results = Events::ListEventHandlers($modulename, $eventname); 105 106 if ($results != false) 107 { 108 foreach( $results as $row ) 109 { 110 if( isset( $row['tag_name'] ) && $row['tag_name'] != '' ) 111 { 112 debug_buffer('calling user tag ' . $row['tag_name'] . ' from event ' . $eventname); 113 $usertagops->CallUserTag( $row['tag_name'], $params ); 114 } 115 else if( isset( $row['module_name'] ) && $row['module_name'] != '' ) 116 { 117 // here's a quick check to make sure that we're not calling the module 118 // DoEvent function for an event originated by the same module. 119 if( $row['module_name'] == $modulename ) 120 { 121 continue; 122 } 123 124 // and call the module event handler. 125 $obj =& CMSModule::GetModuleInstance($row['module_name']); 126 if( $obj ) 127 { 128 debug_buffer('calling module ' . $row['module_name'] . ' from event ' . $eventname); 129 $obj->DoEvent( $modulename, $eventname, $params ); 130 } 131 } 132 } 133 } 134 } 135 136 137 /** 138 * Return the list of event handlers for a particular event 139 * 140 * @params string $modulename The name of the module sending the event 141 * @params string $eventname The name of the event 142 * 143 * @returns mixed If successful, an array of arrays, each element 144 * in the array contains two elements 'handler_name', and 'module_handler', 145 * any one of these could be null. If it fails, false is returned. 146 */ 147 function ListEventHandlers( $modulename, $eventname ) 148 { 149 global $gCms; 150 $db = &$gCms->GetDb(); 151 $variables =& $gCms->variables; 152 153 $params['module'] = $modulename; 154 $params['event'] = $eventname; 155 156 $handlers = array(); 157 158 if (!isset($variables['handlercache'])) 159 { 160 $q = "SELECT eh.tag_name, eh.module_name, e.originator, e.event_name, eh.handler_order, eh.handler_id, eh.removable FROM ".cms_db_prefix()."event_handlers eh 161 INNER JOIN ".cms_db_prefix()."events e ON e.event_id = eh.event_id 162 ORDER BY eh.handler_order ASC"; 163 164 $dbresult = $db->Execute( $q ); 165 166 $result = array(); 167 168 while( $dbresult && $row = $dbresult->FetchRow() ) 169 { 170 $result[] = $row; 171 } 172 $variables['handlercache'] = $result; 173 } 174 175 foreach ($variables['handlercache'] as $row) 176 { 177 if ($row['originator'] == $modulename && $row['event_name'] == $eventname) 178 { 179 $handlers[] = $row; 180 } 181 } 182 183 if (count($handlers) > 0) 184 return $handlers; 185 else 186 return false; 187 } 188 189 190 /** 191 * Get a list of all of the known events 192 * 193 * @returns mixed If successful, a list of all the known events. If it fails, false 194 */ 195 function ListEvents() 196 { 197 global $gCms; 198 $db = &$gCms->GetDb(); 199 200 $q = "SELECT * FROM ".cms_db_prefix()."events ORDER BY originator,event_name"; 201 $dbresult = $db->Execute( $q ); 202 if( $dbresult == false ) 203 { 204 return false; 205 } 206 207 $result = array(); 208 while( $row = $dbresult->FetchRow() ) 209 { 210 $result[] = $row; 211 } 212 return $result; 213 } 214 215 216 /** 217 * Add an event handler for a module event 218 * 219 * @params string $modulename The name of the module sending the event 220 * @params string $eventname The name of the event 221 * @params string $tag_name The name of a user defined tag 222 * @params string $module_handler The name of the module 223 * @params boolean $removable Can this event be removed from the list? 224 * 225 * @returns mixed If successful, true. If it fails, false. 226 */ 227 function AddEventHandler( $modulename, $eventname, $tag_name = false, $module_handler = false, $removable = true) 228 { 229 if( $tag_name == false && $module_handler == false ) 230 { 231 return false; 232 } 233 if( $tag_name != false && $module_handler != false ) 234 { 235 return false; 236 } 237 238 global $gCms; 239 $db = &$gCms->GetDb(); 240 241 // find the id 242 $q = "SELECT event_id FROM ".cms_db_prefix()."events WHERE 243 originator = ? AND event_name = ?"; 244 $dbresult = $db->Execute( $q, array( $modulename, $eventname ) ); 245 if( $dbresult == false || $dbresult->RecordCount() == 0 ) 246 { 247 // query failed, event not found 248 return false; 249 } 250 $row = $dbresult->FetchRow(); 251 $id = $row['event_id']; 252 253 // now see if there's nothing already existing for this 254 // tag or module and this id 255 $q = "SELECT * FROM ".cms_db_prefix()."event_handlers WHERE 256 event_id = ? AND "; 257 $params = array(); 258 $params[] = $id; 259 if( $tag_name != "" ) 260 { 261 $q .= "tag_name = ?"; 262 $params[] = $tag_name; 263 } 264 else 265 { 266 $q .= "module_name = ?"; 267 $params[] = $module_handler; 268 } 269 $dbresult = $db->Execute( $q, $params ); 270 if( $dbresult != false && $dbresult->RecordCount() > 0 ) 271 { 272 // hmmm, something matches already 273 return false; 274 } 275 276 // now see if we can get a new id 277 $order = 1; 278 $q = "SELECT max(handler_order) AS newid FROM ".cms_db_prefix()."event_handlers 279 WHERE event_id = ?"; 280 $dbresult = $db->Execute( $q, array( $id ) ); 281 if( $dbresult != false && $dbresult->RecordCount() != 0) 282 { 283 $row = $dbresult->FetchRow(); 284 $order = $row['newid'] + 1; 285 } 286 287 $handler_id = $db->GenId( cms_db_prefix()."event_handler_seq" ); 288 289 // okay, we can insert 290 $params = array(); 291 $params[] = $id; 292 $q = "INSERT INTO ".cms_db_prefix()."event_handlers "; 293 if( $module_handler != false ) 294 { 295 $q .= '(event_id,module_name,removable,handler_order,handler_id)'; 296 $params[] = $module_handler; 297 } 298 else 299 { 300 $q .= '(event_id,tag_name,removable,handler_order,handler_id)'; 301 $params[] = $tag_name; 302 } 303 $q .= "VALUES (?,?,?,?,?)"; 304 $params[] = ($removable?1:0); 305 $params[] = $order; 306 $params[] = $handler_id; 307 $dbresult = $db->Execute( $q, $params ); 308 if( $dbresult != false ) 309 { 310 return true; 311 } 312 return false; 313 } 314 315 316 /** 317 * Remove an event handler for a particular event 318 * 319 * @params string $modulename The name of the module sending the event 320 * @params string $eventname The name of the event 321 * 322 * @returns mixed If successful, true. If it fails, false. 323 */ 324 function RemoveEventHandler( $modulename, $eventname, $tag_name = false, $module_handler = false ) 325 { 326 if( $tag_name != false && $module_handler != false ) 327 { 328 return false; 329 } 330 $field = 'handler_name'; 331 if( $module_handler != false ) 332 { 333 $field = 'module_handler'; 334 } 335 336 global $gCms; 337 $db = &$gCms->GetDb(); 338 339 // find the id 340 $q = "SELECT event_id FROM ".cms_db_prefix()."events WHERE 341 originator = ? AND event_name = ?"; 342 $dbresult = $db->Execute( $q, array( $modulename, $eventname ) ); 343 if( $dbresult == false || $dbresult->RecordCount() == 0 ) 344 { 345 // query failed, event not found 346 return false; 347 } 348 $row = $dbresult->FetchRow(); 349 $id = $row['event_id']; 350 351 // delete the record 352 $params = array( $id ); 353 $query = "DELETE FROM ".cms_db_prefix()."event_handlers 354 WHERE event_id = ? AND "; 355 if( $modulename != false ) 356 { 357 $query .= 'module_name = ?'; 358 $params[] = $module_handler; 359 } 360 else 361 { 362 $query .= 'tag_name = ?'; 363 $params[] = $tag_name; 364 } 365 $dbresult = $db->Execute( $query, $params ); 366 if( $dbresult == false ) 367 { 368 return true; 369 } 370 return false; 371 } 372 373 374 function RemoveAllEventHandlers( $modulename, $eventname ) 375 { 376 global $gCms; 377 $db = &$gCms->GetDb(); 378 379 // find the id 380 $q = "SELECT event_id FROM ".cms_db_prefix()."events WHERE 381 originator = ? AND event_name = ?"; 382 $dbresult = $db->Execute( $q, array( $modulename, $eventname ) ); 383 if( $dbresult == false || $dbresult->RecordCount() == 0 ) 384 { 385 // query failed, event not found 386 return false; 387 } 388 $row = $dbresult->FetchRow(); 389 $id = $row['event_id']; 390 391 // and delete the handlers 392 $q = "DELETE FROM ".cms_db_prefix()."event_handlers 393 WHERE event_id = ?"; 394 $dbresult = $db->Execute( $q, array( $id ) ); 395 if( $dbresult == false ) 396 { 397 return true; 398 } 399 return false; 400 } 401 402 403 /** 404 * Place to handle the help messages for core events. Basically just going to 405 * call out to the lang() function. 406 * 407 * @params string $eventname The name of the event 408 * 409 * @returns string Returns the help string for the event. Empty string if nothing 410 * is found. 411 * 412 */ 413 function GetEventHelp($eventname) 414 { 415 return lang('event_help_'.strtolower($eventname)); 416 } 417 418 419 420 /** 421 * Place to handle the description strings for core events. Basically just going to 422 * call out to the lang() function. 423 * 424 * @params string $eventname The name of the event 425 * 426 * @returns string Returns the description string for the event. Empty string if nothing 427 * is found. 428 * 429 */ 430 function GetEventDescription($eventname) 431 { 432 return lang('event_desc_'.strtolower($eventname)); 433 } 434 435 436 function SetupCoreEvents() 437 { 438 $modulename = 'Core'; 439 440 Events::CreateEvent( $modulename, 'LoginPost'); 441 Events::CreateEvent( $modulename, 'LogoutPost'); 442 443 Events::CreateEvent( $modulename, 'AddUserPre'); 444 Events::CreateEvent( $modulename, 'AddUserPost'); 445 Events::CreateEvent( $modulename, 'EditUserPre'); 446 Events::CreateEvent( $modulename, 'EditUserPost'); 447 Events::CreateEvent( $modulename, 'DeleteUserPre'); 448 Events::CreateEvent( $modulename, 'DeleteUserPost'); 449 450 Events::CreateEvent( $modulename, 'AddGroupPre'); 451 Events::CreateEvent( $modulename, 'AddGroupPost'); 452 Events::CreateEvent( $modulename, 'EditGroupPre'); 453 Events::CreateEvent( $modulename, 'EditGroupPost'); 454 Events::CreateEvent( $modulename, 'DeleteGroupPre'); 455 Events::CreateEvent( $modulename, 'DeleteGroupPost'); 456 457 Events::CreateEvent( $modulename, 'AddStylesheetPre'); 458 Events::CreateEvent( $modulename, 'AddStylesheetPost'); 459 Events::CreateEvent( $modulename, 'EditStylesheetPre'); 460 Events::CreateEvent( $modulename, 'EditStylesheetPost'); 461 Events::CreateEvent( $modulename, 'DeleteStylesheetPre'); 462 Events::CreateEvent( $modulename, 'DeleteStylesheetPost'); 463 464 Events::CreateEvent( $modulename, 'AddTemplatePre'); 465 Events::CreateEvent( $modulename, 'AddTemplatePost'); 466 Events::CreateEvent( $modulename, 'EditTemplatePre'); 467 Events::CreateEvent( $modulename, 'EditTemplatePost'); 468 Events::CreateEvent( $modulename, 'DeleteTemplatePre'); 469 Events::CreateEvent( $modulename, 'DeleteTemplatePost'); 470 Events::CreateEvent( $modulename, 'TemplatePreCompile'); 471 Events::CreateEvent( $modulename, 'TemplatePostCompile'); 472 473 Events::CreateEvent( $modulename, 'AddGlobalContentPre'); 474 Events::CreateEvent( $modulename, 'AddGlobalContentPost'); 475 Events::CreateEvent( $modulename, 'EditGlobalContentPre'); 476 Events::CreateEvent( $modulename, 'EditGlobalContentPost'); 477 Events::CreateEvent( $modulename, 'DeleteGlobalContentPre'); 478 Events::CreateEvent( $modulename, 'DeleteGlobalContentPost'); 479 Events::CreateEvent( $modulename, 'GlobalContentPreCompile'); 480 Events::CreateEvent( $modulename, 'GlobalContentPostCompile'); 481 482 Events::CreateEvent( $modulename, 'ContentEditPre'); 483 Events::CreateEvent( $modulename, 'ContentEditPost'); 484 Events::CreateEvent( $modulename, 'ContentDeletePre'); 485 Events::CreateEvent( $modulename, 'ContentDeletePost'); 486 487 Events::CreateEvent( $modulename, 'AddUserDefinedTagPre'); 488 Events::CreateEvent( $modulename, 'AddUserDefinedTagPost'); 489 Events::CreateEvent( $modulename, 'EditUserDefinedTagPre'); 490 Events::CreateEvent( $modulename, 'EditUserDefinedTagPost'); 491 Events::CreateEvent( $modulename, 'DeleteUserDefinedTagPre'); 492 Events::CreateEvent( $modulename, 'DeleteUserDefinedTagPost'); 493 494 Events::CreateEvent( $modulename, 'ModuleInstalled'); 495 Events::CreateEvent( $modulename, 'ModuleUninstalled'); 496 Events::CreateEvent( $modulename, 'ModuleUpgraded'); 497 498 Events::CreateEvent( $modulename, 'ContentStylesheet'); 499 Events::CreateEvent( $modulename, 'ContentPreCompile'); 500 Events::CreateEvent( $modulename, 'ContentPostCompile'); 501 Events::CreateEvent( $modulename, 'ContentPostRender'); 502 Events::CreateEvent( $modulename, 'SmartyPreCompile'); 503 Events::CreateEvent( $modulename, 'SmartyPostCompile'); 504 505 Events::CreateEvent( $modulename, 'ChangeGroupAssignPre'); 506 Events::CreateEvent( $modulename, 'ChangeGroupAssignPost'); 507 } 508 509 } // class 510 # vim:ts=4 sw=4 noet 511 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Tue Apr 3 18:50:37 2007 | par Balluche grâce à PHPXref 0.7 |