All pastes #621517 Raw Edit

civicrm custom page addition

public text v1 · immutable
·published 2007-07-16 06:48 UTC
rendered paste body
<?php

  /**
   * @package Drupal Modules
   * @subpackage CiviCRM
   */

  /**
   *
   */
class nzg_CiviCRM {
  
  function init($pageTab = NULL) {

    if ($may_cache || substr($_GET['q'], 0, 20) ==  'civicrm/contact/view') {  
      /**
       * Add a tab button to the Contact View page via CiviCRM API as per
       * http://heydon.com.au/node/942
       *
       * dlobo initially advised to hook it in directly via modifications
       * to Contact View page, so took that approach at first. This would
       * be better (because it is more modular) so will still see if this
       * is feasible.
       */
      civicrm_initialize(TRUE);  
      require_once 'CRM/Core/Menu.php';  
	
      //	print_r(CRM_Core_Menu::$items);
      global $items ;

      $items[] = array(  
		       'path'     =>  'civicrm/contact/view/interests',  
		       'query'    =>  'reset=1&cid=%%cid%%',  
		       'qs'       =>  'reset=1&cid=%%cid%%',   // old?
		       'title'    =>  t('Interests'),  
		       'type'     =>  CRM_Core_Menu::CALLBACK,  
		       'crmType'  =>  CRM_Core_Menu::LOCAL_TASK,
		       'callback' =>  'interests',  
		       'weight'   =>  6,  
		       );  
      CRM_Core_Menu::add($items[count($items)-1]);  

    }
  }

  /**
   * Render and return a tab page using CiviCRM and Smarty
   *
   * Based on code from http://heydon.com.au/node/942
   */
  function displayContactPageTab($pageTab = NULL) {

    // Firstly we initialise the CiviCRM API. 
    civicrm_initialize(TRUE);
    require_once 'CRM/Core/Menu.php';  // was CRM/Utils/Menu.php
    require_once 'CRM/Core/BAO/CustomGroup.php';  

    // Because there are custom tabs attached to the contact page, You
    // need to add these to the menu as well.
    CRM_Core_Menu::addParam('cid', $_GET['cid']);  
  
    // As a part of the menu item above there was a replacable field for
    // cid -> %%cid%% so that when the url is displayed it will be
    // replaced with the correct contact id. So this above will add the
    // information so the %%cid%% will be replaced in the menu.
    $contact = crm_get_contact(array('contact_id' =>  $_GET['cid']));  
  
    // We then set the title so that it will display the name of the
    // contact and the image which displays the contact.
    $image =  CRM_Contact_BAO_Contact::getImage($contact->contact_type);  
    CRM_Utils_System::setTitle( $image . ' ' .  $contact->display_name );  

    // This block will add the custom tabs to the menu so that it looks
    // the same as the other parts of the contact pages.
    $startWeight =  CRM_Core_Menu::getMaxWeight('civicrm/contact/view');  
    $startWeight++;  
    CRM_Core_BAO_CustomGroup::AddMenuTabs($contact->contact_type,  'civicrm/contact/view/cd', $startWeight);  

    // Lastly we create the CiviCRM Smarty object and set vars that
    // need to be past to the template. It is important to set the
    // tplFile which is a pointer to the template file for this
    // page. Then call the fetch('CRM/index.tpl') and the page will be
    // rendered for you, and it will look like it is a CiviCRM page that
    // was always meant to be there.
    $membership = array('one','two') ; // membership_load($contact->id);  
    $template =& CRM_Core_Smarty::singleton();  
    $template->assign_by_ref('contact', $contact);  
    $template->assign_by_ref('membership', $membership); 
    $template->assign_by_ref('interest_areas', nzg_CiviCRM_Template::interestareas_form()) ;
    $template->assign('tplFile',  'CRM/Contact/Page/View/InterestAreas.tpl');  
    $output.= $template->fetch('CRM/index.tpl');  
  
    return $output;  

  }

}

class nzg_CiviCRM_Template {

  function interestareas_form() {
    // retrieve taxonomy
    $taxonomy = taxonomy_form(9) ;
    // modify to our needs (eg add additional checkboxes)
    
    // return processed form
    return drupal_get_form('taxonomy_form_vocabulary', $taxonomy);
  }
  
}

// add the contact page tab to contact page
nzg_CiviCRM::init() ;

/**
 * hook to add links to civicrm elements
 */
function nzg_civicrm_civicrm_links( $op, $objectName, $objectId ) { 
  if ( $op == 'tabs.contact.activity' && $objectName == 'Contact' ) {
    return array( 
		 array( 
		       'id' => 'interests',
		       'url' => CRM_Utils_System::url( 'civicrm/contact/view/interests', 
						       "reset=1&snippet=1&cid={$objectId}" ),
		       'title' => 'Interests',
		       'weight' => 100
		       )
		 ) ;
  }
}

/**
 * Implementation of Drupal _menu hook
 *
 * @return array
 */
function nzg_civicrm_menu($may_cache) {
  if ( $may_cache ) {
    // things which should appear only when called in cacheable page
  }
  $items[] = array( 
		   'path'    => 'contact/view/interests',
		   'title'   => t('Interests'),
		   'type'    => MENU_CALLBACK,
		   'callback' => 'nzg_civicrm_contact_view_page_interests',
		   'access' => user_access('access CiviCRM'),
		   ) ;
  return $items ;
}

function nzg_civicrm_contact_view_page_interests() {
  // this gets a 403, no matter what
  return nzg_CiviCRM::displayContactPageTab() ;
}