com.pogstone.fancytokens/fancytokens.php

546 lines
19 KiB
PHP
Raw Permalink Normal View History

2014-02-15 23:30:30 +01:00
<?php
require_once 'fancytokens.civix.php';
function fancytokens_civicrm_tokens( &$tokens ){
$tokens['communitynews'] = array(
'communitynews.upcomingevents___day_7' => 'Community News & Engagement: Events in the next 7 days',
'communitynews.upcomingevents___day_14' => 'Community News & Engagement: Events in the next 14 days',
'communitynews.upcomingevents___day_30' => 'Community News & Engagement: Events in the next 30 days',
'communitynews.upcomingevents___week_3' => 'Community News & Engagement: Events in the next 3 weeks',
'communitynews.upcomingevents___month_3' => 'Community News & Engagement: Events in the next 3 months',
);
// create tokens for the next x events that allow online registration
$event_sql = "select e.id, e.title, date(e.start_date) as start_date FROM civicrm_event e
WHERE e.start_date >= now() and e.is_active =1 AND e.is_online_registration = 1
AND e.is_template <> 1
AND ( e.registration_end_date is null || now() <= e.registration_end_date )
AND ( e.registration_start_date is null || now() >= e.registration_start_date )
ORDER BY e.start_date
LIMIT 15 ";
$dao =& CRM_Core_DAO::executeQuery( $event_sql, CRM_Core_DAO::$_nullArray ) ;
while($dao->fetch()){
$e_id = $dao->id;
$e_title = $dao->title;
$e_start_date = $dao->start_date;
$label = 'Community News & Engagement: Event Registration Page: '.$e_title.' on '.$e_start_date.' (id: '.$e_id.')';
$key = 'communitynews.event_registrationpage___'.$e_id ;
$tokens['communitynews'][$key] = $label;
}
$dao->free();
2014-02-15 23:30:30 +01:00
// Create tokens for all active Contribution Pages
2014-02-15 23:30:30 +01:00
$params = array(
'version' => 3,
'sequential' => 1,
'is_active' => 1,
);
$result = civicrm_api('ContributionPage', 'get', $params);
if( $result['is_error'] <> 0 ){
print "<br><br>Error calling get API for ContributionPage";
print_r($result);
}else{
$contrib_pages = $result['values'] ;
foreach($contrib_pages as $cur){
$key = 'communitynews.contributionpage___'.$cur['id'] ;
$label = 'Community News & Engagement: Contribution Page: '.$cur['title'].' (id: '.$cur['id'].')';
$tokens['communitynews'][$key] = $label;
}
}
// Get all active profiles and create tokens for the ones that can be stand-alone.
2014-02-15 23:30:30 +01:00
$params = array(
'version' => 3,
'sequential' => 1,
'is_active' => 1,
'options' => array( 'limit' => 100),
);
$result = civicrm_api('UFGroup', 'get', $params);
if( $result['is_error'] <> 0 ){
print "<br><br>Error calling get API for UFGroup (aka Profiles)";
print_r($result);
}else{
$standalone_profiles = $result['values'] ;
foreach($standalone_profiles as $cur){
2014-09-02 00:05:43 +02:00
$p_type = "";
if( isset( $cur['group_type'])){
$p_type = $cur['group_type'];
2014-02-15 23:30:30 +01:00
2014-09-02 00:05:43 +02:00
}
2014-02-15 23:30:30 +01:00
$type_array = explode( "," , $p_type); // Contributions Activity
if ( false == ( in_array("Participant", $type_array ) || in_array("Organization", $type_array ) || in_array("Membership", $type_array ) || in_array("Household", $type_array ) || in_array("Contributions", $type_array ) || in_array("Activity", $type_array ) )) {
$key = 'communitynews.standaloneprofile___'.$cur['id'] ;
$label = 'Community News & Engagement: Standalone Profile Form: '.$cur['title'].' (id: '.$cur['id'].')';
$tokens['communitynews'][$key] = $label;
}
}
}
2014-09-04 00:53:46 +02:00
// Check if this is Drupal, and if so check if the 'WebForm CiviCRM' module is installed.
// Then generate tokens for each published Drupal WebForm that uses CiviCRM integration.
$config = CRM_Core_Config::singleton();
//print "<br><br>";
//print_r($config);
if ($config->userSystem->is_drupal){
if( module_exists( "webform_civicrm") && module_exists( "webform_civicrm")){
$drupal_db = getUserFrameworkDatabaseName();
$sql = "SELECT cforms.nid, node.title FROM $drupal_db.webform_civicrm_forms cforms
JOIN $drupal_db.node ON cforms.nid = node.nid AND node.status = 1 ";
// LEFT JOIN url_alias ua ON cforms.nid = substr( ua.source) AND ua.source LIKE 'node/%'
$dao =& CRM_Core_DAO::executeQuery( $sql, CRM_Core_DAO::$_nullArray ) ;
while($dao->fetch()){
$nid = $dao->nid;
$title = $dao->title;
//$url_alias = $dao->alias;
$key = 'communitynews.dwform___'.$nid ;
$label = "Community News & Engagement: Form: $title (id: $nid)";
$tokens['communitynews'][$key] = $label;
}
$dao->free();
}
}
2014-02-15 23:30:30 +01:00
2014-09-04 00:53:46 +02:00
}
2014-02-15 23:30:30 +01:00
2014-09-04 00:53:46 +02:00
function getUserFrameworkDatabaseName(){
// ['userFrameworkDSN'] => mysql://my_db_username:mypassword@localhost/my_db_name?new_link=true
$cms_db_name = "";
$config = CRM_Core_Config::singleton();
$cms_dsn_str = $config->userFrameworkDSN ;
$cms_tmp1 = explode( '@', $cms_dsn_str) ;
$cms_tmp2 = explode( '/', $cms_tmp1[1]);
$cms_tmp3 = explode( '?', $cms_tmp2[1]);
//print "<br><br>".$cms_tmp2[1];
if( strlen($cms_tmp3[0]) > 0){
$cms_db_name = $cms_tmp3[0];
}
return $cms_tmp3[0];
}
2014-02-15 23:30:30 +01:00
function fancytokens_civicrm_tokenValues( &$values, &$contactIDs, $job = null, $tokens = array(), $context = null) {
if(!empty($tokens['communitynews'])){
2014-02-15 23:30:30 +01:00
$website_host_name = $_SERVER['SERVER_NAME'];
$ssl_in_use = $_SERVER['HTTPS'];
if( strlen($ssl_in_use) > 0){
$protocol = "https://";
}else{
$protocol = "http://";
}
while( $cur_token_raw = current( $tokens['communitynews'] )){
$tmp_key = key($tokens['communitynews']);
$font_size = "10px";
// CiviCRM is buggy here, if token is being used in CiviMail, we need to use the key
// as the token. Otherwise ( PDF Letter, one-off email, etc) we
// need to use the value.
$cur_token = '';
if( is_numeric( $tmp_key)){
$cur_token = $cur_token_raw;
}else{
// Its being used by CiviMail.
$cur_token = $tmp_key;
}
$token_to_fill = 'communitynews.'.$cur_token;
//print "<br><br>Token to fill: ".$token_to_fill."<br>";
$token_as_array = explode("___", $cur_token );
$partial_token = $token_as_array[0];
if($partial_token == 'standaloneprofile'){
$profile_id = $token_as_array[1];
$partial_profile_link_url = $protocol.$website_host_name."/civicrm/profile/edit?reset=1&gid=";
if( is_numeric( $profile_id )){
$params = array(
'version' => 3,
'sequential' => 1,
'id' => $profile_id,
);
$result = civicrm_api('UFGroup', 'getsingle', $params);
$link_label = $result['title'];
foreach ( $contactIDs as $cid ) {
$tmp_checksum = CRM_Contact_BAO_Contact_Utils::generateChecksum($cid);
$full_profile_link = $partial_profile_link_url.$profile_id."&cs=".$tmp_checksum."&id=".$cid;
$tmp_profile_html = "<a href='".$full_profile_link."'>".$link_label."</a>";
$values[$cid][$token_to_fill] = $tmp_profile_html;
}
}
}else if( $partial_token == 'contributionpage' ){
$contrib_page_id = $token_as_array[1];
$partial_contrib_page_link_url = $protocol.$website_host_name."/civicrm/contribute/transact?reset=1&id=";
if( is_numeric( $contrib_page_id )){
$params = array(
'version' => 3,
'sequential' => 1,
'id' => $contrib_page_id,
);
$result = civicrm_api('ContributionPage', 'getsingle', $params);
$link_label = $result['title'];
foreach ( $contactIDs as $cid ) {
$tmp_checksum = CRM_Contact_BAO_Contact_Utils::generateChecksum($cid);
$full_contrib_page_link = $partial_contrib_page_link_url.$contrib_page_id."&cs=".$tmp_checksum."&cid=".$cid;
$tmp_contrib_page_html = "<a href='".$full_contrib_page_link."'>".$link_label."</a>";
$values[$cid][$token_to_fill] = $tmp_contrib_page_html;
}
}
}else if( $partial_token == 'upcomingevents'){
$token_date = $token_as_array[1];
$date_array = explode("_", $token_date);
$date_unit = $date_array[0];
$date_number = $date_array[1];
$tmp_event_html = "";
if( is_numeric( $date_number) && ( $date_unit == 'day' || $date_unit == 'week' || $date_unit == 'month' )){
// get event data
$sql = "SELECT e.id , e.summary, e.title, e.registration_link_text,
date_format( e.start_date, '%W %b %e at %l:%i %p' ) as start_date ,
if( e.is_online_registration = 1 AND
( e.registration_end_date is null || now() <= e.registration_end_date ) AND
( e.registration_start_date is null || now() >= e.registration_start_date ), '1', '0') as
show_registration_link
FROM civicrm_event e
WHERE e.is_active = 1 AND e.is_public = 1 AND e.is_template <> 1 AND
e.start_date >= now() AND e.start_date <= date_add(now(), INTERVAL ".$date_number." ".$date_unit." )
ORDER BY e.start_date";
// print "<br>SQL: ".$sql;
$event_info_link_url = $protocol.$website_host_name."/civicrm/event/info?reset=1&id=";
$event_register_link_url = $protocol.$website_host_name."/civicrm/event/register?reset=1&id=";
// print "<br>contacts: ";
// print_r($contactIDs);
foreach ( $contactIDs as $cid ) {
$tmp_event_html = "";
$dao =& CRM_Core_DAO::executeQuery( $sql, CRM_Core_DAO::$_nullArray ) ;
while($dao->fetch()){
$eid = $dao->id;
$e_title = $dao->title;
$e_start_date = $dao->start_date;
$e_short_summary = $dao->summary;
$e_show_registration_link = $dao->show_registration_link;
$registration_link_text = $dao->registration_link_text;
$register_html = "";
if( $e_show_registration_link == "1" ){
$tmp_checksum = CRM_Contact_BAO_Contact_Utils::generateChecksum($cid);
// print "<br>checksum: ".$tmp_checksum;
// If you want to use the checksum style URL, then add this to the end of the URL
// "&cs=".$tmp_checksum."&cid=".$cid
$full_register_link = $event_register_link_url.$eid."&cs=".$tmp_checksum."&cid=".$cid;
$register_html = "<br>&nbsp;<b><a href='".$full_register_link."'>".$registration_link_text."</b></a>";
}else{
$register_html = "";
}
if(strlen( $e_short_summary ) > 0){
$summary_html = " <br>&nbsp;&nbsp;&nbsp;&nbsp; ".$e_short_summary;
}else{
$summary_html = "";
}
$tmp_event_html = $tmp_event_html."\n<br><br><a href='".$event_info_link_url.$eid."'>".$e_title."</a> on ".
$e_start_date.$register_html.$summary_html;
}
$dao->free();
// Populate the token value for this contact.
$values[$cid][$token_to_fill] = $tmp_event_html;
}
}
}else if( $partial_token == 'event_registrationpage'){
// communitynews.event_registrationpage___'.$e_id
$token_event_id = $token_as_array[1];
$tmp_event_html = "";
if( is_numeric( $token_event_id) ){
// get event data
$sql = "SELECT e.id , e.summary, e.title, e.registration_link_text,
date_format( e.start_date, '%W %b %e at %l:%i %p' ) as start_date ,
if( e.is_online_registration = 1 AND
( e.registration_end_date is null || now() <= e.registration_end_date ) AND
( e.registration_start_date is null || now() >= e.registration_start_date ), '1', '0') as
show_registration_link
FROM civicrm_event e
WHERE e.is_active = 1 AND e.is_public = 1 AND e.is_template <> 1 AND
e.start_date >= now() AND e.id = '".$token_event_id."'
ORDER BY e.start_date";
// print "<br>SQL: ".$sql;
// $event_info_link_url = $protocol.$website_host_name."/civicrm/event/info?reset=1&id=";
$event_register_link_url = $protocol.$website_host_name."/civicrm/event/register?reset=1&id=";
// print "<br>contacts: ";
// print_r($contactIDs);
foreach ( $contactIDs as $cid ) {
$tmp_event_html = "";
2014-02-15 23:30:30 +01:00
$dao =& CRM_Core_DAO::executeQuery( $sql, CRM_Core_DAO::$_nullArray ) ;
while($dao->fetch()){
$eid = $dao->id;
$e_title = $dao->title;
$e_start_date = $dao->start_date;
$e_short_summary = $dao->summary;
$e_show_registration_link = $dao->show_registration_link;
$registration_link_text = $dao->registration_link_text;
$register_html = "";
if( $e_show_registration_link == "1" ){
$tmp_checksum = CRM_Contact_BAO_Contact_Utils::generateChecksum($cid);
// print "<br>checksum: ".$tmp_checksum;
// If you want to use the checksum style URL, then add this to the end of the URL
// "&cs=".$tmp_checksum."&cid=".$cid
$full_register_link = $event_register_link_url.$eid."&cs=".$tmp_checksum."&cid=".$cid;
$register_html = "<br>&nbsp;<b><a href='".$full_register_link."'>".$registration_link_text."</b></a>";
}else{
$register_html = "";
}
if(strlen( $e_short_summary ) > 0){
$summary_html = " <br>&nbsp;&nbsp;&nbsp;&nbsp; ".$e_short_summary;
}else{
$summary_html = "";
}
$tmp_event_html = $tmp_event_html."\n<br><br>".$e_title." on ".
2014-02-15 23:30:30 +01:00
$e_start_date.$register_html.$summary_html;
}
$dao->free();
// Populate the token value for this contact.
$values[$cid][$token_to_fill] = $tmp_event_html;
}
}
2014-09-04 00:53:46 +02:00
}else if( $partial_token == 'dwform' ){
$token_node_id = $token_as_array[1];
$drupal_db = getUserFrameworkDatabaseName();
if( is_numeric( $token_node_id) ){
// get Drupal WebForm data for this node id.
$sql = "SELECT cforms.nid, node.title, ua.alias
FROM $drupal_db.webform_civicrm_forms cforms
JOIN $drupal_db.node ON cforms.nid = node.nid AND node.status = 1
LEFT JOIN $drupal_db.url_alias ua ON cforms.nid = SUBSTRING( ua.source, 6 )
AND ua.source LIKE 'node/%'
WHERE node.nid = $token_node_id";
$dao =& CRM_Core_DAO::executeQuery( $sql, CRM_Core_DAO::$_nullArray ) ;
while($dao->fetch()){
$tmp_title = $dao->title;
$tmp_alias = $dao->alias;
$tmp_nid = $dao->nid;
if( strlen( $tmp_alias) > 0){
$partial_webform_link_url = $protocol.$website_host_name."/".$tmp_alias;
}else{
$partial_webform_link_url = $protocol.$website_host_name."/node/".$tmp_nid;
}
$link_label = $tmp_title;
}
$dao->free();
foreach ( $contactIDs as $cid ) {
$tmp_checksum = CRM_Contact_BAO_Contact_Utils::generateChecksum($cid);
$full_webform_link = $partial_webform_link_url."?"."cs=".$tmp_checksum."&cid=".$cid;
$tmp_webform_html = "<a href='".$full_webform_link."'>".$link_label."</a>";
$values[$cid][$token_to_fill] = $tmp_webform_html;
}
}
2014-02-15 23:30:30 +01:00
}
next($tokens['communitynews']);
}
}
2014-02-15 23:30:30 +01:00
}
/**
* Implementation of hook_civicrm_config
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_config
*/
function fancytokens_civicrm_config(&$config) {
_fancytokens_civix_civicrm_config($config);
}
/**
* Implementation of hook_civicrm_xmlMenu
*
* @param $files array(string)
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu
*/
function fancytokens_civicrm_xmlMenu(&$files) {
_fancytokens_civix_civicrm_xmlMenu($files);
}
/**
* Implementation of hook_civicrm_install
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install
*/
function fancytokens_civicrm_install() {
return _fancytokens_civix_civicrm_install();
}
/**
* Implementation of hook_civicrm_uninstall
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
*/
function fancytokens_civicrm_uninstall() {
return _fancytokens_civix_civicrm_uninstall();
}
/**
* Implementation of hook_civicrm_enable
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable
*/
function fancytokens_civicrm_enable() {
return _fancytokens_civix_civicrm_enable();
}
/**
* Implementation of hook_civicrm_disable
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable
*/
function fancytokens_civicrm_disable() {
return _fancytokens_civix_civicrm_disable();
}
/**
* Implementation of hook_civicrm_upgrade
*
* @param $op string, the type of operation being performed; 'check' or 'enqueue'
* @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks
*
* @return mixed based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending)
* for 'enqueue', returns void
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade
*/
function fancytokens_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
return _fancytokens_civix_civicrm_upgrade($op, $queue);
}
/**
* Implementation of hook_civicrm_managed
*
* Generate a list of entities to create/deactivate/delete when this module
* is installed, disabled, uninstalled.
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed
*/
function fancytokens_civicrm_managed(&$entities) {
return _fancytokens_civix_civicrm_managed($entities);
}
/**
* Implementation of hook_civicrm_caseTypes
*
* Generate a list of case-types
*
* Note: This hook only runs in CiviCRM 4.4+.
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
*/
function fancytokens_civicrm_caseTypes(&$caseTypes) {
_fancytokens_civix_civicrm_caseTypes($caseTypes);
}
/**
* Implementation of hook_civicrm_alterSettingsFolders
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
*/
function fancytokens_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
_fancytokens_civix_civicrm_alterSettingsFolders($metaDataFolders);
}