zimbra-api / soap-api

Zimbra SOAP client in PHP language

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Need documentation for the method "modifyAppointment"

idev2020 opened this issue · comments

Hi nguyennv,

Thank you for this api.

Can you give me an example to use the method "modifyAppointment" ?

Thank you.

Hi idev2020
You can use example in #11 by replacing createAppointment with modifyAppointment and then pass appointment id to modifyAppointment

$api->modifyAppointment($msg, $appointmentId);

Hi nguyennv,

Thanks a lot for your help 👍

Hello szn256,
When you call the method modifyAppointment (), appointmentId (2nd arg) is NOT the apptId :-$, it's the invId something like '1142-1141'
when the appointment is created, the response is something like

(
    [invId] => 1142-1141
    [calItemId] => 1142
    [rev] => 4995
    [ms] => 4995
    [apptId] => 1142
)

And you've to put the compNum on 5th arg
so here's my complete code

// $i is the appointment number, 1142 for ex.
$apt = $api->getAppointment(true, true, true, null, $i);
		$msgor = $apt->appt;

		if (!isset($info['folderId'])) $info['folderId'] = '10'; // folder par défaut pour les évènements
		
		$inv = new InvitationInfo();
		$comp = new InviteComponent();
		$comp->setName($info['name'])
			->setLocation($info['location'])
			->setFreeBusy(FreeBusyStatus::FREE())
			->setStatus(InviteStatus::CONFIRMED())
			->setCalClass(InviteClass::PUB())
			->setTransparency(Transparency::OPAQUE())
			->setIsAllDay(false)
			->setIsDraft(false)
			->addAttendee(new CalendarAttendee($info['calDestMail'], null, $info['calDestDisplayName'])) 
	//        ->addAttendee(new CalendarAttendee('nguyennv1981@yahoo.com', null, 'Van Nguyen'))
			->setOrganizer(new CalOrganizer(userAuth, null, userDisplayName)) // <= !! il ne peut être différent du user connecté
			->setDtStart(new DtTimeInfo($info['dtStart']))
			->setDtEnd(new DtTimeInfo($info['dtEnd']))
			// SPECIFIQUE A LA MODIF !!
			->setProperty('compNum',$apt->appt->inv->comp->compNum) // <= INDISPENSABLE
			->setProperty('uid',$apt->appt->inv->comp->uid)	
			->setProperty('calItemId',$apt->appt->inv->comp->calItemId)		
				;
		
	//	$trigger = new AlarmTriggerInfo();
	//    $trigger->setRelative(new DurationInfo(true, null, null, null, 5, null, 'START'));
	//    $alarm = new AlarmInfo(AlarmAction::DISPLAY(), $trigger);
	//        ->addAlarm($alarm);
		
		$inv->setInviteComponent($comp);
		$inv->setProperty("id", $apt->appt->inv->id);

		$msg = new Msg();
		$msg->setSubject($info['mailSubject'])
			->setFolderId($info['folderId'])
			// envoie un mail au gars sur qui on crée le rdv
			// Obligatoire si celui qui est connecté crée un évènement pour un autre; sinon non
	        //->addEmail(new EmailAddrInfo($info['calDestMail'], AddressType::TO(), $info['calDestDisplayName'])) 
	        //->addEmail(new EmailAddrInfo('nguyennv1981@yahoo.com', AddressType::TO(), 'Van Nguyen'))  
			->setInvite($inv)
			//->setOrigId($apt->appt->uid)
				;
		
		if (isset($info['mimePart'])) {
			$mp = new MimePartInfo(null, 'multipart/alternative');
			$mp->addMimePart(new MimePartInfo(null, 'text/plain', $info['mimePart']));
			$msg->setMimePart($mp);
		}
		return($api->modifyAppointment($msg, $i.'-'. $apt->appt->inv->id));

And it's the same thing for cancelAppointment method, the id to be indicated is like '1142-1141'