NOW()
AND ( at.target_contact_id IS NULL OR at.target_contact_id = %2 )
ORDER BY a.activity_date_time asc
";
$params = array( 2 => array( $childID , 'Integer' ),
3 => array( self::ADVISOR_RELATIONSHIP_TYPE_ID, 'Integer' ),
4 => array( self::CONFERENCE_ACTIVITY_TYPE_ID , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
$elements = array( );
while ( $dao->fetch( ) ) {
$dateTime = CRM_Utils_Date::customFormat( $dao->activity_date_time,
"%l:%M %P on %b %E%f" );
$advisorName = $dao->nick_name ? $dao->nick_name : $dao->display_name;
$elements[$dao->activity_id] = "$dateTime w/{$advisorName}";
}
$parentID = CRM_Utils_Request::retrieve( 'parentID', 'Integer', $form, false, null, $_REQUEST );
if ( $parentID ) {
$sess =& CRM_Core_Session::singleton( );
$url = CRM_Utils_System::url( 'civicrm/profile/view',
"reset=1&gid=3&id=$parentID" );
$form->removeElement( 'cancelURL' );
$form->add( 'hidden', 'cancelURL', $url );
$sess->pushUserContext( $url );
}
if ( ! empty( $elements ) ) {
$form->addElement( 'select', 'sfschool_activity_id', "Choose a Meeting time for {$dao->subject}", $elements, true );
// get the default values
$values = array( );
self::getValues( $childID, $values, true, $parentID );
if ( isset( $values[$childID] ) ) {
$defaults = array( 'sfschool_activity_id' => $values[$childID]['meeting']['id'] );
$form->setDefaults( $defaults );
}
}
}
static function postProcess( $class, &$form, $gid ) {
$advisorID = CRM_Utils_Request::retrieve( 'advisorID', 'Integer', $form, false, null, $_REQUEST );
$ptc = CRM_Utils_Request::retrieve( 'ptc' , 'Integer', $form, false, null, $_REQUEST );
if ( empty( $advisorID ) || $ptc != 1 ) {
return;
}
$params = $form->controller->exportValues( $form->getVar( '_name' ) );
$activityID = CRM_Utils_Array::value( 'sfschool_activity_id', $params );
$childID = $form->getVar( '_id' );
self::selectPTC( $advisorID, $childID, $activityID );
}
function sendConferenceEmail( $activityID, $advisorID, $childID, $dateTime = null ) {
require_once 'SFS/Utils/Query.php';
$templateVars = array( );
list( $templateVars['advisorName'],
$templateVars['advisorEmail'] ) = SFS_Utils_Query::getNameAndEmail( $advisorID );
if ( $dateTime == null ) {
$dateTime = CRM_Core_DAO::getFieldValue( 'CRM_Activity_DAO_Activity',
$activityID,
'activity_date_time' );
}
$templateVars['dateTime'] = CRM_Utils_Date::customFormat( $dateTime,
"%l:%M %P on %b %E%f" );
// now send a message to the parents about what they did
require_once 'SFS/Utils/Mail.php';
SFS_Utils_Mail::sendMailToParents( $childID,
'SFS/Mail/Conference/Subject.tpl',
'SFS/Mail/Conference/Message.tpl',
$templateVars );
}
function &getValues( $childrenIDs,
&$values,
$onlyScheduled = false,
$parentID = null ) {
// check if we need to schedule this parent for a meeting
// or display any future scheduled meetings
if ( empty( $childrenIDs ) ) {
return;
}
$single = false;
if ( ! is_array( $childrenIDs ) ) {
$childrenIDs = array( $childrenIDs );
$single = true;
}
$childrenIDString = implode( ',', array_values( $childrenIDs ) );
// find first all scheduled meetings in the future
$sql = "
SELECT a.id, a.activity_date_time, a.subject, a.location, r.contact_id_b,
aac.id as advisor_id, aac.display_name as aac_display_name, aac.nick_name as aac_nick_name,
rcb.display_name as rcb_display_name
FROM civicrm_activity a
INNER JOIN civicrm_activity_assignment aa ON a.id = aa.activity_id
INNER JOIN civicrm_activity_target at ON a.id = at.activity_id
INNER JOIN civicrm_contact aac ON aa.assignee_contact_id = aac.id
INNER JOIN civicrm_relationship r ON r.contact_id_a = aac.id
INNER JOIN civicrm_contact rcb ON r.contact_id_b = rcb.id
WHERE a.activity_type_id = %2
AND a.status_id = 1
AND a.activity_date_time > NOW()
AND r.relationship_type_id = %1
AND r.is_active = 1
AND r.contact_id_b IN ( $childrenIDString )
AND aa.assignee_contact_id = r.contact_id_a
AND at.target_contact_id = r.contact_id_b;
";
$parent = null;
if ( $parentID ) {
$parent = "parentID=$parentID";
}
$params = array( 1 => array( self::ADVISOR_RELATIONSHIP_TYPE_ID, 'Integer' ),
2 => array( self::CONFERENCE_ACTIVITY_TYPE_ID , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
while ( $dao->fetch( ) ) {
$url = CRM_Utils_System::url( 'civicrm/profile/edit', "reset=1&gid=4&id={$dao->contact_id_b}&advisorID={$dao->advisor_id}&ptc=1&$parent" );
$dateTime = CRM_Utils_Date::customFormat( $dao->activity_date_time,
"%l:%M %P on %b %E%f" );
$advisorName = $dao->aac_nick_name ? $dao->aac_nick_name : $dao->aac_display_name;
$values[$dao->contact_id_b]['meeting']['title'] = "Your {$dao->subject} is scheduled for $dateTime with {$advisorName}";
$values[$dao->contact_id_b]['meeting']['edit'] = "Modify conference time for {$dao->rcb_display_name}";
$values[$dao->contact_id_b]['meeting']['id'] = $dao->id;
// FIXME when we have access to the web :)
$newChildrenIDs = array( );
foreach ( $childrenIDs as $childID ) {
if ( $dao->contact_id_b != $childID ) {
$newChildrenIDs[] = $childID;
}
}
$childrenIDs = $newChildrenIDs;
}
// check if other children left to schedule a meeting
if ( $onlyScheduled ||
empty( $childrenIDs ) ) {
return;
}
$childrenIDString = implode( ',', array_values( $childrenIDs ) );
$sql = "
SELECT r.contact_id_b, a.subject, a.location,
aac.display_name as aac_display_name, aac.nick_name as aac_nick_name, aac.id as advisor_id,
rcb.display_name as rcb_display_name
FROM civicrm_activity a
INNER JOIN civicrm_activity_assignment aa ON a.id = aa.activity_id
INNER JOIN civicrm_contact aac ON aa.assignee_contact_id = aac.id
INNER JOIN civicrm_relationship r ON r.contact_id_a = aac.id
LEFT JOIN civicrm_activity_target at ON a.id = at.activity_id
INNER JOIN civicrm_contact rcb ON r.contact_id_b = rcb.id
WHERE a.activity_type_id = %2
AND r.relationship_type_id = %1
AND r.is_active = 1
AND r.contact_id_b IN ($childrenIDString)
AND a.status_id = 1
AND a.activity_date_time > NOW()
AND at.target_contact_id IS NULL
GROUP BY r.contact_id_b
";
$params = array( 1 => array( self::ADVISOR_RELATIONSHIP_TYPE_ID, 'Integer' ),
2 => array( self::CONFERENCE_ACTIVITY_TYPE_ID , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
while ( $dao->fetch( ) ) {
$url = CRM_Utils_System::url( 'civicrm/profile/edit', "reset=1&gid=4&id={$dao->contact_id_b}&advisorID={$dao->advisor_id}&ptc=1&$parent" );
$advisorName = $dao->aac_nick_name ? $dao->aac_nick_name : $dao->aac_display_name;
$values[$dao->contact_id_b]['meeting']['title'] = "Please schedule your {$dao->subject} with {$advisorName}";
$values[$dao->contact_id_b]['meeting']['edit'] = "Schedule a conference for {$dao->rcb_display_name}";
}
}
static function createConferenceSchedule( ) {
require_once 'CRM/Utils/Request.php';
// we need the admin id, teacher id, date, start time and end time
$adminID = CRM_Utils_Request::retrieve( 'adminID',
'Integer',
CRM_Core_DAO::$_nullObject,
true );
$teacherID = CRM_Utils_Request::retrieve( 'teacherID',
'Integer',
CRM_Core_DAO::$_nullObject,
true );
$date = CRM_Utils_Request::retrieve( 'date',
'Date',
CRM_Core_DAO::$_nullObject,
true );
$start = CRM_Utils_Request::retrieve( 'start',
'Integer',
CRM_Core_DAO::$_nullObject,
true );
$end = CRM_Utils_Request::retrieve( 'end',
'Integer',
CRM_Core_DAO::$_nullObject,
true );
$duration = CRM_Utils_Request::retrieve( 'duration',
'Integer',
CRM_Core_DAO::$_nullObject,
true );
// perform validation on the parameters
require_once 'CRM/Activity/DAO/Activity.php';
require_once 'CRM/Activity/DAO/ActivityAssignment.php';
// create 1:10 - 1:40 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091117131000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 1:45 - 2:15 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091117134500",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 2:20 - 2:50 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091117142000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 3:15 - 3:45 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091117151500",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 8:00 - 8:30 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091118080000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 1:10 - 1:40 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091118131000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 1:45 - 2:15 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091118134500",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 2:20 - 2:50 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091118142000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 3:15 - 3:45 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091118151500",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 8:00 - 8:30 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091119080000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 1:10 - 1:40 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091119131000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 1:45 - 2:15 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091119134500",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 2:20 - 2:50 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091119142000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
// create 3:15 - 3:45 slot
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"20091119151500",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
/*********
for ( $time = $start; $time < $end; $time++ ) {
// skip lunch hour for 6th grade conference
if ( $time == 12 ) {
continue;
}
if ( $time < 10 ) {
$time = "0{$time}";
}
// skip 8:00 am slot for middle school
if ( $time != '08' ) {
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"{$date}{$time}0000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
}
// skip 5:30 pm slot
if ( $time != '17' ) {
self::createConference( $adminID, $teacherID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
"{$date}{$time}3000",
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
}
}
****/
}
static function createConference( $adminID,
$teacherID,
$activityTypeID,
$activityDateTime,
$subject,
$location,
$statusID,
$duration = 30 ) {
require_once 'CRM/Activity/DAO/Activity.php';
$activity = new CRM_Activity_DAO_Activity( );
$activity->source_contact_id = $adminID;
$activity->activity_type_id = $activityTypeID;
$activity->activity_date_time = $activityDateTime;
$activity->status_id = $statusID;
$activity->subject = $subject;
$activity->duration = $duration;
$activity->location = $location;
$activity->save( );
require_once 'CRM/Activity/DAO/ActivityAssignment.php';
$assignment = new CRM_Activity_DAO_ActivityAssignment( );
$assignment->activity_id = $activity->id;
$assignment->assignee_contact_id = $teacherID;
$assignment->save( );
return $activity->id;
}
static function deleteAll( $childID ) {
$sql = "
UPDATE civicrm_activity a,
civicrm_activity_assignment aa,
civicrm_activity_target at
SET a.phone_number = NULL
WHERE a.activity_type_id = %2
AND a.id = aa.activity_id
AND a.id = at.activity_id
AND a.status_id = 1
AND a.activity_date_time > NOW()
AND at.target_contact_id = %1
";
$params = array( 1 => array( $childID , 'Integer' ),
2 => array( self::CONFERENCE_ACTIVITY_TYPE_ID , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
$sql = "
DELETE at.*
FROM civicrm_activity a,
civicrm_activity_assignment aa,
civicrm_activity_target at
WHERE a.activity_type_id = %2
AND a.id = aa.activity_id
AND a.id = at.activity_id
AND a.status_id = 1
AND a.activity_date_time > NOW()
AND at.target_contact_id = %1
";
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
}
static function sendReminderEmail( $days, $offset = 1 ) {
$daysOffset = $days - $offset;
$sql = "
SELECT a.id, a.activity_date_time,
aa.assignee_contact_id as advisor_id,
at.target_contact_id as child_id
FROM civicrm_activity a,
civicrm_activity_assignment aa,
civicrm_activity_target at
WHERE a.activity_type_id = %1
AND a.status_id = 1
AND aa.activity_id = a.id
AND at.activity_id = a.id
AND a.activity_date_time > NOW( )
AND a.activity_date_time > ADDDATE( NOW( ), $daysOffset )
AND a.activity_date_time < ADDDATE( NOW( ), $days )
AND ( a.phone_number IS NULL OR ROUND( a.phone_number ) > %2 )
AND aa.assignee_contact_id != 71
AND aa.assignee_contact_id != 710
";
$params = array( 1 => array( self::CONFERENCE_ACTIVITY_TYPE_ID, 'Integer' ),
2 => array( $days , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
$activityIDs = array( );
while ( $dao->fetch( ) ) {
self::sendConferenceEmail( $dao->id, $dao->advisor_id, $dao->child_id, $dao->activity_date_time );
$activityIDs[] = $dao->id;
}
if ( ! empty( $activityIDs ) ) {
$activityIDString = implode( ',', $activityIDs );
$sql = "
UPDATE civicrm_activity
SET phone_number = %2
WHERE id IN ( $activityIDString )
";
CRM_Core_DAO::executeQuery( $sql, $params );
}
}
static function getPTCValuesOccupied( $teacherID, &$values ) {
$sql = "
SELECT c.id, c.display_name, a.id as activity_id, a.activity_date_time, at.id as target_id
FROM civicrm_contact c
INNER JOIN civicrm_relationship r ON c.id = r.contact_id_b
INNER JOIN civicrm_activity_assignment aa ON aa.assignee_contact_id = %1
INNER JOIN civicrm_activity a ON a.id = aa.activity_id
INNER JOIN civicrm_activity_target at ON at.target_contact_id = c.id AND at.activity_id = a.id
WHERE r.contact_id_a = %1
AND aa.assignee_contact_id = %1
AND r.relationship_type_id = %2
AND a.status_id = 1
ORDER BY a.activity_date_time
";
$params = array( 1 => array( $teacherID, 'Integer' ),
2 => array( self::ADVISOR_RELATIONSHIP_TYPE_ID, 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
while ( $dao->fetch( ) ) {
$values[$dao->id] = array( 'id' => $dao->id,
'name' => $dao->display_name,
'activity_id' => $dao->activity_id,
'target_id' => $dao->target_id,
'time' => CRM_Utils_Date::customFormat( $dao->activity_date_time,
"%l:%M %P on %b %E%f" ) );
}
}
static function getPTCValuesEmpty( $teacherID, &$values ) {
$sql = "
SELECT a.id as activity_id, a.activity_date_time
FROM civicrm_activity a
INNER JOIN civicrm_activity_assignment aa ON a.id = aa.activity_id
INNER JOIN civicrm_contact aac ON aa.assignee_contact_id = aac.id
INNER JOIN civicrm_relationship r ON r.contact_id_a = aac.id
LEFT JOIN civicrm_activity_target at ON a.id = at.activity_id
WHERE a.activity_type_id = %3
AND r.relationship_type_id = %2
AND r.is_active = 1
AND r.contact_id_a = %1
AND a.status_id = 1
AND a.activity_date_time > NOW()
AND ( at.target_contact_id IS NULL OR at.target_contact_id = %1 )
ORDER BY a.activity_date_time asc
";
$params = array( 1 => array( $teacherID , 'Integer' ),
2 => array( self::ADVISOR_RELATIONSHIP_TYPE_ID, 'Integer' ),
3 => array( self::CONFERENCE_ACTIVITY_TYPE_ID , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
while ( $dao->fetch( ) ) {
$values[$dao->activity_id] = array( 'id' => $dao->activity_id,
'time' => CRM_Utils_Date::customFormat( $dao->activity_date_time,
"%l:%M %P on %b %E%f" ) );
}
}
static function &getPTCNeedToScheduleIDs( $staffID,
$alreadyScheduledIDs ) {
$sql = "
SELECT c.id, c.display_name
FROM civicrm_contact c
INNER JOIN civicrm_relationship r
WHERE c.id = r.contact_id_b
AND r.is_active = 1
AND r.contact_id_a = %1
AND r.relationship_type_id = %2
";
if ( ! empty( $alreadyScheduledIDs ) ) {
$sql .= "
AND c.id NOT IN ( $alreadyScheduledIDs )
";
}
$sql .= "
ORDER BY c.display_name
";
$params = array( 1 => array( $staffID, 'Integer' ),
2 => array( self::ADVISOR_RELATIONSHIP_TYPE_ID, 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
$values = array( );
while ( $dao->fetch( ) ) {
$values[$dao->id] = $dao->display_name;
}
return $values;
}
static function buildPTCForm( &$form, $staffID ) {
$occupiedSlots = array( );
self::getPTCValuesOccupied( $staffID, $occupiedSlots );
// create a checkbox to cancel someone's slot
foreach ( $occupiedSlots as $id => $values ) {
$occupiedSlots[$id]['cb_name'] = "cancel_{$id}_{$values['target_id']}";
$form->addElement( 'checkbox', $occupiedSlots[$id]['cb_name'], ts( 'Cancel this Meeting?' ) );
}
$emptySlots = array( );
self::getPTCValuesEmpty( $staffID, $emptySlots );
$needToScheduleIDs = self::getPTCNeedToScheduleIDs( $staffID,
implode( ',', array_keys( $occupiedSlots ) ) );
$needToScheduleIDs[$staffID] = CRM_Core_DAO::getFieldValue( 'CRM_Contact_DAO_Contact',
$staffID,
'display_name' );
$needToScheduleIDs = array( '' => ' - select - ' ) + $needToScheduleIDs;
// create a checkbox to cancel someone's slot
foreach ( $emptySlots as $id => $values ) {
$emptySlots[$id]['cb_name'] = "delete_{$id}";
$form->addElement( 'checkbox', $emptySlots[$id]['cb_name'], ts( 'Delete this timeslot?' ) );
// also add a select box so they can slot a student (or themselves in there)
$emptySlots[$id]['select_name'] = "select_{$id}";
$form->add( 'select', $emptySlots[$id]['select_name'], null, $needToScheduleIDs );
}
$form->assign_by_ref( 'occupiedSlots', $occupiedSlots );
$form->assign_by_ref( 'emptySlots' , $emptySlots );
// also expose elements to allow the staff to create a conference
// we need a date time and duration
$form->addDate( "slot_date", ts( 'Date' ) );
$form->add( 'text', "slot_duration" , ts( 'Duration' ),
array( 'size'=> 4,'maxlength' => 8 ) );
$form->add( 'select', 'slot_contact_id', null, $needToScheduleIDs );
$form->addRule('slot_duration',
ts('Please enter the duration as number of minutes (integers only).'), 'positiveInteger');
}
static function validatePTCForm( &$form, &$fields ) {
$errors = array( );
$selectedIDs = array( );
foreach ( $fields as $name => $value ) {
$match = preg_match( '/^(select_|delete_|cancel_)(\d+)_?(\d+)?$/', $name, $matches );
if ( ! empty( $value ) &&
$match ) {
if ( $matches[1] == 'delete_' ) {
if ( array_key_exists( "select_{$matches[2]}", $fields ) &&
! empty( $fields["select_{$matches[2]}"] ) ) {
$errors[$name] = ts( 'You cannot schedule and delete a slot at the same time' );
}
}
if ( $matches[1] == 'select_' ) {
if ( array_key_exists( $value, $selectedIDs ) ) {
$errors[$name] = ts( 'You cannot schedule the same person multiple times' );
}
$selectedIDs[$value] = 1;
}
}
}
return empty( $errors ) ? true : $errors;
}
static function postProcessPTC( &$form, $advisorID ) {
$params = $form->controller->exportValues( $form->getVar( '_name' ) );
// collect all the ids
foreach ( $params as $name => $value ) {
$match = preg_match( '/^(select_|delete_|cancel_)(\d+)_?(\d+)?$/', $name, $matches );
if ( ! empty( $value ) &&
$match ) {
if ( $matches[1] == 'delete_' ) {
self::deletePTC( $advisorID, $matches[2] );
} else if ( $matches[1] == 'select_' ) {
self::selectPTC( $advisorID, $value, $matches[2] );
} else if ( $matches[1] == 'cancel_' ) {
self::cancelPTC( $advisorID, $matches[2], $matches[3] );
}
}
}
// check if date and duration are filled
if ( ! empty( $params['slot_date'] ) ) {
$duration = empty( $params['slot_duration'] ) ? 30 : $params['slot_duration'];
$date = CRM_Utils_Date::format( $params['slot_date'] );
$activityID = self::createConference( $advisorID, $advisorID,
self::CONFERENCE_ACTIVITY_TYPE_ID,
$date,
self::SUBJECT,
self::LOCATION,
self::STATUS,
$duration );
if ( ! empty( $params['slot_contact_id'] ) &&
$params['slot_contact_id'] > 0 ) {
self::selectPTC( $advisorID, $params['slot_contact_id'], $activityID );
}
}
}
static function deletePTC( $advisorID, $activityID ) {
$sql = "
DELETE a.*, aa.*
FROM civicrm_activity a
INNER JOIN civicrm_activity_assignment aa ON a.id = aa.activity_id
WHERE a.id = %1
AND aa.assignee_contact_id = %2
";
$params = array( 1 => array( $activityID, 'Integer' ),
2 => array( $advisorID , 'Integer' ) );
$dao = CRM_Core_DAO::executeQuery( $sql, $params );
}
static function cancelPTC( $advisorID, $childID, $targetID ) {
if ( empty( $advisorID ) ) {
return;
}
self::deleteAll( $childID );
}
static function selectPTC( $advisorID, $childID, $activityID ) {
if ( empty( $activityID ) || empty( $childID ) ) {
return;
}
// first we need to delete all the existing meetings for this childID
self::deleteAll( $childID );
// insert these two into civicrm_target
// we actually need to lock this and then ensure the space is available
// lets do that at a later stage
$sql = "
REPLACE INTO civicrm_activity_target (activity_id, target_contact_id)
VALUES
( %1, %2 )
";
$params = array( 1 => array( $activityID, 'Integer' ),
2 => array( $childID , 'Integer' ) );
CRM_Core_DAO::executeQuery( $sql, $params );
self::sendConferenceEmail( $activityID, $advisorID, $childID );
}
}