Files
crm.clientright.ru/modules/Workflow2/tasks/WfTaskEventCreator.php

180 lines
7.3 KiB
PHP
Raw Normal View History

<?php
/**
This File was developed by Stefan Warnat <vtiger@stefanwarnat.de>
It belongs to the Workflow Designer and must not be distributed without complete extension
* Last Change: 2012-12-06 1.6 swarnat
**/
require_once(realpath(dirname(__FILE__).'/../autoload_wf.php'));
require_once('WfTaskCustomCreator.php');
/* vt6 ready */
class WfTaskEventCreator extends WfTaskCustomCreator
{
protected $_fields = array("subject", "description", "eventstatus", "activitytype", "date_start", "due_date", "time_start", "time_end", "sendnotification", "assigned_user_id", 'visibility');
protected $_customModule = "Events";
protected $_activityType = 'Event';
protected $_hiddenValues = array("duration_hours" => "0");
public function init() {
parent::init();
$this->_javascriptFile[] = 'WfTaskEventcreator.js';
}
public function beforeGetTaskform($viewer) {
global $adb, $vtiger_current_version;
if(version_compare($vtiger_current_version, '5.3.0', '>=')) {
// I have to respect Users timezone
$setter = $this->get("setter");
if(!empty($setter) && is_array($setter)) {
foreach($setter as $key => $field) {
if(strpos($field["value"], "$") === false && strpos($field["value"], "?") === false && ($field["field"] == "time_start" || $field["field"] == "time_end")) {
$date = DateTimeField::convertToUserTimeZone(date("Y-m-d")." ".$field["value"]);
$setter[$key]["value"] = $date->format("H:i");
}
}
}
$this->set("setter", $setter);
}
parent::beforeGetTaskform($viewer);
}
public function beforeSave(&$values) {
global $adb, $vtiger_current_version;
if(version_compare($vtiger_current_version, '5.3.0', '>=')) {
foreach($values["setter"] as $key => $field) {
// I have to respect Users timezone
if(strpos($field["value"], "$") === false && strpos($field["value"], "?") === false && ($field["field"] == "time_start" || $field["field"] == "time_end")) {
$date = DateTimeField::convertToDBTimeZone(date("Y-m-d")." ".$field["value"]);
$values["setter"][$key]["value"] = date("H:i", $date->format('U'));
}
}
}
parent::beforeSave($values);
}
public function handleTask(&$context) {
$setter = $this->get("setter");
$this->set("new_module", $this->_customModule);
$reminderTime = null;
if($setter != -1 && is_array($setter)) {
foreach($setter as $field) {
if($field['field'] == 'reminder_time') {
$reminderTime = $field['value'];
break;
}
}
}
if(!empty($reminderTime)) {
$this->_hiddenValues['set_reminder'] = 'Yes';
$reminder = $reminderTime;
$minutes = (int)($reminder)%60;
$hours = (int)($reminder/(60))%24;
$days = (int)($reminder/(60*24));
//at vtiger there cant be 0 minutes reminder so we are setting to 1
if($minutes == 0){
$minutes = 1;
}
$this->_hiddenValues['remmin'] = $minutes;
$this->_hiddenValues['remhrs'] = $hours;
$this->_hiddenValues['remdays'] = $days;
}
parent::handleTask($context);
if(!empty($this->_newObj)) {
$startDate = $this->_newObj->get('date_start');
// Repeat Function - Copyright by VtigerCRM Developers from Internal Workflow Module
if($this->notEmpty('recurring') && !empty($startDate)) {
$repeatConfig = $this->get('repeat');
$objTemplate = new \Workflow\VTTemplate($context);
$repeatConfig = $objTemplate->render($repeatConfig);
if(!empty($repeatConfig['calendar_repeat_limit_date'])) {
$resultRow = array();
$resultRow['date_start'] = $startDate;
$resultRow['time_start'] = $this->_newObj->get('time_start');
$resultRow['due_date'] = $repeatConfig['calendar_repeat_limit_date'];
$resultRow['time_end'] = $this->_newObj->get('time_end');
$resultRow['recurringtype'] = $repeatConfig['recurring_type'];
$resultRow['recurringfreq'] = $repeatConfig['repeat_frequency'];
$daysOfWeekToRepeat = array();
if (!empty($repeatConfig['sun_flag'])) {
$daysOfWeekToRepeat[] = 0;
}
if (!empty($repeatConfig['mon_flag'])) {
$daysOfWeekToRepeat[] = 1;
}
if (!empty($repeatConfig['tue_flag'])) {
$daysOfWeekToRepeat[] = 2;
}
if (!empty($repeatConfig['wed_flag'])) {
$daysOfWeekToRepeat[] = 3;
}
if (!empty($repeatConfig['thu_flag'])) {
$daysOfWeekToRepeat[] = 4;
}
if (!empty($repeatConfig['fri_flag'])) {
$daysOfWeekToRepeat[] = 5;
}
if (!empty($repeatConfig['sat_flag'])) {
$daysOfWeekToRepeat[] = 6;
}
$recurringInfo = '';
if ($repeatConfig['recurring_type'] == 'Daily' || $repeatConfig['recurring_type'] == 'Yearly') {
$recurringInfo = $repeatConfig['recurring_type'];
} elseif ($repeatConfig['recurring_type'] == 'Weekly') {
if (!empty($daysOfWeekToRepeat)) {
$recurringInfo = $repeatConfig['recurring_type'] . '::' . implode('::', $daysOfWeekToRepeat);
} else {
$recurringInfo = $repeatConfig['recurring_type'];
}
} elseif ($repeatConfig['recurring_type'] == 'Monthly') {
$recurringInfo = $repeatConfig['recurring_type'] . '::' . $repeatConfig['repeatMonth'];
if ($repeatConfig['repeatMonth'] == 'date') {
$recurringInfo = $recurringInfo . '::' . $repeatConfig['repeatMonth_date'];
} else {
$recurringInfo = $recurringInfo . '::' . $repeatConfig['repeatMonth_daytype'] . '::' . $repeatConfig['repeatMonth_day'];
}
}
$resultRow['recurringinfo'] = $recurringInfo;
// Added this to relate these events to parent module.
/* $_REQUEST['createmode'] = 'link';
$_REQUEST['return_module'] = $this->_newObj->getModuleName();
$_REQUEST['return_id'] = $this->_newObj->getId();
*/
$recurObj = RecurringType::fromDBRequest($resultRow);
include_once 'modules/Calendar/RepeatEvents.php';
Calendar_RepeatEvents::repeat($this->_newObj->getInternalObject(), $recurObj);
}
}
}
return 'yes';
}
}