[ Index ]
 

Code source de CMS made simple 1.0.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/classes/ -> class.events.inc.php (source)

   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  ?>


Généré le : Tue Apr 3 18:50:37 2007 par Balluche grâce à PHPXref 0.7