Skip to content
heartbeat.module 3.6 KiB
Newer Older
<?php
// by Jochen Stals - ONE-agency - www.one-agency.be

/**
 * Implementation of hook_views_api()
 *
 * This hook will tell views2 that heartbeat activity is available
 */
function heartbeat_views_api() {
  return array(
    'api' => 2,
    'path' => drupal_get_path('module', 'heartbeat'),
  );
}

/**
 * Implementation of hook_perm().
 */
function heartbeat_perm() {
  return array('configure heartbeat');
}

/**
 *  Implementation of hook_menu().
 */
function heartbeat_menu() {
  $items = array();
  // Administer list
  $items['admin/settings/heartbeat'] = array(
    'title' => t('heartbeat settings'),
    'description' => t('Administer settings for heartbeat.'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('heartbeat_admin_settings'),
    'access arguments' => array('configure heartbeat'),
    'file' => 'heartbeat.admin.inc',
  );
  // Tabs
  $items['admin/settings/heartbeat/settings'] = array(
    'title' => 'Heartbeat settings',
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => 5,
  );
  return $items;
}

/**
 * Class to handle user activity data
 *
 */
class user_activity {
  
  // Private members are prefixed with m_
  private $m_uid = 0;
  private $m_uid_target = 0;
  private $m_nid_target = 0;
  private $m_message = '';
  private $m_event = '';
  private $m_variables = array();
  private $m_variables_string = '';
  
  /**
   * constructor
   */
  function __construct($data=null) {
    if(isset($data)) {
      $this->set_data($data);
    }
  }
  
  /**
   * Set data into members
   */
  public function set_data($data) {
    if(isset($data['m_uid'])) 
     $this->m_uid = $data['m_uid'];
    if(isset($data['m_uid_target'])) 
      $this->m_uid_target = $data['m_uid_target'];
    if(isset($data['m_nid_target'])) 
      $this->m_nid_target = $data['m_nid_target'];
    if(isset($data['m_message'])) 
      $this->m_message = $data['m_message'];
    if(isset($data['m_event'])) 
      $this->m_event = $data['m_event'];
    if(isset($data['m_variables_string'])) 
      $this->m_variables_string = $data['m_variables_string'];
    // if the data variables have not been included 
    // as normal members, do so now to be available when asked for
    if($this->m_variables == array() && $this->m_variables_string != '') {
      $this->variables2array($this->m_variables_string);
    }
  }  
  
  /**
   * Method gets a user_activity variable
   * 
   * @desc The magic getter method fetches a variable
   *       in members. If not found there, it will always 
   *       check the variables as well
   */
  public function __get($variable) {    
    // a private member is asked
    $var = null;
    if( isset( $this->{'m_'.$variable} ) ) {
      $var = $this->{'m_'.$variable};
    }
    else if(array_key_exists($variable, $this->m_variables)) {
      $var = $this->m_variables[$variable];
    }
    return $var;
  }
  
  /**
   * public function to set variables into readable array
   */
  public function variables2array($string) {
    $array = explode(";", $string);
    if(!empty($array)) {
      foreach($array as $var => $value) {
        $this->m_variables[$var] = (string)$value;
      }
    }
    return $this->m_variables;
  }
  
  /**
   * Public function to save activity to database
   */
  public function save() {      
    // Log relational message to user activity
    db_query("INSERT INTO user_activity SET 
    uid=%d, uid_target=%d, nid_target=%d, 
    message='%s', timestamp=%d, event='%s', variables='%s'", 
    $this->m_uid,  $this->m_uid_target, $this->m_nid_target, 
    $this->m_message, $_SERVER['REQUEST_TIME'], $this->m_event, $this->m_variables_string );
  }

} // eof class user_activity