using.html 365 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  2. <!--
  3. iCalcreator, a PHP rfc2445/rfc5545 solution.
  4. This file is a part of iCalcreator.
  5. Copyright (c) 2007-2017 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
  6. Link http://kigkonsult.se/iCalcreator/index.php
  7. Package iCalcreator
  8. Version 2.24
  9. License Subject matter of licence is the software iCalcreator.
  10. The above copyright, link, package and version notices,
  11. this licence notice and the [rfc5545] PRODID as implemented and
  12. invoked in iCalcreator shall be included in all copies or
  13. substantial portions of the iCalcreator.
  14. iCalcreator can be used either under the terms of
  15. a proprietary license, available at <https://kigkonsult.se/>
  16. or the GNU Affero General Public License, version 3:
  17. iCalcreator is free software: you can redistribute it and/or
  18. modify it under the terms of the GNU Affero General Public License
  19. as published by the Free Software Foundation, either version 3 of
  20. the License, or (at your option) any later version.
  21. iCalcreator is distributed in the hope that it will be useful,
  22. but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  24. GNU Affero General Public License for more details.
  25. You should have received a copy of the GNU Affero General Public
  26. License along with this program.
  27. If not, see <http://www.gnu.org/licenses/>.
  28. -->
  29. <html>
  30. <head>
  31. <title>iCalcreator 2.24 manual</title>
  32. <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  33. <meta name="author" content="Kjell-Inge Gustafsson, kigkonsult, All rights reserved">
  34. <meta name="copyright" content="2007-2017 Kjell-Inge Gustafsson, kigkonsult">
  35. <meta name="keywords" content="ical, calendar, calender, xcal, xml, icalender, rfc2445, rfc5545, vcalender, php, create">
  36. <meta name="description" content="using iCalcreator v2.24">
  37. <style type="text/css">
  38. * {
  39. FONT-FAMILY : "Bitstream Vera Sans", Helvetica, "Lucida Grande","Lucida Sans Unicode", Lucida, Arial, Geneva, sans-serif;
  40. BACKGROUND-COLOR: white;
  41. COLOR : black;
  42. FONT-SIZE : small;
  43. }
  44. body {
  45. MARGIN-LEFT : 10px;
  46. WIDTH : 750px;
  47. }
  48. a.ref {
  49. BACKGROUND-COLOR: inherit;
  50. FONT-SIZE : 8pt;
  51. LETTER-SPACING : 0.1em;
  52. }
  53. h1 {
  54. BACKGROUND-COLOR: silver;
  55. BORDER : thin solid black;
  56. FONT-SIZE : x-large;
  57. FONT-WEIGHT : bold;
  58. DISPLAY : block;
  59. }
  60. h2 {
  61. FONT-SIZE : large;
  62. }
  63. h3 {
  64. FONT-SIZE : medium;
  65. }
  66. h4 {
  67. FONT-SIZE : small;
  68. FONT-WEIGHT : bold;
  69. }
  70. h5 {
  71. FONT-SIZE : small;
  72. FONT-WEIGHT : normal;
  73. TEXT-DECORATION : underline;
  74. }
  75. table {
  76. border-collapse : collapse;
  77. width : 100%;
  78. }
  79. .bb {
  80. BORDER-BOTTOM : gray dotted thin;
  81. }
  82. .blb {
  83. BORDER-LEFT : gray dotted thin;
  84. BORDER-BOTTOM : gray dotted thin;
  85. TEXT-ALIGN : center;
  86. }
  87. .bl {
  88. BORDER-LEFT : gray dotted thin;
  89. }
  90. .center {
  91. TEXT-ALIGN : center;
  92. }
  93. p.comment {
  94. FONT-FAMILY : monospace;
  95. FONT-SIZE : 9pt;
  96. FONT-WEIGHT : 500;
  97. WHITE-SPACE : pre-wrap; /* css-3 */
  98. WHITE-SPACE : -moz-pre-wrap; /* Mozilla, since 1999 */
  99. WHITE-SPACE : -pre-wrap; /* Opera 4-6 */
  100. WHITE-SPACE : -o-pre-wrap; /* Opera 7 */
  101. WORD-WRAP : break-word; /* Internet Explorer 5.5+ */
  102. }
  103. span.comment {
  104. BACKGROUND-COLOR: transparent;
  105. FONT-FAMILY : Areal;
  106. FONT-SIZE : 8pt;
  107. LETTER-SPACING : 0.2em;
  108. }
  109. p.example {
  110. BACKGROUND-COLOR: #DCDCDC;
  111. font-family : monospace;
  112. FONT-SIZE : 9pt;
  113. LETTER-SPACING : 0.1em;
  114. LINE-HEIGHT : 1.5em;
  115. WHITE-SPACE : pre-wrap; /* css-3 */
  116. WHITE-SPACE : -moz-pre-wrap; /* Mozilla, since 1999 */
  117. WHITE-SPACE : -pre-wrap; /* Opera 4-6 */
  118. WHITE-SPACE : -o-pre-wrap; /* Opera 7 */
  119. WORD-WRAP : break-word; /* Internet Explorer 5.5+ */
  120. }
  121. p.format, span.format {
  122. BORDER : gray dotted thin;
  123. FONT-FAMILY : Helvetica;
  124. FONT-SIZE : 9pt;
  125. LETTER-SPACING : 0.2em;
  126. LINE-HEIGHT : 2em;
  127. WHITE-SPACE : pre-wrap; /* css-3 */
  128. WHITE-SPACE : -moz-pre-wrap; /* Mozilla, since 1999 */
  129. WHITE-SPACE : -pre-wrap; /* Opera 4-6 */
  130. WHITE-SPACE : -o-pre-wrap; /* Opera 7 */
  131. WORD-WRAP : break-word; /* Internet Explorer 5.5+ */
  132. }
  133. .header {
  134. BACKGROUND-COLOR: silver;
  135. BORDER : thin solid black;
  136. FONT-SIZE : xx-large;
  137. }
  138. p.label {
  139. FONT-FAMILY : Arial;
  140. FONT-WEIGHT : bold;
  141. LETTER-SPACING : 0.1em;
  142. }
  143. p.quotes {
  144. BACKGROUND-COLOR: #F5F5F5;
  145. FONT-FAMILY : Arial;
  146. FONT-STYLE : italic;
  147. LETTER-SPACING : 0.1em;
  148. }
  149. sup {
  150. BACKGROUND-COLOR: transparent;
  151. FONT-SIZE : x-small;
  152. FONT-WEIGHT : bold;
  153. VERTICAL-ALIGN : super;
  154. }
  155. .ref {
  156. BACKGROUND-COLOR: transparent;
  157. FONT-SIZE : 8pt;
  158. LETTER-SPACING : 0.1em;
  159. }
  160. .top {
  161. VERTICAL-ALIGN : top;
  162. }
  163. </style>
  164. </head>
  165. <body>
  166. <a name="top"></a>
  167. <p class="header">iCalcreator v2.24</p>
  168. <p>
  169. iCalcreator v2.24<br>
  170. Copyright &copy; 2007-2017 Kjell-Inge Gustafsson, kigkonsult, All rights reserved.<br>
  171. <a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se iCalcreator</a><br>
  172. <a href="http://kigkonsult.se/contact/index.php" title="kigkonsult.se contact" target="_blank">kigkonsult.se contact</a>
  173. </p>
  174. <h2>Preface</h2>
  175. <p>
  176. This document describes usage of iCalcreator, a <em>PHP</em> software implementation of standards
  177. <a href="#Standards">rfc5545/rfc5546 (rfc2445/rfc2446)</a> to manage iCal formatted files.
  178. </p>
  179. <p>
  180. This document is provided by kigkonsult for informational purposes
  181. and is provided on an &quot;as is&quot; basis without any warranties expressed or implied.
  182. </p>
  183. <p>
  184. Information in this document is subject to change without notice and does
  185. not represent a commitment on the part of kigkonsult.
  186. The software described in this document is provided under a <a href="#Copyright_and_Licence">license agreement</a>.
  187. The software may be used only in accordance with the terms of that <a href="#Copyright_and_Licence">license agreement</a>.
  188. It is against the law to copy or use the software except as specifically allowed in the <a href="#Copyright_and_Licence">license agreement</a>.
  189. </p>
  190. <p>
  191. It is the users responsibility to ensure the suitability of the software before using it.
  192. In no circumstances will kigkonsult be responsible for
  193. the use of the software's outcomes or results or any loss
  194. or damage of data or programs as a result of using the software.
  195. </p>
  196. <p>
  197. The use of the software implies acceptance of these terms and the <a href="#Copyright_and_Licence">license</a>.
  198. </p>
  199. <p>
  200. This document makes previous versions obsolete.
  201. </p>
  202. <a href="#INDEX">[index]</a></a>
  203. <a name="INTRO"></a><h1>1 INTRO</h1>
  204. <p>
  205. iCalcreator is a <em>PHP</em> class package managing iCal files, supporting (non-)<strong>calendar</strong>
  206. systems and applications to process and communicate <strong>calendar</strong> information like
  207. events, agendas, tasks, reports, totos and journaling information.
  208. </p>
  209. <p>
  210. The iCal standards are <a href="#Standards">rfc5545/rfc5546 (rfc2445/rfc2446)</a>.</p>
  211. <p>
  212. iCalcreator features create, parse, edit and select <strong>calendar</strong> and <strong>calendar</strong> components.
  213. </p>
  214. <p>
  215. For iCalcreator 2.24 version (and later), <em>PHP</em> version &gt;= 5.4 is required.
  216. </p>
  217. <br>
  218. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  219. <a name="Standards"></a><h2>1.1 Standards</h2>
  220. <h4>iCal</h4>
  221. <p>
  222. A short iCal description is found at <a href="http://en.wikipedia.org/wiki/ICalendar#Core_object" title="iCalendar From Wikipedia, the free encyclopedia" target="_blank">Wikipedia</a>.
  223. If You are not familiar with iCal, read this first!
  224. </p>
  225. <p>
  226. The <strong>iCalendar</strong> format, <strong>iCal</strong>, are described in
  227. </p>
  228. <dl>
  229. <dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format" target="_blank">rfc5545</a>
  230. <dd>&quot;Internet Calendaring and Scheduling Core Object Specification (<strong>iCalendar</strong>)&quot;
  231. <dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
  232. <dd>&quot;iCalendar Transport-Independent Interoperability Protocol (iTIP)&quot;<br>Scheduling Events, BusyTime, To-dos and Journal Entries
  233. <p class="quotes">. ..allows for the capture and exchange of information normally stored
  234. within a calendaring and scheduling application.</p>
  235. and
  236. <p class="quotes">. ..is an exchange format between applications or systems.</p>
  237. </dl>
  238. <p><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format" target="_blank">rfc5545</a> and
  239. <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
  240. obsoletes, respectively,
  241. <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format" target="_blank">rfc2445</a> and
  242. <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format" target="_blank">rfc2446</a>.
  243. </p>
  244. <p>
  245. Any references to rfc2445, below, corresponds to rfc5545.
  246. </p>
  247. <h4>xCal</h4>
  248. <p>
  249. iCalcreator also supports xCal (iCal xml),
  250. <a href="http://kigkonsult.se/downloads/dl.php?f=rfc6321" title="Download RFC6321 in text format" target="_blank">rfc6321</a>,
  251. The XML Format for <strong>iCalendar</strong>.
  252. </p>
  253. <p>
  254. A short xCal description is found at <a href="http://en.wikipedia.org/wiki/XCal" title="xCal on Wikipedia, the free encyclopedia" target="_blank">Wikipedia</a>.
  255. </p>
  256. <br>
  257. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  258. <a name="This_manual"></a><h2>1.2 This manual</h2>
  259. <p>This style is used for text.</p>
  260. <p class="format">This style is used for formats.</p>
  261. <p class="example">
  262. This style is used for <em>PHP</em> coding examples.
  263. <span class="comment"> // this style is used for coding comments.</span>
  264. </p>
  265. <p class="comment">This style is used for content details.</p>
  266. <p class="quotes">This style is used for RFC2445/5545 quotes.</p>
  267. <br>
  268. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  269. <a name="Versioning"></a><h2>1.3 Versioning</h2>
  270. <p>The release numbering convention used is major.minor(.micro&nbsp;/&nbsp;suffix).</p>
  271. <dl>
  272. <dt>Major
  273. <dd>Indicates a very large change in the core package. Rewrites or major milestones.
  274. <dt>Minor
  275. <dd>Significant amount of feature addition/modification.<br>odd number - development/experimental release<br> even number - production release
  276. <dt>Micro
  277. <dd>Primarily bug fix and maintenance number.
  278. <dt>Suffix
  279. <dd>rc1 for first release candidate etc.
  280. </dl>
  281. <p>The release plan is based on yearly releases with exception of emergency releases.</p>
  282. <br>
  283. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  284. <a name="Support"></a><h2>1.4 Support</h2>
  285. <p>
  286. Previous iCalcreator releases are supported upon (paid) request only.
  287. </p>
  288. <p>
  289. Use
  290. <a href="http://kigkonsult.se/contact/index.php" title="kigkonsult.se/contact" target="_blank">kigkonsult.se/contact</a>
  291. or
  292. <a href="https://github.com/iCalcreator/iCalcreator/issues" title="github" target="_blank"> github.com/iCalcreator</a>
  293. for improvement/development issues or professional support and development.
  294. Please note that paid support or consulting service has the highest priority.
  295. </p>
  296. <p>
  297. kigkonsult offer professional services for software support, design and new/re-development, customizations and adaptations
  298. of <em>PHP</em>/<em>MySQL</em> solutions with focus on software lifecycle management, including long term utility, reliability and maintainability.
  299. </p>
  300. <br>
  301. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  302. <a name="Donate"></a><h2>1.5 Donate</h2>
  303. <p>
  304. You can show your appreciation for our free software,
  305. and can support future development by making a donation to the kigkonsult project iCalcreator.
  306. </p>
  307. <p>
  308. Make a donation of any size by clicking <a href="http://kigkonsult.se/contact/index.php#Donate" title="Donate" target="_blank">here</a>.
  309. Thanks in advance!
  310. </p>
  311. <br>
  312. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  313. <a name="INSTALL"></a><h2>1.6 Install</h2>
  314. <dl>
  315. <dt>Composer (https://getcomposer.org/)
  316. <dd>&nbsp;
  317. <dd>composer require kigkonsult/iCalcreator
  318. <dd>&nbsp;
  319. <dt>Or
  320. <dd> include the (download) iCalcreator folder to your include-path
  321. <dd>Add
  322. <dd><span class="format">require_once &quot;[path/]iCalcreator-2.24/autoload.php&quot;;</span>
  323. <dd>to your <em>PHP</em>-script.
  324. <dd>The iCalcreator invoker has changed since previous version!
  325. </dl>
  326. <p>
  327. iCalcreator is encapsulated in <em>PHP</em> namespace &quot;kigkonsult\iCalcreator\&quot;.
  328. </p>
  329. <p>
  330. You may need to set the default timezone.
  331. When creating a new iCalcreator object instance/component instance, review <a href="#iCalcreator_configuration_methods">config</a> settings.
  332. </p>
  333. <p>
  334. There are free iCal icons (use as buttons on a web page?) to download
  335. <a href="http://kigkonsult.se/downloads/i.php?i=all" title="iCal images" target="_blank">here</a>.
  336. </p>
  337. <br>
  338. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  339. <a name="Additional_Descriptors"></a><h2>1.7 Additional Descriptors</h2>
  340. <p>Some properties (ex. as described in
  341. <a href="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" title="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" target="_blank">wikipedia:iCal</a>)
  342. may be required when importing iCal files into some calendaring software (MS etc). Also <a href="#X-PROPERTY">X-properties</a> may appear in exports. Below are examples</p>
  343. <dl>
  344. <dt>on <strong>calendar</strong> level
  345. <dd><a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
  346. <dd><a href="#X-PROPERTY">X-WR-CALNAME</a> x-property
  347. <dd><a href="#X-PROPERTY">X-WR-CALDESC</a> x-property
  348. <dd><a href="#X-PROPERTY">X-WR-RELCALID</a> x-property <span class="comment">(Read more info about <a href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier" title="Universally Unique Identifier">UUID</a>.)</span>
  349. <dd><a href="#X-PROPERTY">X-WR-TIMEZONE</a> x-property
  350. <dt>on component level
  351. <dd><a href="#DTSTAMP">DTSTAMP</a> <sup>*</sup>
  352. <dd><a href="#UID">UID</a> <sup>*</sup>
  353. <dt>on component level in a <a href="#VTIMEZONE">vtimezone</a> component
  354. <dd><a href="#X-PROPERTY">X-LIC-LOCATION</a> x-property
  355. </dl>
  356. <sup>*</sup>
  357. Created automatically in iCalcreator, if not set.
  358. <p class="label">Example</p>
  359. <p>
  360. A strong recommendation is also to set config <a href="#Unique_id">unique_id</a> when creating a new vcalendar/component instance,
  361. to ensure accurate setting of all components <a href="#UID">UID</a> property, especially before <a href="#parse_merge">parse</a>.
  362. Also setting of config timezone (&quot;TZID&quot; and &quot;X-WR-TIMEZONE&quot; below) is to recommend.
  363. </p>
  364. <p class="example">
  365. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  366. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  367. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  368. $vcalendar-&gt;setProperty( kigkonsult\iCalcreator\util\util::$METHOD,
  369. &quot;PUBLISH&quot; );
  370. $vcalendar-&gt;setProperty( &quot;x-wr-calname&quot;,
  371. &quot;Calendar Sample&quot; );
  372. $vcalendar-&gt;setProperty( &quot;X-WR-CALDESC&quot;,
  373. &quot;Calendar Description&quot; );
  374. $vcalendar-&gt;setProperty( &quot;X-WR-RELCALID&quot;,
  375. &quot;3E26604A-50F4-4449-8B3E-E4F4932D05B5&quot;;
  376. $vcalendar-&gt;setProperty( &quot;X-WR-TIMEZONE&quot;,
  377. &quot;Europe/Stockholm&quot; );
  378. </p>
  379. <br>
  380. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  381. <a name="INDEX"></a><h2>1.9 INDEX</h2>
  382. <a href="#INTRO">1 INTRO</a><br>
  383. <br>
  384. <a href="#Standards">1.1 Standards</a><br>
  385. <a href="#This_manual">1.2 This manual</a><br>
  386. <a href="#Versioning">1.3 Versioning</a><br>
  387. <a href="#Support">1.4 Support</a><br>
  388. <a href="#Donate">1.5 Donate</a><br>
  389. <a href="#INSTALL">1.6 Install</a><br>
  390. <a href="#Additional_Descriptors">1.7 Additional_Descriptors</a><br>
  391. <a href="#INDEX">1.9 INDEX</a><br>
  392. <br>
  393. <a href="#Calendar_Component_list">2 Calendar Component list</a><br>
  394. <br>
  395. <a href="#VCALENDAR">2.1 VCALENDAR</a><br>
  396. <a href="#VEVENT">2.2 VEVENT</a><br>
  397. <a href="#VTODO">2.3 VTODO</a><br>
  398. <a href="#VJOURNAL">2.4 VJOURNAL</a><br>
  399. <a href="#VFREEBUSY">2.5 VFREEBUSY</a><br>
  400. <a href="#VALARM">2.6 VALARM</a><br>
  401. <a href="#VTIMEZONE">2.7 VTIMEZONE</a><br>
  402. <a href="#CalProps">2.8 Component Properties</a><br>
  403. <br>
  404. <a href="#Function_list">3 Function list</a><br>
  405. <br>
  406. <a href="#iCalcreator_object_methods">3.1 iCalcreator object methods</a><br>
  407. <br>
  408. <a href="#Calendar_object_constructors">3.1.1 Constructors</a><br>
  409. <a href="#vcalendar_constr">3.1.1.1 vcalendar</a><br>
  410. <a href="#vevent_constr">3.1.1.2 vevent</a><br>
  411. <a href="#vtodo_constr">3.1.1.3 vtodo</a><br>
  412. <a href="#vjournal_constr">3.1.1.4 vjournal</a><br>
  413. <a href="#vfreebusy_constr">3.1.1.5 vfreebusy</a><br>
  414. <a href="#valarm_constr">3.1.1.6 valarm</a><br>
  415. <a href="#vtimezone_constr">3.1.1.7 vtimezone</a><br>
  416. <a href="#standard_daylight_constr">3.1.1.8 standard / daylight</a><br>
  417. <br>
  418. <a href="#iCalcreator_object_property_methods">3.1.2 iCalcreator object property methods</a><br>
  419. <a href="#deleteProperty">3.1.2.1 deleteProperty</a><br>
  420. <a href="#getProperty">3.1.2.2 getProperty</a><br>
  421. <a href="#setProperty">3.1.2.3 setProperty</a><br>
  422. <a href="#CALSCALE">3.1.2.4 CALSCALE</a><br>
  423. <a href="#METHOD">3.1.2.5 METHOD</a><br>
  424. <a href="#VERSION">3.1.2.6 VERSION</a><br>
  425. <a href="#X-PROPERTY">3.1.2.7 X-PROPERTY</a><br>
  426. <br>
  427. <a href="#iCalcreator_component_object_methods">3.1.3 iCalcreator component object methods</a><br>
  428. <a href="#deleteComponent">3.1.3.1 deleteComponent</a><br>
  429. <a href="#getComponent">3.1.3.2 getComponent</a><br>
  430. <a href="#newComponent">3.1.3.3 newComponent</a><br>
  431. <a href="#replaceComponent">3.1.3.4 replaceComponent</a><br>
  432. <a href="#selectComponents">3.1.3.5 selectComponents</a><br>
  433. <a href="#setComponent">3.1.3.6 setComponent</a><br>
  434. <br>
  435. <a href="#iCalcreator_calendar_methods">3.1.4 iCalcreator calendar methods</a><br>
  436. <a href="#parse_merge">3.1.4.1 parse and merge</a><br>
  437. <a href="#createCalendar">3.1.4.2 createCalendar</a><br>
  438. <a href="#returnCalendar">3.1.4.3 returnCalendar</a><br>
  439. <a href="#saveCalendar">3.1.4.4 saveCalendar</a><br>
  440. <a href="#sort">3.1.4.5 sort</a><br>
  441. <a href="#useCachedCalendar">3.1.4.6 useCachedCalendar</a><br>
  442. <a href="#iCalcreatorVersion">3.1.4.7 iCalcreatorVersion</a><br>
  443. <br>
  444. <a href="#iCalcreator_configuration_methods">3.1.5 iCalcreator configuration methods</a><br>
  445. <a href="#configKeys">3.1.5.1 configuration keys</a><br>
  446. <a href="#getConfig">3.1.5.2 getConfig</a><br>
  447. <a href="#initConfig">3.1.5.3 calendar/component initialization</a><br>
  448. <a href="#setConfig">3.1.5.4 setConfig</a><br>
  449. <a href="#allowEmpty">3.1.5.5 Allow empty components</a><br>
  450. <a href="#Compsinfo">3.1.5.6 Component information</a><br>
  451. <a href="#Delimiter">3.1.5.7 Delimiter</a><br>
  452. <a href="#Directory">3.1.5.8 Directory</a><br>
  453. <a href="#Dirfile">3.1.5.9 Dirfile</a><br>
  454. <a href="#Fileinfo">3.1.5.10 Fileinfo</a><br>
  455. <a href="#Filename">3.1.5.11 Filename</a><br>
  456. <a href="#Filesize">3.1.5.12 Filesize</a><br>
  457. <a href="#Language">3.1.5.13 Language</a><br>
  458. <a href="#setPropertyNames">3.1.5.14 setPropertyNames</a><br>
  459. <a href="#dTZID">3.1.5.15 TZID</a><br>
  460. <a href="#Unique_id">3.1.5.16 Unique_id</a><br>
  461. <a href="#configURL">3.1.5.17 URL</a><br>
  462. <br>
  463. <a href="#Calendar_component_object_property_function_list">3.2 Calendar component property method list</a><br>
  464. <a href="#deleteProperty_PROP">3.2.1 deleteProperty</a><br>
  465. <a href="#getProperty_PROP">3.2.2 getProperty</a><br>
  466. <a href="#parse">3.2.3 parse</a><br>
  467. <a href="#setProperty_PROP">3.2.4 setProperty</a>
  468. <dl>
  469. <dt>Ascending property order
  470. <dd><a href="#ACTION">3.2.5 ACTION</a>
  471. <dd><a href="#ATTACH">3.2.6 ATTACH</a>
  472. <dd><a href="#ATTENDEE">3.2.7 ATTENDEE</a>
  473. <dd><a href="#CATEGORIES">3.2.8 CATEGORIES</a>
  474. <dd><a href="#CLASS">3.2.9 CLASS</a>
  475. <dd><a href="#COMMENT">3.2.10 COMMENT</a>
  476. <dd><a href="#COMPLETED">3.2.11 COMPLETED</a>
  477. <dd><a href="#CONTACT">3.2.12 CONTACT</a>
  478. <dd><a href="#CREATED">3.2.13 CREATED</a>
  479. <dd><a href="#DESCRIPTION">3.2.14 DESCRIPTION</a>
  480. <dd><a href="#DTEND">3.2.15 DTEND</a>
  481. <dd><a href="#DTSTAMP">3.2.16 DTSTAMP</a>
  482. <dd><a href="#DTSTART">3.2.17 DTSTART</a>
  483. <dd><a href="#DUE">3.2.18 DUE</a>
  484. <dd><a href="#DURATION">3.2.19 DURATION</a>
  485. <dd><a href="#EXDATE">3.2.20 EXDATE</a>
  486. <dd><a href="#EXRULE">3.2.21 EXRULE</a>
  487. <dd><a href="#FREEBUSY_PROP">3.2.22 FREEBUSY</a>
  488. <dd><a href="#GEO">3.2.23 GEO</a>
  489. <dd><a href="#LAST-MODIFIED">3.2.24 LAST-MODIFIED</a>
  490. <dd><a href="#LOCATION">3.2.25 LOCATION</a>
  491. <dd><a href="#ORGANIZER">3.2.26 ORGANIZER</a>
  492. <dd><a href="#PERCENT-COMPLETE">3.2.27 PERCENT-COMPLETE</a>
  493. <dd><a href="#PRIORITY">3.2.28 PRIORITY</a>
  494. <dd><a href="#RDATE">3.2.29 RDATE</a>
  495. <dd><a href="#RECURRENCE-ID">3.2.30 RECURRENCE-ID</a>
  496. <dd><a href="#RELATED-TO">3.2.31 RELATED-TO</a>
  497. <dd><a href="#REPEAT">3.2.32 REPEAT</a>
  498. <dd><a href="#REQUEST-STATUS">3.2.33 REQUEST-STATUS</a>
  499. <dd><a href="#RESOURCES">3.2.34 RESOURCES</a>
  500. <dd><a href="#RRULE">3.2.35 RRULE</a>
  501. <dd><a href="#SEQUENCE">3.2.36 SEQUENCE</a>
  502. <dd><a href="#STATUS">3.2.37 STATUS</a>
  503. <dd><a href="#SUMMARY">3.2.38 SUMMARY</a>
  504. <dd><a href="#TRANSP">3.2.39 TRANSP</a>
  505. <dd><a href="#TRIGGER">3.2.40 TRIGGER</a>
  506. <dd><a href="#TZID">3.2.41 TZID</a>
  507. <dd><a href="#TZNAME">3.2.42 TZNAME</a>
  508. <dd><a href="#TZOFFSETFROM">3.2.43 TZOFFSETFROM</a>
  509. <dd><a href="#TZOFFSETTO">3.2.44 TZOFFSETTO</a>
  510. <dd><a href="#TZURL">3.2.45 TZURL</a>
  511. <dd><a href="#UID">3.2.46 UID</a>
  512. <dd><a href="#URL">3.2.47 URL</a>
  513. <dd><a href="#X-PROPERTY_PROP">3.2.48 X-PROPERTY</a>
  514. <dt>Descriptive Component Properties
  515. <dd><a href="#ATTACH">3.2.6 ATTACH</a>
  516. <dd><a href="#CATEGORIES">3.2.8 CATEGORIES</a>
  517. <dd><a href="#COMMENT">3.2.10 COMMENT</a>
  518. <dd><a href="#DESCRIPTION">3.2.14 DESCRIPTION</a>
  519. <dd><a href="#GEO">3.2.23 GEO</a>
  520. <dd><a href="#LOCATION">3.2.25 LOCATION</a>
  521. <dd><a href="#PERCENT-COMPLETE">3.2.27 PERCENT-COMPLETE</a>
  522. <dd><a href="#PRIORITY">3.2.28 PRIORITY</a>
  523. <dd><a href="#RESOURCES">3.2.34 RESOURCES</a>
  524. <dd><a href="#STATUS">3.2.37 STATUS</a>
  525. <dd><a href="#SUMMARY">3.2.38 SUMMARY</a>
  526. <dt>Date and Time Component Properties
  527. <dd><a href="#COMPLETED">3.2.11 COMPLETED</a>
  528. <dd><a href="#DTEND">3.2.15 DTEND</a>
  529. <dd><a href="#DUE">3.2.18 DUE</a>
  530. <dd><a href="#DTSTART">3.2.17 DTSTART</a>
  531. <dd><a href="#DURATION">3.2.19 DURATION</a>
  532. <dd><a href="#FREEBUSY_PROP">3.2.22 FREEBUSY</a>
  533. <dd><a href="#TRANSP">3.2.39 TRANSP</a>
  534. <dt>Time Zone Component Properties
  535. <dd><a href="#TZID">3.2.41 TZID</a>
  536. <dd><a href="#TZNAME">3.2.42 TZNAME</a>
  537. <dd><a href="#TZOFFSETFROM">3.2.43 TZOFFSETFROM</a>
  538. <dd><a href="#TZOFFSETTO">3.2.44 TZOFFSETTO</a>
  539. <dd><a href="#TZURL">3.2.45 TZURL</a>
  540. <dt>Relationship Component Properties
  541. <dd><a href="#ATTENDEE">3.2.7 ATTENDEE</a>
  542. <dd><a href="#CONTACT">3.2.12 CONTACT</a>
  543. <dd><a href="#ORGANIZER">3.2.26 ORGANIZER</a>
  544. <dd><a href="#RECURRENCE-ID">3.2.30 RECURRENCE-ID</a>
  545. <dd><a href="#RELATED-TO">3.2.31 RELATED-TO</a>
  546. <dd><a href="#URL">3.2.47 URL</a>
  547. <dd><a href="#UID">3.2.46 UID</a>
  548. <dt>Recurrence Component Properties
  549. <dd><a href="#EXDATE">3.2.20 EXDATE</a>
  550. <dd><a href="#RDATE">3.2.29 RDATE</a>
  551. <dd><a href="#RRULE">3.2.35 RRULE</a>
  552. <dt>Alarm Component Properties
  553. <dd><a href="#ACTION">3.2.5 ACTION</a>
  554. <dd><a href="#REPEAT">3.2.32 REPEAT</a>
  555. <dd><a href="#TRIGGER">3.2.40 TRIGGER</a>
  556. <dt>Change Management Component Properties
  557. <dd><a href="#CREATED">3.2.13 CREATED</a>
  558. <dd><a href="#DTSTAMP">3.2.16 DTSTAMP</a>
  559. <dd><a href="#LAST-MODIFIED">3.2.24 LAST-MODIFIED</a>
  560. <dd><a href="#SEQUENCE">3.2.36 SEQUENCE</a>
  561. <dt>Miscellaneous Component Properties
  562. <dd><a href="#X-PROPERTY_PROP">3.2.48 X-PROPERTY</a>
  563. <dd><a href="#REQUEST-STATUS">3.2.33 REQUEST-STATUS</a>
  564. </dl>
  565. <a href="#iCalcreator_component_configuration_methods">3.3 iCalcreator Component configuration methods</a><br>
  566. <a href="#Language_PROP">3.3.1 Language</a><br>
  567. <br>
  568. <a href="#iCalcreator_component_object_misc_methods">3.4 iCalcreator component object misc. methods</a><br>
  569. <a href="#deleteComponent_PROP">3.4.1 deleteComponent</a><br>
  570. <a href="#getComponent_PROP">3.4.2 getComponent</a><br>
  571. <a href="#newComponent_PROP">3.4.3 newComponent</a><br>
  572. <a href="#setComponent_PROP">3.4.4 setComponent</a><br>
  573. <br>
  574. <a href="#TimezoneXMLjsonvCard">4 Timezone, XML, json and vCard support</a><br>
  575. <a href="#timezoneHandler">4.1 iCalcreator and timezoneHandler class</a><br>
  576. <a href="#createTimezone">4.1.1 createTimezone</h4></a><br>
  577. <a href="#ms2phpTZ">4.1.2 ms2phpTZ</a><br>
  578. <a href="#transformDateTime">4.1.3 transformDateTime</a><br>
  579. <a href="#TZhelpers">4.2 Timezone helper functions</a><br>
  580. <a href="#getTzOffsetForDate">4.2.1 getTzOffsetForDate</a><br>
  581. <a href="#getTimezonesAsDateArrays">4.2.2 getTimezonesAsDateArrays</a><br>
  582. <a href="#XMLhelpers">4.3 iCalcreator and iCalXML class</a><br>
  583. <a href="#iCal2XML">4.3.1 iCal2XML</a><br>
  584. <a href="#XML2iCal">4.3.2 XML2iCal</a><br>
  585. <a href="#iCal2jSon">4.4 iCalcreator and json export</a><br>
  586. <a href="#vCardhelpers">4.5 iCalcreator and iCalvCard class</a><br>
  587. <a href="#iCal2vCard">4.5.1 iCal2vCard</a><br>
  588. <a href="#iCal2vCards">4.5.2 iCal2vCards</a><br>
  589. <br>
  590. <a href="#Copyright_and_Licence">5 COPYRIGHT AND LICENSE</a><br>
  591. <br>
  592. <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
  593. <a name="Calendar_Component_list"></a><h1>2 Calendar Component list</h1>
  594. <p>
  595. To ease up usage, You will find convenient holders for component names,
  596. properties, config keys etc in top of the &quot;util&quot; class file (src/util/util.php),
  597. used in code snippets.
  598. </p>
  599. <p>
  600. Quote from <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a>
  601. - Internet Calendaring and Scheduling Core Object Specification (<strong>iCalendar</strong>)!
  602. </p>
  603. <a name="VCALENDAR"></a><h2>2.1 VCALENDAR</h2>
  604. <p class="center">icalobject = 1*(&quot;BEGIN&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF</p>
  605. <p class="center">icalbody</p>
  606. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF)</p>
  607. <p>icalbody = calprops component</p>
  608. <p>calprops = 2*(</p>
  609. <p class="center">&quot;prodid&quot; and &quot;version&quot; are both REQUIRED, but MUST NOT occur more than once
  610. <p class="center">prodid / <a href="#VERSION">version</a> /</p>
  611. <p class="center">&quot;calscale&quot;and &quot;method&quot;are optional, but MUST NOT occur more than once</p>
  612. <p class="center"><a href="#CALSCALE">calscale</a> / <a href="#METHOD">method</a> /</p>
  613. <p class="center"><a href="#X-PROPERTY">x-prop</a></p>
  614. <p>)</p>
  615. <p class="center">component = 1*(<a href="#VEVENT">eventc</a> / <a href="#VTODO">todoc</a> / <a href="#VJOURNAL">journalc</a> / <a href="#VFREEBUSY">freebusyc</a> / <a href="#VTIMEZONE">timezonec</a> / iana-comp* / x-comp*)</p>
  616. <p class="center">iana-comp = &quot;BEGIN&quot; &quot;:&quot; iana-token CRLF</p>
  617. <p class="center">1*contentline</p>
  618. <p class="center">&quot;END&quot; &quot;:&quot; iana-token CRLF</p>
  619. <p class="center">x-comp = &quot;BEGIN&quot; &quot;:&quot; x-name CRLF</p>
  620. <p class="center">1*contentline</p>
  621. <p class="center">&quot;END&quot; &quot;:&quot; x-name CRLF</p>
  622. <p>*) <span class="comment">not supported by iCalcreator</span></p>
  623. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  624. <a name="VEVENT"></a><h2>2.2 VEVENT</h2>
  625. <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
  626. <p class="center">eventprop *alarmc</p>
  627. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
  628. <p>eventprop = *(</p>
  629. <p class="center">the following are optional,but MUST NOT occur more than once</p>
  630. <p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> /</p>
  631. <p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PRIORITY">priority</a> / </p>
  632. <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> / </p>
  633. <p class="center"><a href="#TRANSP">transp</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / <a href="#RECURRENCE-ID">recurid</a> /</p>
  634. <p class="center">either &quot;<a href="#DTEND">dtend</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;eventprop&quot;, </p>
  635. <p class="center">but &quot;<a href="#DTEND">dtend</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;eventprop&quot;</p>
  636. <p class="center"><a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> /</p>
  637. <p class="center">the following are optional, and MAY occur more than once</p>
  638. <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
  639. <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
  640. <p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
  641. <p>)</p>
  642. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  643. <a name="VTODO"></a><h2>2.3 VTODO</h2>
  644. <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
  645. <p class="center">todoprop *alarmc</p>
  646. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
  647. <p>todoprop = *(</p>
  648. <p class="center">the following are optional, but MUST NOT occur more than once</p>
  649. <p class="center"><a href="#CLASS">class</a> / <a href="#COMPLETED">completed</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTAMP">dtstamp</a> / <a href="#DTSTART">dtstart</a> / </p>
  650. <p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PERCENT-COMPLETE">percent</a> / <a href="#PRIORITY">priority</a> / </p>
  651. <p class="center"><a href="#RECURRENCE-ID">recurid</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
  652. <p class="center">either &quot;<a href="#DUE">due</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;todoprop&quot;,</p>
  653. <p class="center"> but &quot;<a href="#DUE">due</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;todoprop&quot;</p>
  654. <p class="center"><a href="#DUE">due</a> / <a href="#DURATION">duration</a> /</p>
  655. <p class="center">the following are optional,and MAY occur more than once</p>
  656. <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
  657. <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
  658. <p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
  659. <p>)</p>
  660. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  661. <a name="VJOURNAL"></a><h2>2.4 VJOURNAL</h2>
  662. <p class="center">journalc = &quot;BEGIN&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
  663. <p class="center">jourprop</p>
  664. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
  665. <p>jourprop = *(</p>
  666. <p class="center">the following are optional, but MUST NOT occur more than once</p>
  667. <p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> / </p>
  668. <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#ORGANIZER">organizer</a> / <a href="#RECURRENCE-ID">recurid</a> / </p>
  669. <p class="center"><a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
  670. <p class="center">the following are optional,and MAY occur more than once</p>
  671. <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> /</p>
  672. <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#RELATED-TO">related</a> / </p>
  673. <p class="center"><a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
  674. <p>)</p>
  675. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  676. <a name="VFREEBUSY"></a><h2>2.5 VFREEBUSY</h2>
  677. <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
  678. <p class="center">fbprop</p>
  679. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
  680. <p>fbprop = *(</p>
  681. <p class="center">the following are optional, but MUST NOT occur more than once</p>
  682. <p class="center"><a href="#CONTACT">contact</a> / <a href="#DTSTART">dtstart</a> / <a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> / </p>
  683. <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#ORGANIZER">organizer</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / </p>
  684. <p class="center">the following are optional,and MAY occur more than once</p>
  685. <p class="center"><a href="#ATTENDEE">attendee</a> / <a href="#COMMENT">comment</a> / <a href="#FREEBUSY_PROP">freebusy</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
  686. <p>)</p>
  687. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  688. <a name="VALARM"></a><h2>2.6 VALARM</h2>
  689. <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p>
  690. <p class="center">(audioprop / dispprop / emailprop / procprop)</p>
  691. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p>
  692. <p>audioprop = 2*(</p>
  693. <p class="center">&quot;<a href="#ACTION">action</a>&quot; and &quot;<a href="#TRIGGER">trigger</a>&quot; are both REQUIRED, but MUST NOT occur more than once</p>
  694. <p class="center"><a href="#ACTION">action</a> / <a href="#TRIGGER">trigger</a> /</p>
  695. <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
  696. <p class="center">but if one occurs, so MUST the other</p>
  697. <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
  698. <p class="center">the following is optional, but MUST NOT occur more than once</p>
  699. <p class="center"><a href="#ATTACH">attach</a> / </p>
  700. <p class="center">the following is optional, and MAY occur more than once</p>
  701. <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
  702. <p>)</p>
  703. <p>dispprop = 3*(</p>
  704. <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
  705. <p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> /</p>
  706. <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
  707. <p class="center">but if one occurs, so MUST the other</p>
  708. <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
  709. <p class="center">the following is optional, and MAY occur more than once</p>
  710. <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
  711. <p>)</p>
  712. <p>emailprop = 5*(</p>
  713. <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
  714. <p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> / <a href="#SUMMARY">summary</a></p>
  715. <p class="center">the following is REQUIRED, and MAY occur more than once</p>
  716. <p class="center"><a href="#ATTENDEE">attendee</a> / </p>
  717. <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
  718. <p class="center">but if one occurs, so MUST the other</p>
  719. <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
  720. <p class="center">the following are optional, and MAY occur more than once</p>
  721. <p class="center"><a href="#ATTACH">attach</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
  722. <p>)</p>
  723. <p>procprop = 3*(</p>
  724. <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
  725. <p class="center"><a href="#ACTION">action</a> / <a href="#ATTACH">attach</a> / <a href="#TRIGGER">trigger</a> /</p>
  726. <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
  727. <p class="center">but if one occurs, so MUST the other</p>
  728. <p class="center"><a href="#DURATION">duration</a> /
  729. <a href="#REPEAT">repeat</a> /</p>
  730. <p class="center">&quot;<a href="#DESCRIPTION">description</a>&quot; is optional, and MUST NOT occur more than once</p>
  731. <p class="center"><a href="#DESCRIPTION">description</a> / </p>
  732. <p class="center">the following is optional, and MAY occur more than once</p>
  733. <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
  734. <p>)</p>
  735. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  736. <a name="VTIMEZONE"></a><h2>2.7 VTIMEZONE</h2>
  737. <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
  738. <p>2*(</p>
  739. <p class="center">&quot;<a href="#TZID">tzid</a>&quot; is required, but MUST NOT occur more than once</p>
  740. <p class="center"><a href="#TZID">tzid</a> / </p>
  741. <p class="center">&quot;<a href="#LAST-MODIFIED">last-mod</a>&quot; and &quot;<a href="#TZURL">tzurl</a>&quot; are optional, but MUST NOT occur more than once</p>
  742. <p class="center"><a href="#LAST-MODIFIED">last-mod</a> / <a href="#TZURL">tzurl</a> /</p>
  743. <p class="center">one of &quot;standardc&quot; or &quot;daylightc&quot; MUST occur and each MAY occur more than once.</p>
  744. <p class="center">standardc / daylightc /</p>
  745. <p class="center">the following is optional, and MAY occur more than once</p>
  746. <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
  747. <p>)</p>
  748. <p class="center">&quot;END&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
  749. <p class="center">standardc = &quot;BEGIN&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
  750. <p class="center">tzprop</p>
  751. <p class="center">&quot;END&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
  752. <p class="center">daylightc = &quot;BEGIN&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
  753. <p class="center">tzprop</p>
  754. <p class="center">&quot;END&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
  755. <p>tzprop = 3*(</p>
  756. <p class="center">the following are each REQUIRED, but MUST NOT occur more than once</p>
  757. <p class="center"><a href="#DTSTART">dtstart</a> / <a href="#TZOFFSETTO">tzoffsetto</a> / <a href="#TZOFFSETFROM">tzoffsetfrom</a> /</p>
  758. <p class="center">the following are optional, and MAY occur more than once</p>
  759. <p class="center"><a href="#COMMENT">comment</a> /<a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#TZNAME">tzname</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
  760. <p>)</p>
  761. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  762. <a name="CalProps"></a><h2>2.8 Component Properties</h2>
  763. <p>
  764. A comprehensive table showing relation between <strong>calendar</strong> components and properties.
  765. <a href="#VTIMEZONE">vtimezone</a> properties are not included.
  766. </p>
  767. <table>
  768. <tr>
  769. <td>0-1</td>
  770. <td colspan="8">OPTIONAL property, MUST NOT occur more than once.</td>
  771. </tr>
  772. <tr>
  773. <td>0-m</td>
  774. <td colspan="8">OPTIONAL property, MAY occur more than once.</td>
  775. </tr>
  776. <tr>
  777. <td>0&nbsp;/&nbsp;1=1</td>
  778. <td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br>If one occurs, so MUST the other</td>
  779. </tr>
  780. <tr>
  781. <td>0*1</td>
  782. <td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br>If one occurs, so MUST NOT the other</td>
  783. </tr>
  784. <tr>
  785. <td>1-m</td>
  786. <td colspan="8">REQUIRED property, MAY occur more than once.</td>
  787. </tr>
  788. <tr>
  789. <td>1</td>
  790. <td colspan="8">REQUIRED property, MUST NOT occur more than once.</td>
  791. </tr>
  792. <tr>
  793. <td colspan="9">&nbsp;</td>
  794. </tr>
  795. <tr>
  796. <td>&nbsp;</td>
  797. <td class="bl bb center top" rowspan="2"><a class="ref" href="#VEVENT">v<br>e<br>v<br>e<br>n<br>t</a></td>
  798. <td class="bl bb center top" rowspan="2"><a class="ref" href="#VTODO">v<br>t<br>o<br>d<br>o</a></td>
  799. <td class="bl bb center top" rowspan="2"><a class="ref" href="#VJOURNAL">v<br>j<br>o<br>u<br>r<br>n<br>a<br>l</a></td>
  800. <td class="bl bb center top" rowspan="2"><a class="ref" href="#VFREEBUSY">v<br>f<br>r<br>e<br>e<br>b<br>u<br>s<br>y</a></td>
  801. <td class="bl top center" colspan="4"><a class="ref" href="#VALARM">v&nbsp;a&nbsp;l&nbsp;a&nbsp;r&nbsp;m</a></td>
  802. </tr>
  803. <tr>
  804. <td class="bb">&nbsp;</td>
  805. <td class="bl bb center ref"><br><br><br><br>a<br>u<br>d<br>i<br>o</td>
  806. <td class="bl bb center ref"><br><br>d<br>i<br>s<br>p<br>l<br>a<br>y</td>
  807. <td class="bl bb center ref"><br><br><br><br>e<br>m<br>a<br>i<br>l</td>
  808. <td class="bl bb center ref">p<br>r<br>o<br>c<br>e<br>d<br>u<br>r<br>e</td>
  809. </tr>
  810. <tr>
  811. <td class="bb"><a class="ref" href="#ACTION">action</a></td>
  812. <td class="blb">&nbsp;</td>
  813. <td class="blb">&nbsp;</td>
  814. <td class="blb">&nbsp;</td>
  815. <td class="blb">&nbsp;</td>
  816. <td class="blb">1</td>
  817. <td class="blb">1</td>
  818. <td class="blb">1</td>
  819. <td class="blb">1</td>
  820. </tr>
  821. <tr>
  822. <td class="bb"><a class="ref" href="#ATTACH">attach</a></td>
  823. <td class="blb">0-m</td>
  824. <td class="blb">0-m</td>
  825. <td class="blb">0-m</td>
  826. <td class="blb">&nbsp;</td>
  827. <td class="blb">0-1</td>
  828. <td class="blb">&nbsp;</td>
  829. <td class="blb">0-m</td>
  830. <td class="blb">1</td>
  831. </tr>
  832. <tr>
  833. <td class="bb"><a class="ref" href="#ATTENDEE">attendee</a></td>
  834. <td class="blb">0-m</td>
  835. <td class="blb">0-m</td>
  836. <td class="blb">0-m</td>
  837. <td class="blb">0-m</td>
  838. <td class="blb">&nbsp;</td>
  839. <td class="blb">&nbsp;</td>
  840. <td class="blb">1-m</td>
  841. <td class="blb">&nbsp;</td>
  842. </tr>
  843. <tr>
  844. <td class="bb"><a class="ref" href="#CATEGORIES">categories</a></td>
  845. <td class="blb">0-m</td>
  846. <td class="blb">0-m</td>
  847. <td class="blb">0-m</td>
  848. <td class="blb">&nbsp;</td>
  849. <td class="blb">&nbsp;</td>
  850. <td class="blb">&nbsp;</td>
  851. <td class="blb">&nbsp;</td>
  852. <td class="blb">&nbsp;</td>
  853. </tr>
  854. <tr>
  855. <td class="bb"><a class="ref" href="#CLASS">class</a></td>
  856. <td class="blb">0-1</td>
  857. <td class="blb">0-1</td>
  858. <td class="blb">0-1</td>
  859. <td class="blb">&nbsp;</td>
  860. <td class="blb">&nbsp;</td>
  861. <td class="blb">&nbsp;</td>
  862. <td class="blb">&nbsp;</td>
  863. <td class="blb">&nbsp;</td>
  864. </tr>
  865. <tr>
  866. <td class="bb"><a class="ref" href="#COMMENT">comment</a></td>
  867. <td class="blb">0-m</td>
  868. <td class="blb">0-m</td>
  869. <td class="blb">0-m</td>
  870. <td class="blb">0-m</td>
  871. <td class="blb">&nbsp;</td>
  872. <td class="blb">&nbsp;</td>
  873. <td class="blb">&nbsp;</td>
  874. <td class="blb">&nbsp;</td>
  875. </tr>
  876. <tr>
  877. <td class="bb"><a class="ref" href="#COMPLETED">completed</a></td>
  878. <td class="blb">&nbsp;</td>
  879. <td class="blb">0-1</td>
  880. <td class="blb">&nbsp;</td>
  881. <td class="blb">&nbsp;</td>
  882. <td class="blb">&nbsp;</td>
  883. <td class="blb">&nbsp;</td>
  884. <td class="blb">&nbsp;</td>
  885. <td class="blb">&nbsp;</td>
  886. </tr>
  887. <tr>
  888. <td class="bb"><a class="ref" href="#CONTACT">contact</a></td>
  889. <td class="blb">0-m</td>
  890. <td class="blb">0-m</td>
  891. <td class="blb">0-m</td>
  892. <td class="blb">0-1</td>
  893. <td class="blb">&nbsp;</td>
  894. <td class="blb">&nbsp;</td>
  895. <td class="blb">&nbsp;</td>
  896. <td class="blb">&nbsp;</td>
  897. </tr>
  898. <tr>
  899. <td class="bb"><a class="ref" href="#CREATED">created</a></td>
  900. <td class="blb">0-1</td>
  901. <td class="blb">0-1</td>
  902. <td class="blb">0-1</td>
  903. <td class="blb">&nbsp;</td>
  904. <td class="blb">&nbsp;</td>
  905. <td class="blb">&nbsp;</td>
  906. <td class="blb">&nbsp;</td>
  907. <td class="blb">&nbsp;</td>
  908. </tr>
  909. <tr>
  910. <td class="bb"><a class="ref" href="#DESCRIPTION">description</a></td>
  911. <td class="blb">0-1</td>
  912. <td class="blb">0-1</td>
  913. <td class="blb">0-m</td>
  914. <td class="blb">&nbsp;</td>
  915. <td class="blb">&nbsp;</td>
  916. <td class="blb">1</td>
  917. <td class="blb">1</td>
  918. <td class="blb">0-1</td>
  919. </tr>
  920. <tr>
  921. <td class="bb"><a class="ref" href="#DTEND">dtend</a></td>
  922. <td class="blb">0*1</td>
  923. <td class="blb">&nbsp;</td>
  924. <td class="blb">&nbsp;</td>
  925. <td class="blb">0-1</td>
  926. <td class="blb">&nbsp;</td>
  927. <td class="blb">&nbsp;</td>
  928. <td class="blb">&nbsp;</td>
  929. <td class="blb">&nbsp;</td>
  930. </tr>
  931. <tr>
  932. <td class="bb"><a class="ref" href="#DTSTAMP">dtstamp</a></td>
  933. <td class="blb">0-1</td>
  934. <td class="blb">0-1</td>
  935. <td class="blb">0-1</td>
  936. <td class="blb">0-1</td>
  937. <td class="blb">&nbsp;</td>
  938. <td class="blb">&nbsp;</td>
  939. <td class="blb">&nbsp;</td>
  940. <td class="blb">&nbsp;</td>
  941. </tr>
  942. <tr>
  943. <td class="bb"><a class="ref" href="#DTSTART">dtstart</a></td>
  944. <td class="blb">0-1</td>
  945. <td class="blb">0-1</td>
  946. <td class="blb">0-1</td>
  947. <td class="blb">0-1</td>
  948. <td class="blb">&nbsp;</td>
  949. <td class="blb">&nbsp;</td>
  950. <td class="blb">&nbsp;</td>
  951. <td class="blb">&nbsp;</td>
  952. </tr>
  953. <tr>
  954. <td class="bb"><a class="ref" href="#DUE">due</a></td>
  955. <td class="blb">&nbsp;</td>
  956. <td class="blb">0*1</td>
  957. <td class="blb">&nbsp;</td>
  958. <td class="blb">&nbsp;</td>
  959. <td class="blb">&nbsp;</td>
  960. <td class="blb">&nbsp;</td>
  961. <td class="blb">&nbsp;</td>
  962. <td class="blb">&nbsp;</td>
  963. </tr>
  964. <tr>
  965. <td class="bb"><a class="ref" href="#DURATION">duration</a></td>
  966. <td class="blb">0*1</td>
  967. <td class="blb">0*1</td>
  968. <td class="blb">&nbsp;</td>
  969. <td class="blb">0-1</td>
  970. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  971. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  972. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  973. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  974. </tr>
  975. <tr>
  976. <td class="bb"><a class="ref" href="#EXDATE">exdate</a></td>
  977. <td class="blb">0-m</td>
  978. <td class="blb">0-m</td>
  979. <td class="blb">0-m</td>
  980. <td class="blb">&nbsp;</td>
  981. <td class="blb">&nbsp;</td>
  982. <td class="blb">&nbsp;</td>
  983. <td class="blb">&nbsp;</td>
  984. <td class="blb">&nbsp;</td>
  985. </tr>
  986. <tr>
  987. <td class="bb"><a class="ref" href="#EXRULE">exrule</a></td>
  988. <td class="blb">0-m</td>
  989. <td class="blb">0-m</td>
  990. <td class="blb">0-m</td>
  991. <td class="blb">&nbsp;</td>
  992. <td class="blb">&nbsp;</td>
  993. <td class="blb">&nbsp;</td>
  994. <td class="blb">&nbsp;</td>
  995. <td class="blb">&nbsp;</td>
  996. </tr>
  997. <tr>
  998. <td class="bb"><a class="ref" href="#FREEBUSY_PROP">freebusy</a></td>
  999. <td class="blb">&nbsp;</td>
  1000. <td class="blb">&nbsp;</td>
  1001. <td class="blb">&nbsp;</td>
  1002. <td class="blb">0-m</td>
  1003. <td class="blb">&nbsp;</td>
  1004. <td class="blb">&nbsp;</td>
  1005. <td class="blb">&nbsp;</td>
  1006. <td class="blb">&nbsp;</td>
  1007. </tr>
  1008. <tr>
  1009. <td class="bb"><a class="ref" href="#GEO">geo</a></td>
  1010. <td class="blb">0-1</td>
  1011. <td class="blb">0-1</td>
  1012. <td class="blb">&nbsp;</td>
  1013. <td class="blb">&nbsp;</td>
  1014. <td class="blb">&nbsp;</td>
  1015. <td class="blb">&nbsp;</td>
  1016. <td class="blb">&nbsp;</td>
  1017. <td class="blb">&nbsp;</td>
  1018. </tr>
  1019. <tr>
  1020. <td class="bb"><a class="ref" href="#LAST-MODIFIED">last-mod</a></td>
  1021. <td class="blb">0-1</td>
  1022. <td class="blb">0-1</td>
  1023. <td class="blb">0-1</td>
  1024. <td class="blb"></td>
  1025. <td class="blb">&nbsp;</td>
  1026. <td class="blb">&nbsp;</td>
  1027. <td class="blb">&nbsp;</td>
  1028. <td class="blb">&nbsp;</td>
  1029. </tr>
  1030. <tr>
  1031. <td class="bb"><a class="ref" href="#LOCATION">location</a></td>
  1032. <td class="blb">0-1</td>
  1033. <td class="blb">0-1</td>
  1034. <td class="blb">&nbsp;</td>
  1035. <td class="blb">&nbsp;</td>
  1036. <td class="blb">&nbsp;</td>
  1037. <td class="blb">&nbsp;</td>
  1038. <td class="blb">&nbsp;</td>
  1039. <td class="blb">&nbsp;</td>
  1040. </tr>
  1041. <tr>
  1042. <td class="bb"><a class="ref" href="#ORGANIZER">organizer</a></td>
  1043. <td class="blb">0-1</td>
  1044. <td class="blb">0-1</td>
  1045. <td class="blb">0-1</td>
  1046. <td class="blb">0-1</td>
  1047. <td class="blb">&nbsp;</td>
  1048. <td class="blb">&nbsp;</td>
  1049. <td class="blb">&nbsp;</td>
  1050. <td class="blb">&nbsp;</td>
  1051. </tr>
  1052. <tr>
  1053. <td class="bb"><a class="ref" href="#PERCENT-COMPLETE">percent</a></td>
  1054. <td class="blb">&nbsp;</td>
  1055. <td class="blb">0-1</td>
  1056. <td class="blb">&nbsp;</td>
  1057. <td class="blb">&nbsp;</td>
  1058. <td class="blb">&nbsp;</td>
  1059. <td class="blb">&nbsp;</td>
  1060. <td class="blb">&nbsp;</td>
  1061. <td class="blb">&nbsp;</td>
  1062. </tr>
  1063. <tr>
  1064. <td class="bb"><a class="ref" href="#PRIORITY">priority</a></td>
  1065. <td class="blb">0-1</td>
  1066. <td class="blb">0-1</td>
  1067. <td class="blb">&nbsp;</td>
  1068. <td class="blb">&nbsp;</td>
  1069. <td class="blb">&nbsp;</td>
  1070. <td class="blb">&nbsp;</td>
  1071. <td class="blb">&nbsp;</td>
  1072. <td class="blb">&nbsp;</td>
  1073. </tr>
  1074. <tr>
  1075. <td class="bb"><a class="ref" href="#RDATE">rdate</a></td>
  1076. <td class="blb">0-m</td>
  1077. <td class="blb">0-m</td>
  1078. <td class="blb">0-m</td>
  1079. <td class="blb">&nbsp;</td>
  1080. <td class="blb">&nbsp;</td>
  1081. <td class="blb">&nbsp;</td>
  1082. <td class="blb">&nbsp;</td>
  1083. <td class="blb">&nbsp;</td>
  1084. </tr>
  1085. <tr>
  1086. <td class="bb"><a class="ref" href="#RECURRENCE-ID">recurid</a></td>
  1087. <td class="blb">0-1</td>
  1088. <td class="blb">0-1</td>
  1089. <td class="blb">0-1</td>
  1090. <td class="blb">&nbsp;</td>
  1091. <td class="blb">&nbsp;</td>
  1092. <td class="blb">&nbsp;</td>
  1093. <td class="blb">&nbsp;</td>
  1094. <td class="blb">&nbsp;</td>
  1095. </tr>
  1096. <tr>
  1097. <td class="bb"><a class="ref" href="#RELATED-TO">related</a></td>
  1098. <td class="blb">0-m</td>
  1099. <td class="blb">0-m</td>
  1100. <td class="blb">0-m</td>
  1101. <td class="blb">&nbsp;</td>
  1102. <td class="blb">&nbsp;</td>
  1103. <td class="blb">&nbsp;</td>
  1104. <td class="blb">&nbsp;</td>
  1105. <td class="blb">&nbsp;</td>
  1106. </tr>
  1107. <tr>
  1108. <td class="bb"><a class="ref" href="#REPEAT">repeat</a></td>
  1109. <td class="blb">&nbsp;</td>
  1110. <td class="blb">&nbsp;</td>
  1111. <td class="blb">&nbsp;</td>
  1112. <td class="blb">&nbsp;</td>
  1113. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  1114. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  1115. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  1116. <td class="blb">0&nbsp;/&nbsp;1=1</td>
  1117. </tr>
  1118. <tr>
  1119. <td class="bb"><a class="ref" href="#RESOURCES">resources</a></td>
  1120. <td class="blb">0-m</td>
  1121. <td class="blb">0-m</td>
  1122. <td class="blb">&nbsp;</td>
  1123. <td class="blb">&nbsp;</td>
  1124. <td class="blb">&nbsp;</td>
  1125. <td class="blb">&nbsp;</td>
  1126. <td class="blb">&nbsp;</td>
  1127. <td class="blb">&nbsp;</td>
  1128. </tr>
  1129. <tr>
  1130. <td class="bb"><a class="ref" href="#RRULE">rrule</a></td>
  1131. <td class="blb">0-m</td>
  1132. <td class="blb">0-m</td>
  1133. <td class="blb">0-m</td>
  1134. <td class="blb">&nbsp;</td>
  1135. <td class="blb">&nbsp;</td>
  1136. <td class="blb">&nbsp;</td>
  1137. <td class="blb">&nbsp;</td>
  1138. <td class="blb">&nbsp;</td>
  1139. </tr>
  1140. <tr>
  1141. <td class="bb"><a class="ref" href="#REQUEST-STATUS">rstatus</a></td>
  1142. <td class="blb">0-m</td>
  1143. <td class="blb">0-m</td>
  1144. <td class="blb">0-m</td>
  1145. <td class="blb">0-m</td>
  1146. <td class="blb">&nbsp;</td>
  1147. <td class="blb">&nbsp;</td>
  1148. <td class="blb">&nbsp;</td>
  1149. <td class="blb">&nbsp;</td>
  1150. </tr>
  1151. <tr>
  1152. <td class="bb"><a class="ref" href="#SEQUENCE">sequence</a></td>
  1153. <td class="blb">0-1</td>
  1154. <td class="blb">0-1</td>
  1155. <td class="blb">0-1</td>
  1156. <td class="blb">&nbsp;</td>
  1157. <td class="blb">&nbsp;</td>
  1158. <td class="blb">&nbsp;</td>
  1159. <td class="blb">&nbsp;</td>
  1160. <td class="blb">&nbsp;</td>
  1161. </tr>
  1162. <tr>
  1163. <td class="bb"><a class="ref" href="#STATUS">status</a></td>
  1164. <td class="blb">0-1</td>
  1165. <td class="blb">0-1</td>
  1166. <td class="blb">0-1</td>
  1167. <td class="blb">&nbsp;</td>
  1168. <td class="blb">&nbsp;</td>
  1169. <td class="blb">&nbsp;</td>
  1170. <td class="blb">&nbsp;</td>
  1171. <td class="blb">&nbsp;</td>
  1172. </tr>
  1173. <tr>
  1174. <td class="bb"><a class="ref" href="#SUMMARY">summary</a></td>
  1175. <td class="blb">0-1</td>
  1176. <td class="blb">0-1</td>
  1177. <td class="blb">0-1</td>
  1178. <td class="blb">&nbsp;</td>
  1179. <td class="blb">&nbsp;</td>
  1180. <td class="blb">&nbsp;</td>
  1181. <td class="blb">1</td>
  1182. <td class="blb">&nbsp;</td>
  1183. </tr>
  1184. <tr>
  1185. <td class="bb"><a class="ref" href="#TRANSP">transp</a></td>
  1186. <td class="blb">0-1</td>
  1187. <td class="blb">&nbsp;</td>
  1188. <td class="blb">&nbsp;</td>
  1189. <td class="blb">&nbsp;</td>
  1190. <td class="blb">&nbsp;</td>
  1191. <td class="blb">&nbsp;</td>
  1192. <td class="blb">&nbsp;</td>
  1193. <td class="blb">&nbsp;</td>
  1194. </tr>
  1195. <tr>
  1196. <td class="bb"><a class="ref" href="#TRIGGER">trigger</a></td>
  1197. <td class="blb">&nbsp;</td>
  1198. <td class="blb">&nbsp;</td>
  1199. <td class="blb">&nbsp;</td>
  1200. <td class="blb">&nbsp;</td>
  1201. <td class="blb">1</td>
  1202. <td class="blb">1</td>
  1203. <td class="blb">1</td>
  1204. <td class="blb">1</td>
  1205. </tr>
  1206. <tr>
  1207. <td class="bb"><a class="ref" href="#UID">uid</a></td>
  1208. <td class="blb">0-1</td>
  1209. <td class="blb">0-1</td>
  1210. <td class="blb">0-1</td>
  1211. <td class="blb">0-1</td>
  1212. <td class="blb">&nbsp;</td>
  1213. <td class="blb">&nbsp;</td>
  1214. <td class="blb">&nbsp;</td>
  1215. <td class="blb">&nbsp;</td>
  1216. </tr>
  1217. <tr>
  1218. <td class="bb"><a class="ref" href="#URL">url</a></td>
  1219. <td class="blb">0-1</td>
  1220. <td class="blb">0-1</td>
  1221. <td class="blb">0-1</td>
  1222. <td class="blb">0-1</td>
  1223. <td class="blb">&nbsp;</td>
  1224. <td class="blb">&nbsp;</td>
  1225. <td class="blb">&nbsp;</td>
  1226. <td class="blb">&nbsp;</td>
  1227. </tr>
  1228. <tr>
  1229. <td class="bb"><a class="ref" href="#X-PROPERTY_PROP">x-prop</a></td>
  1230. <td class="blb">0-m</td>
  1231. <td class="blb">0-m</td>
  1232. <td class="blb">0-m</td>
  1233. <td class="blb">0-m</td>
  1234. <td class="blb">0-m</td>
  1235. <td class="blb">0-m</td>
  1236. <td class="blb">0-m</td>
  1237. <td class="blb">0-m</td>
  1238. </tr>
  1239. </table>
  1240. <p>
  1241. If not set, the <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties
  1242. are automatically created by iCalcreator<br>
  1243. for <a href="#VEVENT">vevent</a>,<a href="#VTODO">vtodo</a>, <a href="#VJOURNAL">vjournal</a> and <a href="#VFREEBUSY">vfreebusy</a> components<br>
  1244. when using iCalcreator object methods <a href="#saveCalendar">saveCalendar</a> or <a href="#returnCalendar">returnCalendar</a><br>
  1245. or when fetching <a href="#DTSTAMP">DTSTAMP</a>/<a href="#UID">UID</a> property value with the component method <a href="#getProperty_PROP">getProperty</a>.
  1246. </p>
  1247. <br>
  1248. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
  1249. <a name="Function_list"></a><h1>3 Function list</h1>
  1250. <a name="iCalcreator_object_methods"></a><h2>3.1 iCalcreator object methods</h2>
  1251. <a name="Calendar_object_constructors"></a><h3>3.1.1 Constructors</h3>
  1252. <a name="vcalendar_constr"></a><h4>3.1.1.1 vcalendar</h4>
  1253. <p>Create a new <a href="#VCALENDAR">VCALENDAR</a> object.</p>
  1254. <p class="label">Format</p>
  1255. <p class="format">vcalendar::vcalendar( [ config ] )</p>
  1256. <p class="comment">
  1257. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1258. </p>
  1259. <p class="label">Basic example</p>
  1260. <p class="example">
  1261. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot; );
  1262. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1263. </p>
  1264. <p>
  1265. The <strong>calendar</strong> property PRODID and each component property <a href="#UID">UID</a> are AUTOMATICALLY generated in iCalcreator,
  1266. if not set manually, and based on the configuration <a href="#Unique_id">unique_id</a>.
  1267. </p>
  1268. <p class="label">Extended example</p>
  1269. <p class="example">
  1270. $tz = &quot;Europe/Stockholm&quot;
  1271. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;
  1272. kigkonsult\iCalcreator\util\util::$TZID =&gt; $tz );
  1273. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1274. $vcalendar-&gt;setProperty( "X-WR-TIMEZONE",
  1275. $tz );
  1276. // <span class="comment">insert components or parse an iCal file (and edit components)</span>
  1277. $xprops = array( &quot;X-LIC-LOCATION&quot; => $tz );
  1278. kigkonsult\iCalcreator\timezoneHandler::createTimezone( $vcalendar,
  1279. $tz,
  1280. $xprops );
  1281. </p>
  1282. <p>
  1283. The <a href="#dTZID">TZID</a> config key and value (timezone) is supplied when setting <a href="#DTSTART">DTSTART</a>,
  1284. <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a> or <a href="#RECURRENCE-ID">RECURRENCE-ID</a>,
  1285. if not set manually, a TZID <b>auto completion</b>.
  1286. </p>
  1287. <p>
  1288. Some <strong>calendar</strong> software may also require calendar property <a href="#Additional_Descriptors">X-WR-TIMEZONE</a>
  1289. and vtimezone component with property <a href="#Additional_Descriptors">X-LIC-LOCATION</a>,
  1290. review <a href="#createTimezone">createTimezone</a>, a method in the timezoneHandler class.
  1291. </p>
  1292. <p>
  1293. Do <b>NOT</b> set <a href="#Directory">directory</a>/<a href="#Filename">filename</a> in vcalendar constructor,
  1294. due to inability to detect error (bool false) config return.
  1295. </p>
  1296. <br>
  1297. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1298. <a name="vevent_constr"></a><h4>3.1.1.2 vevent</h4>
  1299. <p class="label">Format 1</p>
  1300. <p>
  1301. Create a new <a href="#VEVENT">VEVENT</a> object using an iCalcreator object component factory-method,
  1302. returning a reference to the new component.
  1303. </p>
  1304. <p>
  1305. To ease up usage, kigkonsult\iCalcreator\util\util::$LCVEVENT as used in code snippets is available.
  1306. </p>
  1307. <p class="format">vcalendar::newComponent( &quot;vevent&quot; )</p>
  1308. <p class="label">Example</p>
  1309. <p class="example">
  1310. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1311. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1312. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1313. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  1314. $vevent-&gt;setProperty( .. .
  1315. </p>
  1316. <p>
  1317. You can also use a convenient vcalendar::newComponent() method wrapper, like:
  1318. </p>
  1319. <p class="format">vcalendar::newVevent()</p>
  1320. <p class="label">Example</p>
  1321. <p class="example">
  1322. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1323. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1324. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1325. $vevent = $vcalendar-&gt;newVevent();
  1326. $vevent-&gt;setProperty( .. .
  1327. </p>
  1328. <p class="label">Format 2</p>
  1329. <p>Create a new <a href="#VEVENT">VEVENT</a> object.</p>
  1330. <p class="format">vevent::vevent( [ config ] )</p>
  1331. <p class="comment">
  1332. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1333. </p>
  1334. <p class="label">Example</p>
  1335. <p class="example">
  1336. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1337. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1338. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1339. $config = $vcalendar-&gt;getConfig();
  1340. $vevent = new kigkonsult\iCalcreator\vevent( $config );
  1341. $vevent-&gt;setProperty( .. .
  1342. $vcalendar-&gt;setComponent( $vevent );
  1343. </p>
  1344. <br>
  1345. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1346. <a name="vtodo_constr"></a><h4>3.1.1.3 vtodo</h4>
  1347. <p class="label">Format 1</p>
  1348. <p>
  1349. Create a new <a href="#VTODO">VTODO</a> object using an iCalcreator object component factory-method,
  1350. returning a reference to the new component.
  1351. </p>
  1352. <p>
  1353. To ease up usage, kigkonsult\iCalcreator\util\util::$LCVTODO as used in code snippets is available.
  1354. </p>
  1355. <p class="format">vcalendar::newComponent( &quot;vtodo&quot; )</p>
  1356. <p class="label">Example</p>
  1357. <p class="example">
  1358. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1359. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1360. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1361. $vtodo = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTODO );
  1362. $vtodo-&gt;setProperty( .. .
  1363. </p>
  1364. <p>
  1365. You can also use a convenient vcalendar::newComponent() method wrapper, like:
  1366. </p>
  1367. <p class="format">vcalendar::newVtodo()</p>
  1368. <p class="label">Example</p>
  1369. <p class="example">
  1370. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1371. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1372. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1373. $vtodo = $vcalendar-&gt;newVtodo();
  1374. $vtodo-&gt;setProperty( .. .
  1375. </p>
  1376. <p class="label">Format 2</p>
  1377. <p>Create a new <a href="#VTODO">VTODO</a> object.</p>
  1378. <p class="format">vtodo::vtodo( [ config ] )</p>
  1379. <p class="comment">
  1380. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1381. </p>
  1382. <p class="label">Example</p>
  1383. <p class="example">
  1384. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1385. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1386. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1387. $vtodo = new kigkonsult\iCalcreator\vtodo( $vcalendar-&gt;getConfig());
  1388. $vtodo-&gt;setProperty( .. .
  1389. $vcalendar-&gt;setComponent( $vtodo );
  1390. </p>
  1391. <br>
  1392. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1393. <a name="vjournal_constr"></a><h4>3.1.1.4 vjournal</h4>
  1394. <p class="label">Format 1</p>
  1395. <p>
  1396. Create a new <a href="#VJOUNAL">VJOURNAL</a> object using an iCalcreator object factory-method,
  1397. returning a reference to the new component.
  1398. </p>
  1399. <p>
  1400. To ease up usage, kigkonsult\iCalcreator\util\util::$LCVJOURNAL as used in code snippets is available.
  1401. </p>
  1402. <p class="format">vcalendar::newComponent( &quot;vjournal&quot; )</p>
  1403. <p class="label">Example</p>
  1404. <p class="example">
  1405. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1406. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1407. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1408. $vjournal = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVJOURNAL );
  1409. $vjournal-&gt;setProperty( .. .
  1410. </p>
  1411. <p>
  1412. You can also use a convenient vcalendar::newComponent() method wrapper, like:
  1413. </p>
  1414. <p class="format">vcalendar::newVjournal()</p>
  1415. <p class="label">Example</p>
  1416. <p class="example">
  1417. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1418. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1419. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1420. $vjournal = $vcalendar-&gt;newVjournal();
  1421. $vjournal-&gt;setProperty( .. .
  1422. </p>
  1423. <p class="label">Format 2</p>
  1424. <p>Create a new <a href="#VJOURNAL">VJOURNAL</a> object.</p>
  1425. <p class="format">vjournal::vjournal( [ config ] )</p>
  1426. <p class="comment">
  1427. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1428. </p>
  1429. <p class="label">Example</p>
  1430. <p class="example">
  1431. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1432. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1433. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1434. $vjournal = new kigkonsult\iCalcreator\vjournal( $vcalendar-&gt;getConfig());
  1435. $vjournal-&gt;setProperty( .. .
  1436. $vcalendar-&gt;setComponent( $vjournal );
  1437. </p>
  1438. <br>
  1439. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1440. <a name="vfreebusy_constr"></a><h4>3.1.1.5 vfreebusy</h4>
  1441. <p class="label">Format 1</p>
  1442. <p>
  1443. Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object using an iCalcreator object factory-method,
  1444. returning a reference to the new component.
  1445. </p>
  1446. <p>
  1447. To ease up usage, kigkonsult\iCalcreator\util\util::$LCVFREEBUSY as used in code snippets is available.
  1448. </p>
  1449. <p class="format">vcalendar::newComponent( &quot;vfreebusy&quot; )</p>
  1450. <p class="label">Example</p>
  1451. <p class="example">
  1452. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1453. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1454. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1455. $vfreebusy = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVFREEBUSY );
  1456. $vfreebusy-&gt;setProperty( .. .
  1457. </p>
  1458. <p>
  1459. You can also use a convenient vcalendar::newComponent() method wrapper, like:
  1460. </p>
  1461. <p class="format">vcalendar::newVfreebusy()</p>
  1462. <p class="label">Example</p>
  1463. <p class="example">
  1464. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1465. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1466. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1467. $vfreebusy = $vcalendar-&gt;newVfreebusy();
  1468. $vfreebusy-&gt;setProperty( .. .
  1469. </p>
  1470. <p class="label">Format 2</p>
  1471. <p>Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object.</p>
  1472. <p class="format">vfreebusy::vfreebusy( [ config ] )</p>
  1473. <p class="comment">
  1474. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1475. </p>
  1476. <p class="label">Example</p>
  1477. <p class="example">
  1478. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1479. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1480. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1481. $vfreebusy = new kigkonsult\iCalcreator\vfreebusy( $vcalendar-&gt;getConfig());
  1482. $vfreebusy-&gt;setProperty( .. .
  1483. $vcalendar-&gt;setComponent( $vfreebusy );
  1484. </p>
  1485. <br>
  1486. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1487. <a name="valarm_constr"></a><h4>3.1.1.6 valarm</h4>
  1488. <p class="label">Format 1</p>
  1489. <p>
  1490. Create a new <a href="#VALARM">VALARM</a> object using an iCalcreator object component factory-method,
  1491. returning a reference to the new (sub-)component.
  1492. The <a href="#VALARM">VALARM</a> calendar component MUST only appear (one or more, mutually independent)
  1493. within either a <a href="#VEVENT">VEVENT</a> or <a href="#VTODO">VTODO</a> calendar component.
  1494. </p>
  1495. <p>
  1496. To ease up usage, kigkonsult\iCalcreator\util\util::$LCVALARM as used in code snippets is available.
  1497. </p>
  1498. <p class="format">calendarComponent::newComponent( &quot;valarm&quot; )</p>
  1499. <p class="label">Example</p>
  1500. <p class="example">
  1501. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1502. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1503. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1504. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  1505. $vevent-&gt;setProperty( .. .
  1506. $valarm = $vevent-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVALARM );
  1507. $valarm-&gt;setProperty( .. .
  1508. </p>
  1509. <p>
  1510. You can also use a convenient calendarComponent::newComponent() method wrapper, like:
  1511. </p>
  1512. <p class="format">calendarComponent::newValarm()</p>
  1513. <p class="label">Example</p>
  1514. <p class="example">
  1515. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1516. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1517. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1518. $vevent = $vcalendar-&gt;newVevent();
  1519. $vevent-&gt;setProperty( .. .
  1520. $valarm = $vevent-&gt;newValarm();
  1521. $valarm-&gt;setProperty( .. .
  1522. </p>
  1523. <p class="label">Format 2</p>
  1524. <p>Create a new <a href="#VALARM">VALARM</a> object.</p>
  1525. <p class="format">valarm::valarm( [ config ] )</p>
  1526. <p class="comment">
  1527. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1528. </p>
  1529. <p class="label">Example</p>
  1530. <p class="example">
  1531. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1532. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1533. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1534. $vevent = new kigkonsult\iCalcreator\vevent();
  1535. $vevent-&gt;setProperty( .. .
  1536. $valarm = new kigkonsult\iCalcreator\valarm( $vevent-&gt;getConfig());
  1537. $valarm-&gt;setProperty( .. .
  1538. $vevent-&gt;setComponent( $valarm );
  1539. $vcalendar-&gt;setComponent( $vevent );
  1540. </p>
  1541. <br>
  1542. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1543. <a name="vtimezone_constr"></a><h4>3.1.1.7 vtimezone</h4>
  1544. <p>
  1545. The vtimezone component describe, at a minimum, the base offset from <b>UTC</b> for the time zone.
  1546. For dates with UTC DATE-TIME, read <a href="#DATE_WITH_UTC_TIME">this</a>!
  1547. </p>
  1548. <p>
  1549. To ease up usage, kigkonsult\iCalcreator\util\util::$LCVTIMEZONE as used in code snippets is available.
  1550. </p>
  1551. <p class="label">Format 1</p>
  1552. <p>
  1553. Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object using an iCalcreator object component factory-method,
  1554. returning a reference to the new component.
  1555. </p>
  1556. <p class="format">vcalendar::newComponent( &quot;vtimezone&quot; )</p>
  1557. <p class="label">Example</p>
  1558. <p class="example">
  1559. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1560. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1561. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1562. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  1563. $vtimezone-&gt;setProperty( .. .
  1564. </p>
  1565. <p>
  1566. You can also use a convenient vcalendar::newComponent() method wrapper, like:
  1567. </p>
  1568. <p class="format">vcalendar::newVtimezone()</p>
  1569. <p class="label">Example</p>
  1570. <p class="example">
  1571. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1572. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1573. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1574. $vtimezone = $vcalendar-&gt;newVtimezone();
  1575. $vtimezone-&gt;setProperty( .. .
  1576. </p>
  1577. <p class="label">Format 2</p>
  1578. <p>Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object.</p>
  1579. <p class="format">vtimezone::vtimezone( [ config ] )</p>
  1580. <p class="comment">
  1581. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1582. </p>
  1583. <p class="label">Example</p>
  1584. <p class="example">
  1585. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1586. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1587. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1588. $vtimezone = new kigkonsult\iCalcreator\vtimezone( $vcalendar-&gt;getConfig());
  1589. $vtimezone-&gt;setProperty( .. .
  1590. $vcalendar-&gt;setComponent( $vtimezone );
  1591. </p>
  1592. <br>
  1593. <h5>Creation of timezone components</h5>
  1594. <p>
  1595. It is possible to create timezone components, using a method in timezoneHandler class, <a href="#createTimezone">createTimezone</a>
  1596. and utilizing the <em>PHP</em> DateTimeZone class.
  1597. </p>
  1598. <br>
  1599. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1600. <a name="standard_daylight_constr"></a><h4>3.1.1.8 standard / daylight</h4>
  1601. <p class="label">Format 1</p>
  1602. <p>
  1603. Create a new <a href="#VTIMEZONE">VTIMEZONE</a> <b>standard</b> / <b>daylight</b> objects
  1604. using an iCalcreator object component factory-method,
  1605. returning a reference to the new (sub-)component.
  1606. </p>
  1607. <p>
  1608. To ease up usage,
  1609. kigkonsult\iCalcreator\util\util::$LCSTANDARD and
  1610. kigkonsult\iCalcreator\util\util::$LCDAYLIGHT
  1611. as used in code snippets are available.
  1612. </p>
  1613. <p class="format">vtimezone::newComponent( &quot;standard&quot; )</p>
  1614. <p class="label">Example</p>
  1615. <p class="example">
  1616. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1617. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1618. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1619. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  1620. $vtimezone-&gt;setProperty( .. .
  1621. $standard = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCSTANDARD );
  1622. $standard-&gt;setProperty( .. .
  1623. $daylight = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCDAYLIGHT );
  1624. $daylight-&gt;setProperty( .. .
  1625. </p>
  1626. <p>
  1627. You can also use convenient vcalendar::newComponent() method wrappers, like:
  1628. </p>
  1629. <p class="format">vtimezone::newStandard()</p>
  1630. <p class="format">vtimezone::newDaylight()</p>
  1631. <p class="label">Example</p>
  1632. <p class="example">
  1633. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1634. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1635. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1636. $vtimezone = $vcalendar-&gt;newVtimezone();
  1637. $vtimezone-&gt;setProperty( .. .
  1638. $standard = $vtimezone-&gt;newStandard();
  1639. $standard-&gt;setProperty( .. .
  1640. $daylight = $vtimezone-&gt;newDaylight();
  1641. $daylight-&gt;setProperty( .. .
  1642. </p>
  1643. <p class="label">Format 2</p>
  1644. <p>Create a new <a href="#VTIMEZONE">VTIMEZONE</a> STANDARD object.</p>
  1645. <p class="format">vtimezone::vtimezone( &quot;standard&quot; [, config ] )</p>
  1646. <p class="comment">
  1647. config = array, review <a href="#iCalcreator_configuration_methods">configuration</a> options.
  1648. </p>
  1649. <p class="label">Example</p>
  1650. <p class="example">
  1651. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  1652. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1653. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1654. $vtimezone = new kigkonsult\iCalcreator\vtimezone( $vcalendar-&gt;getConfig());
  1655. $vtimezone-&gt;setProperty( .. .
  1656. $standard = new kigkonsult\iCalcreator\vtimezone(
  1657. kigkonsult\iCalcreator\util\util::$LCSTANDARD,
  1658. $vtimezone-&gt;getConfig());
  1659. $standard-&gt;setProperty( .. .
  1660. $vtimezone-&gt;setComponent( $standard );
  1661. $daylight = new kigkonsult\iCalcreator\vtimezone(
  1662. kigkonsult\iCalcreator\util\util::$LCDAYLIGHT,
  1663. $vtimezone-&gt;getConfig());
  1664. $daylight-&gt;setProperty( .. .
  1665. $vtimezone-&gt;setComponent( $daylight );
  1666. $vcalendar-&gt;setComponent( $vtimezone );
  1667. </p>
  1668. <br>
  1669. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
  1670. <a name="iCalcreator_object_property_methods"></a><h3>3.1.2 iCalcreator object property methods</h3>
  1671. <a name="deleteProperty"></a><h4>3.1.2.1 deleteProperty</h4>
  1672. <p>Generic iCalcreator object deleteProperty method, simplifying removal of <strong>calendar</strong> properties.</p>
  1673. <p>Bool false is returned if no property exists or when end-of-properties at consecutive method calls.</p>
  1674. <p class="label">Format</p>
  1675. <p class="format">vcalendar::deleteProperty( [ PropName [, order=1 ] )</p>
  1676. <p class="comment">propName = (string) case independent, [RFC5545] component property names,
  1677. unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
  1678. order = (int) if missing 1st/next occurrence,
  1679. used with multiple (property) occurrences
  1680. </p>
  1681. <p class="label">Example</p>
  1682. <p class="example">
  1683. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1684. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  1685. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1686. $vcalendar-&gt;parse();
  1687. if( ! $vcalendar-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$METHOD ))
  1688. &nbsp;&nbsp;echo "METHOD property not found";
  1689. </p>
  1690. <br>
  1691. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  1692. <a name="getProperty"></a><h4>3.1.2.2 getProperty</h4>
  1693. <p class="label">Format 1</p>
  1694. <p>Generic iCalcreator getProperty method, simplifying fetch of <strong>calendar</strong> properties.</p>
  1695. <p>Bool false is returned if no property exists or when end-of-properties at consecutive method calls.</p>
  1696. <p class="format">vcalendar::getProperty( [ PropName [, order=1 [, complete=false ]]] )</p>
  1697. <p class="comment">propName = (string) case independent, [RFC5545] component property names,
  1698. unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
  1699. order = (int) if missing 1st/next occurrence,
  1700. used with multiply (property) occurrences
  1701. complete = (bool) false (default) : output only property value
  1702. true : output = array( &quot;value&quot;=&gt; &lt;value&gt; ,&quot;params&quot; =&gt; &lt;parameter array&gt;)
  1703. </p>
  1704. <p class="label">Example 1</p>
  1705. <p class="example">
  1706. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1707. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  1708. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1709. $vcalendar-&gt;parse();
  1710. $calscale = $vcalendar-&gt;getProperty( kigkonsult\iCalcreator\util\util::$CALSCALE );
  1711. </p>
  1712. <p class="label">Example 2</p>
  1713. <p class="example">
  1714. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1715. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  1716. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1717. $vcalendar-&gt;parse();
  1718. while( $xprop = $vcalendar-&gt;getProperty( )) { // <span class="comment">get x-properties</span>
  1719. </p>
  1720. <a name="getProperty2"></a>
  1721. <a name="geoLocation"></a>
  1722. <p class="label">Format 2</p>
  1723. <p>
  1724. Ability to fetch specific <i>component</i> property (unique) value(-s) and number of occurrence(-s).
  1725. The search includes <b>ALL</b> components within the iCalcreator object instance.
  1726. </p>
  1727. <p>
  1728. Outputs an array( *[ (string) unique-property-value =&gt; (int) number_of_occurrence ] ) or an empty array if no hits.
  1729. The array is sorted by (asc.) key. If a property contains multiple values (like &quot;CATAGORIES:course1,courseB&quot; or
  1730. &quot;RESOURCES:pc,camera&quot;), they are split into unique values.
  1731. </p>
  1732. <dl>
  1733. <dt>Supported Descriptive Component Properties
  1734. <dd><a href="#CATEGORIES">CATEGORIES</a>
  1735. <dd><a href="#LOCATION">LOCATION</a>
  1736. <dd>GEOLOCATION&nbsp;<sup>*1</sup>
  1737. <dd><a href="#PRIORITY">PRIORITY</a>
  1738. <dd><a href="#RESOURCES">RESOURCES</a>
  1739. <dd><a href="#STATUS">STATUS</a>
  1740. <dd><a href="#SUMMARY">SUMMARY</a>
  1741. <dt>Supported Date and Time Component Property
  1742. <dd><a href="#DTSTART">DTSTART</a>&nbsp;<sup>*2</sup>
  1743. <dt>Supported Relationship Component Properties
  1744. <dd><a href="#ATTENDEE">ATTENDEE</a>&nbsp;<sup>*3</sup>
  1745. <dd><a href="#CONTACT">CONTACT</a>
  1746. <dd><a href="#ORGANIZER">ORGANIZER</a>&nbsp;<sup>*3</sup>
  1747. <dd><a href="#RECURRENCE-ID">RECURRENCE-ID</a>&nbsp;<sup>*4</sup> (alt. &quot;R-UID&quot;)
  1748. <dd><a href="#RELATED-TO">RELATED-TO</a>
  1749. <dd><a href="#URL">URL</a>
  1750. <dd><a href="#UID">UID</a>
  1751. </dl>
  1752. <dl>
  1753. <dt><sup>*1</sup>
  1754. <dd>Using the non-standard directive &quot;GEOLOCATION&quot;, iCalcreator returns output supporting<br>
  1755. ISO6709 &quot;Standard representation of geographic point location by coordinates&quot;,<br>
  1756. by combining the <a href="#LOCATION">LOCATION</a> and <a href="#GEO">GEO</a> property values
  1757. (only if <a href="#GEO">GEO</a> is set).
  1758. <dt><sup>*2</sup>
  1759. <dd>Using <a href="#DTSTART">DTSTART</a> as argument returns dates in format &quot;YYYYMMDD&quot; (please note, dates within a <a href="#RDATE">RDATE</a>/<a href="#RRULE">RRULE</a>
  1760. recurrence set are NOT included, only the origin start date (<a href="#DTSTART">DTSTART</a>)).
  1761. <dt><sup>*3</sup>
  1762. <dd>The <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> output values are prefixed
  1763. by &quot;protocol&quot; like &quot;MAILTO:chair@kigkonsult.se&quot;.
  1764. <dt><sup>*4</sup>
  1765. <dd>Using &quot;RECURRENCE-ID-UID&quot; returns <a href="#UID">UID</a> values for component(-s) where <a href="#RECURRENCE-ID">RECURRENCE-ID</a> is set.
  1766. </dl>
  1767. <p>
  1768. To ease up usage, property name holders are found in top of the &quot;util&quot; class (src/util.php).
  1769. </p>
  1770. <p>
  1771. To select components based on property values, use <a href="#selectComponents2">selectComponents</a> (Format 2).
  1772. </p>
  1773. <p>
  1774. To get components based on property values, use <a href="#getComponent5">getComponent</a> (Format 5).
  1775. </p>
  1776. <p>
  1777. To get component property values, use <a href="#getProperty_PROP">getProperty</a>.
  1778. </p>
  1779. <p class="format">vcalendar::getProperty( PropName )</p>
  1780. <p class="comment">propName = (string) case independent, property name</p>
  1781. <p class="label">Example 1</p>
  1782. <p>Fetch all attendees in the iCalcreator object instance.</p>
  1783. <p class="example">
  1784. $attendees = $vcalendar-&gt;getProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE );
  1785. foreach( $attendees as $attendee => $occurrCount ) {
  1786. .. .
  1787. </p>
  1788. <p class="label">Example 2</p>
  1789. <p>Fetch all DTSTARTs in the iCalcreator object instance.</p>
  1790. <p class="example">
  1791. $startDates = $vcalendar-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DTSTART );
  1792. foreach( $startDates as $startDate => $occurrCount ) {
  1793. .. .
  1794. </p>
  1795. <br>
  1796. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  1797. <a name="setProperty"></a><h4>3.1.2.3 setProperty</h4>
  1798. <p>Generic the iCalcreator object setProperty method,simplifying insert of <strong>calendar</strong> properties.</p>
  1799. <p>A successful update returns true.</p>
  1800. <p class="label">Format</p>
  1801. <p class="format">vcalendar::setProperty( PropName, Proparg_1 *[, Proparg_n] )</p>
  1802. <p class="comment">propName = (string) case independent, strict [RFC5545] <strong>calendar</strong> property names,
  1803. unknown propName will be regarded as (a non-standard) <a href="#X-PROPERTY">X-property</a>.
  1804. Proparg = (mixed) property argument
  1805. Last property argument is a (optional) property dependent parameters
  1806. array( *[(string) key =&gt; (string) value ] ).
  1807. A non-standard (, experimental) parameter key MUST be prefixed by &quot;X-&quot;.
  1808. </p>
  1809. <p class="label">Example</p>
  1810. <p class="example">
  1811. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1812. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;,
  1813. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1814. $vcalendar = new kigkonsult\iCalcreator\vcalendar(); // <span class="comment">initiate new CALENDAR</span>
  1815. $vcalendar-&gt;setConfig( $config );
  1816. $vcalendar-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CALSCALE,
  1817. &quot;GREGORIAN&quot; );
  1818. </p>
  1819. <br>
  1820. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  1821. <a name="CALSCALE"></a><h4>3.1.2.4 CALSCALE</h4>
  1822. <p>
  1823. This property defines the <strong>calendar</strong> scale used for the <strong>calendar</strong> information specified in the <strong>iCalendar</strong> object.
  1824. </p>
  1825. <p>
  1826. The default value is &quot;GREGORIAN&quot;, implied when missing.
  1827. </p>
  1828. <p>
  1829. To ease up usage, kigkonsult\iCalcreator\util\util::$CALSCALE as used in code snippets is available.
  1830. </p>
  1831. <h5>Create CALSCALE</h5>
  1832. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  1833. <p class="label">Format</p>
  1834. <p class="format">vcalendar::createCalscale()</p>
  1835. <p class="label">Example</p>
  1836. <p class="example">
  1837. $str = $vcalendar-&gt;createCalscale();
  1838. </p>
  1839. <h5>Delete CALSCALE</h5>
  1840. <p>Remove CALSCALE from calendar.</p>
  1841. <p class="label">Format</p>
  1842. <p class="format">vcalendar::deleteProperty( &quot;calscale&quot; )</p>
  1843. <p class="label">Example</p>
  1844. <p class="example">
  1845. $vcalendar-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CALSCALE );
  1846. </p>
  1847. <h5>Get Calscale</h5>
  1848. <p>If set, returns property value, otherwise bool false.</p>
  1849. <p class="label">Format</p>
  1850. <p class="format">vcalendar::getProperty( &quot;calscale&quot; )</p>
  1851. <p class="label">Example</p>
  1852. <p class="example">
  1853. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1854. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  1855. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  1856. $vcalendar-&gt;setConfig( $config );
  1857. $vcalendar-&gt;parse();
  1858. $calscale = $vcalendar-&gt;getProperty( kigkonsult\iCalcreator\util\util::$CALSCALE );
  1859. </p>
  1860. <h5>Set CALSCALE</h5>
  1861. <p>Insert property value.</p>
  1862. <p class="label">Format</p>
  1863. <p class="format">vcalendar::setProperty( &quot;calscale&quot;, value )</p>
  1864. <p class="comment">value = (string) calscale value</p>
  1865. <p class="label">Example</p>
  1866. <p class="example">
  1867. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1868. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1869. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config ); // <span class="comment">initiate new CALENDAR</span>
  1870. $vcalendar-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CALSCALE,
  1871. &quot;GREGORIAN&quot; );
  1872. </p>
  1873. <br>
  1874. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  1875. <a name="METHOD"></a><h4>3.1.2.5 METHOD</h4>
  1876. <p>
  1877. This property defines the <strong>iCalendar</strong> object method associated with the <strong>calendar</strong> object.
  1878. </p>
  1879. <p>
  1880. METHOD property (value PUBLISH etc.) may be required when importing iCal files
  1881. into some calendaring software (MS etc.), as well as <a href="#X-PROPERTY">x-properties</a>
  1882. "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE"
  1883. and the (automatically created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
  1884. </p>
  1885. <p>
  1886. To ease up usage, kigkonsult\iCalcreator\util\util::$METHOD as used in code snippets is available.
  1887. </p>
  1888. <h5>Create METHOD</h5>
  1889. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  1890. <p class="label">Format</p>
  1891. <p class="format">vcalendar::createMethod()</p>
  1892. <p class="label">Example</p>
  1893. <p class="example">
  1894. $str = $vcalendar-&gt;createMethod();
  1895. </p>
  1896. <h5>Delete METHOD</h5>
  1897. <p>Remove METHOD from calendar.</p>
  1898. <p class="label">Format</p>
  1899. <p class="format">vcalendar::deleteProperty( &quot;METHOD&quot; )</p>
  1900. <p class="label">Example</p>
  1901. <p class="example">
  1902. $vcalendar-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$METHOD );
  1903. </p>
  1904. <h5>Get METHOD</h5>
  1905. <p>If set, returns property value, otherwise bool false.</p>
  1906. <p class="label">Format</p>
  1907. <p class="format">vcalendar::getProperty( &quot;method&quot; );</p>
  1908. <p class="label">Example</p>
  1909. <p class="example">
  1910. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;);
  1911. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  1912. $vcalendar-&gt;parse();
  1913. $method = $vcalendar-&gt;getProperty( kigkonsult\iCalcreator\util\util::$METHOD );
  1914. </p>
  1915. <h5>Set METHOD</h5>
  1916. <p>Insert property value.</p>
  1917. <p class="label">Format</p>
  1918. <p class="format">vcalendar::setProperty( &quot;method&quot;, value )</p>
  1919. <p class="comment">value = (string) method value</p>
  1920. <p class="label">Example</p>
  1921. <p class="example">
  1922. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1923. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1924. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config ); // <span class="comment">initiate new CALENDAR</span>
  1925. $vcalendar-&gt;setProperty( kigkonsult\iCalcreator\util\util::$METHOD,
  1926. &quot;PUBLISH&quot; );
  1927. </p>
  1928. <br>
  1929. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  1930. <a name="VERSION"></a><h4>3.1.2.6 VERSION</h4>
  1931. <p>
  1932. This property specifies the identifier corresponding to the version number of the <strong>iCalendar</strong> specification.
  1933. This property is always placed first in the <strong>calendar</strong> file.
  1934. </p>
  1935. <p>
  1936. To ease up usage, kigkonsult\iCalcreator\util\util::$VERSION as used in code snippets is available.
  1937. </p>
  1938. <h5>Create Version</h5>
  1939. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  1940. <p class="label">Format</p>
  1941. <p class="format">vcalendar::createVersion()</p>
  1942. <p class="label">Example</p>
  1943. <p class="example">
  1944. $str = $vcalendar-&gt;createVersion();
  1945. </p>
  1946. <h5>Get Version</h5>
  1947. <p>Fetch property value.</p>
  1948. <p class="label">Format</p>
  1949. <p class="format">vcalendar::getProperty( &quot;version&quot; )</p>
  1950. <p class="label">Example</p>
  1951. <p class="example">
  1952. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1953. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  1954. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  1955. $vcalendar-&gt;setConfig( $config );
  1956. $vcalendar-&gt;parse();
  1957. $version = $vcalendar-&gt;getProperty( kigkonsult\iCalcreator\util\util::$VERSION )
  1958. </p>
  1959. <h5>Set Version</h5>
  1960. <p>Insert property value.
  1961. Only version 2.0 valid, version is <b>AUTO</b> generated at <strong>calendar</strong> creation.</p>
  1962. <p class="label">Format</p>
  1963. <p class="format">vcalendar::setProperty( &quot;version&quot;, version )</p>
  1964. <p class="comment">version = (string) iCal version</p>
  1965. <p class="label">Example</p>
  1966. <p class="example">
  1967. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  1968. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  1969. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config ); // <span class="comment">initiate new CALENDAR</span>
  1970. $vcalendar-&gt;setProperty( kigkonsult\iCalcreator\util\util::$VERSION,
  1971. &quot;2.0&quot; );
  1972. </p>
  1973. <br>
  1974. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  1975. <a name="X-PROPERTY"></a><h4>3.1.2.7 X-PROPERTY</h4>
  1976. <p>
  1977. A <strong>calendar</strong>, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a <strong>calendar</strong>,
  1978. an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
  1979. </p>
  1980. <p>
  1981. X-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE" may be required when importing iCal files
  1982. into some calendaring software (MS etc.), as well as <a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
  1983. and the (automatically created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
  1984. </p>
  1985. <p>The value type is TEXT.</p>
  1986. <h5>Create X-property</h5>
  1987. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  1988. <p class="label">Format</p>
  1989. <p class="format">vcalendar::createXprop()</p>
  1990. <p class="label">Example</p>
  1991. <p class="example">
  1992. $str = $vcalendar-&gt;createXprop();
  1993. </p>
  1994. <h5>Delete X-PROPERTY</h5>
  1995. <p>Remove X-PROPERTY from <strong>calendar</strong>.</p>
  1996. <p class="label">Format</p>
  1997. <p class="format">vcalendar::deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
  1998. <p class="label">Example 1</p>
  1999. <p>Delete the x-property named &quot;X-PROPERTY&quot;.</p>
  2000. <p class="example">
  2001. $vcalendar-&gt;deleteProperty( &quot;X-PROPERTY&quot; );
  2002. </p>
  2003. <p class="label">Example 2</p>
  2004. <p>Delete all x-properties.</p>
  2005. <p class="example">
  2006. while( $vcalendar-&gt;deleteProperty())
  2007. continue;
  2008. </p>
  2009. <h5>Get X-PROPERTY</h5>
  2010. <p>If set, returns property (name and) value, bool otherwise false.</p>
  2011. <p class="label">Format</p>
  2012. <p class="format">vcalendar::getProperty()</p>
  2013. <p class="format">vcalendar::getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
  2014. <p class="comment">output = array( propertyName<sup>1</sup>, propertyData<sup>2</sup> )</p>
  2015. <p class="format">vcalendar::getProperty( false, propOrderNo/false, true )</p>
  2016. <p class="comment">propOrderNo = (int) specific property value</p>
  2017. <p class="comment">output = array( propertyName<sup>1</sup>
  2018. , array( &quot;value&quot; =&gt; propertyData<sup>2</sup> )
  2019. , &quot;params&quot; =&gt; params<sup>3</sup>))
  2020. <p class="comment">propertyName<sup>1</sup>, propertyData<sup>2</sup> and params<sup>3</sup> specs below.</p>
  2021. </p>
  2022. <p class="label">Example 1</p>
  2023. <p>
  2024. Read all x-prop values in a loop. Output in detail below.
  2025. </p>
  2026. <p class="example">
  2027. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2028. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2029. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2030. $vcalendar-&gt;setConfig( $config );
  2031. $vcalendar-&gt;parse();
  2032. while( $xprop = $vcalendar-&gt;getProperty( )) {
  2033. // <span class="comment">$xprop = array( propertyName<sup>1</sup>,
  2034. propertyData<sup>2</sup> )</span>
  2035. .. .
  2036. </p>
  2037. <p class="label">Example 2</p>
  2038. <p>
  2039. If exists, read the X-WR-TIMEZONE x-prop
  2040. </p>
  2041. <p class="example">
  2042. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2043. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2044. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2045. $vcalendar-&gt;setConfig( $config );
  2046. $vcalendar-&gt;parse();
  2047. if( $xprop = $vcalendar-&gt;getProperty( &quot;X-WR-TIMEZONE&quot; )) {
  2048. // <span class="comment">$xprop = array( &quot;X-WR-TIMEZONE&quot;,
  2049. propertyData<sup>2</sup> )</span>
  2050. </p>
  2051. <p class="label">Example 3</p>
  2052. <p>
  2053. Read all x-prop values/parameters in a loop.
  2054. </p>
  2055. <p class="example">
  2056. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2057. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2058. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2059. $vcalendar-&gt;setConfig( $config );
  2060. $vcalendar-&gt;parse();
  2061. while( $xprop = $vcalendar-&gt;getProperty( false, false, true )) {
  2062. /* <span class="comment">$xprop = array( propertyName<sup>1</sup>,
  2063. array( &quot;value&quot; =&gt; propertyData<sup>2</sup>,
  2064. &quot;params&quot; =&gt; params<sup>3</sup> ))</span>
  2065. */
  2066. .. .
  2067. </p>
  2068. <h5>Set X-PROPERTY</h5>
  2069. Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
  2070. PropertyNames are always stored upperCase, ex. x-wr-calname =&gt; X-WR-CALNAME.
  2071. <p class="label">Format</p>
  2072. <p class="format">vcalendar::setProperty( propertyName, propertyData [, params ] )</p>
  2073. <p class="comment">propertyName<sup>1</sup> = (string) Any property name with a &quot;X-&quot; prefix
  2074. propertyData<sup>2</sup> = (string) Value type TEXT
  2075. params<sup>3</sup> = (array) ( [&quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;] *[, xparams] )
  2076. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  2077. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  2078. lang<sup>*</sup> = as defined in [RFC5546]
  2079. </p>
  2080. <p class="label">Example</p>
  2081. <p class="example">
  2082. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2083. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  2084. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config ); // initiate new CALENDAR
  2085. // <span class="comment">set some X-properties</span>
  2086. $vcalendar-&gt;setProperty( &quot;x-wr-calname&quot;,
  2087. &quot;Calendar Sample&quot; )
  2088. $vcalendar-&gt;setProperty( &quot;X-WR-CALDESC&quot;,
  2089. &quot;Calendar Description&quot; );
  2090. $vcalendar-&gt;setProperty( &quot;X-WR-TIMEZONE&quot;,
  2091. &quot;Europe/Stockholm&quot; );
  2092. </p>
  2093. <br>
  2094. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_object_property_methods">[up]</a>
  2095. <a name="iCalcreator_component_object_methods"></a><h3>3.1.3 iCalcreator component object methods</h3>
  2096. <a name="deleteComponent"></a><h4>3.1.3.1 deleteComponent</h4>
  2097. <p>
  2098. Remove component from the iCalcreator object instance.
  2099. </p>
  2100. <p>
  2101. Bool false is returned if no component exists or at end-of-components invoking the method consecutive.
  2102. </p>
  2103. <p class="label">format 1</p>
  2104. Remove component with order number (1st=1, 2nd=2).
  2105. <p class="format">vcalendar::deleteComponent( orderNumber )</p>
  2106. <p class="comment">orderNumber = (int) order number</p>
  2107. <p class="label">format 2</p>
  2108. <P>Remove component with component type (e.g. &quot;vevent&quot;) and order 1 alt. suborder number.</p>
  2109. <p class="format">vcalendar::deleteComponent( componentType [, componentSuborderNumber])</p>
  2110. <p class="comment">componentType = (string) component type
  2111. componentSuborderNumber = (int) order number</p>
  2112. <p class="label">format 3</p>
  2113. <p>Remove component with <a href="#UID">UID</a>. N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.</p>
  2114. <p class="format">vcalendar::deleteComponent( <a href="#UID">UID</a> )</p>
  2115. <p class="label">Example 1</p>
  2116. <p class="example">
  2117. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2118. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2119. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2120. $vcalendar-&gt;setConfig( $config );
  2121. $vcalendar-&gt;parse();
  2122. $vcalendar-&gt;deleteComponent( 1 );
  2123. $vcalendar-&gt;deleteComponent( kigkonsult\iCalcreator\util\util::$LCVTODO, 2 );
  2124. $vcalendar-&gt;deleteComponent( &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;);
  2125. </p>
  2126. <p class="label">Example 2</p>
  2127. <p>Deleting all components, using format 2 without order number.</p>
  2128. <p class="example">
  2129. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2130. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2131. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2132. $vcalendar-&gt;setConfig( $config );
  2133. $vcalendar-&gt;parse();
  2134. while( $vcalendar-&gt;deleteComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT))
  2135. continue;
  2136. $vtodo = $vcalendar-&gt;getComponent( kigkonsult\iCalcreator\util\util::$LCVTODO );
  2137. while( $vtodo-&gt;deleteComponent( kigkonsult\iCalcreator\util\util::$LCVALARM))
  2138. continue;
  2139. </p>
  2140. <br>
  2141. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_object_methods">[up]</a>
  2142. <a name="getComponent"></a><h4>3.1.3.2 getComponent</h4>
  2143. <p>Get (next) component from the iCalcreator object instance.</p>
  2144. <p>
  2145. Bool false is returned if no component exists or at end-of-components invoking the method consecutive.
  2146. </p>
  2147. <p class="label">format 1</p>
  2148. <p>Get next component, until end-of-components.</p>
  2149. <p class="format">vcalendar::getComponent()</p>
  2150. <p class="label">Example</p>
  2151. <p class="example">
  2152. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2153. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2154. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2155. $vcalendar-&gt;setConfig( $config );
  2156. $vcalendar-&gt;parse();
  2157. while( $comp = $vcalendar-&gt;getComponent()) {§
  2158. .. .
  2159. }
  2160. </p>
  2161. <p class="label">format 2</p>
  2162. <P>Get specific component with order number (1st=1, 2nd=2).</p>
  2163. <p class="format">vcalendar::getComponent( orderNumber )</p>
  2164. <p class="comment">orderNumber = (int) order number</p>
  2165. <p class="label">Example</p>
  2166. <p class="example">
  2167. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2168. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2169. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2170. $vcalendar-&gt;setConfig( $config );
  2171. $vcalendar-&gt;parse();
  2172. if( $comp = $vcalendar-&gt;getComponent( 1 )) {
  2173. .. .
  2174. }
  2175. </p>
  2176. <p class="label">format 3</p>
  2177. <p>
  2178. Get (first/next) component with component type (until end-of-components) alt.
  2179. get specific component with component type and suborder number (1st=1, 2nd=2).
  2180. </p>
  2181. <p class="format">vcalendar::getComponent( componentType [, componentSuborderNumber])</p>
  2182. <p class="comment">componentType = (string) component type
  2183. componentSuborderNumber = (int) order number</p>
  2184. <p class="label">Example</p>
  2185. <p class="example">
  2186. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2187. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2188. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2189. $vcalendar-&gt;setConfig( $config );
  2190. $vcalendar-&gt;parse();
  2191. if( $comp = $vcalendar-&gt;getComponent( kigkonsult\iCalcreator\util\util::$LCVTODO, 2 )) {
  2192. .. .
  2193. }
  2194. </p>
  2195. <p class="label">format 4</p>
  2196. <p>
  2197. Get (first/next) component with <a href="#UID">UID</a> as key.
  2198. (<a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.)
  2199. May be used when trying to find (base) component and corresponding <a href="#RECURRENCE-ID">RECURRENCE-ID</a> components.
  2200. </p>
  2201. <p class="format">vcalendar::getComponent( <a href="#UID">UID</a> )</p>
  2202. <p class="label">Example</p>
  2203. <p class="example">
  2204. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2205. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2206. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2207. $vcalendar-&gt;setConfig( $config );
  2208. $vcalendar-&gt;parse();
  2209. $uid = &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;;
  2210. if( $comp = $vcalendar-&gt;getComponent( $uid )) {
  2211. .. .
  2212. }
  2213. </p>
  2214. <a name="getComponent5"></a>
  2215. <p class="label">format 5</p>
  2216. <p>
  2217. Get (first/next) component based on specific property contents:
  2218. </p>
  2219. <p>
  2220. To ease up usage, property name holders are found in top of the &quot;util&quot; class (src/util.php).
  2221. </p>
  2222. <dl>
  2223. <dt>Supported Descriptive Component Properties
  2224. <dd><a href="#CATEGORIES">CATEGORIES</a>
  2225. <dd><a href="#LOCATION">LOCATION</a>
  2226. <dd><a href="#PRIORITY">PRIORITY</a>
  2227. <dd><a href="#RESOURCES">RESOURCES</a>
  2228. <dd><a href="#STATUS">STATUS</a>
  2229. <dd><a href="#SUMMARY">SUMMARY</a>
  2230. <dt>Date and Time Component Properties
  2231. <dd><a href="#COMPLETED">COMPLETED</a>
  2232. <dd><a href="#DTEND">DTEND</a>
  2233. <dd><a href="#DUE">DUE</a>
  2234. <dd><a href="#DTSTART">DTSTART</a>
  2235. <dt>SupportedRelationship Component Properties
  2236. <dd><a href="#ATTENDEE">ATTENDEE</a>&nbsp;<sup>*1</sup>
  2237. <dd><a href="#CONTACT">CONTACT</a>
  2238. <dd><a href="#ORGANIZER">ORGANIZER</a>&nbsp;<sup>*1</sup>
  2239. <dd><a href="#RECURRENCE-ID">RECURRENCE-ID</a>
  2240. <dd><a href="#RELATED-TO">RELATED-TO</a>
  2241. <dd><a href="#URL">URL</a>
  2242. <dd><a href="#UID">UID</a>
  2243. <dt>Change Management Component Properties
  2244. <dd><a href="#CREATED">CREATED</a>
  2245. <dd><a href="#DTSTAMP">DTSTAMP</a>
  2246. <dd><a href="#LAST-MODIFIED">LAST-MODIFIED</a>
  2247. </dl>
  2248. <dl>
  2249. <dt><sup>*1</sup>
  2250. <dd><a href="#ATTENDEE">ATTENDEE</a> and
  2251. <a href="#ORGANIZER">ORGANIZER</a> search values must be prefixed by protocol ex. &quot;MAILTO:chair@ical.net&quot;.
  2252. </dl>
  2253. <p>
  2254. For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit exists.
  2255. For the other, non-date, properties an exact (strict case) match is required.
  2256. </p>
  2257. <p>
  2258. To select components based on property values, use <a href="#selectComponents2">selectComponents</a> (Format 2).
  2259. </p>
  2260. <p>
  2261. To retrieve specific iCalcreator object instance property values, searching <b>ALL</b> components,
  2262. use <a href="#getProperty2">getProperty</a> (Format 2).
  2263. </p>
  2264. <p class="format">vcalendar::getComponent( search )</p>
  2265. <p class="comment">
  2266. search = (array) ( *[ propertyName =&gt; uniqueValue ]), multiple array elements are combined by &quot;OR&quot;
  2267. propertyName = (string) property name, above
  2268. propertyData = (string) unique property value (strict case),
  2269. date format &quot;YYYYMMDD&quot; (if any side is DATE, only dates are used),
  2270. datetime format &quot;YYYYMMDDTHHMMSS&quot;</p>
  2271. <p class="label">Example</p>
  2272. <p class="example">
  2273. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2274. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2275. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2276. $vcalendar-&gt;setConfig( $config );
  2277. $vcalendar-&gt;parse();
  2278. while( $comp = $vcalendar-&gt;getComponent( array( kigkonsult\iCalcreator\util\util::$RESOURCES =&gt;
  2279. &quot;PC&quot; )) {
  2280. }
  2281. </p>
  2282. <br>
  2283. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_object_methods">[up]</a>
  2284. <a name="newComponent"></a><h4>3.1.3.3 newComponent</h4>
  2285. <P>
  2286. Create component (<a href="#VEVENT">VEVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> / <a href="#VTIMEZONE">VTIMEZONE</a>)
  2287. using a iCalcreator object factory-method, returning a reference to the new component.
  2288. </p>
  2289. <p>
  2290. To ease up usage,
  2291. kigkonsult\iCalcreator\util\util::$LCVEVENT,
  2292. kigkonsult\iCalcreator\util\util::$LCVTODO,,
  2293. kigkonsult\iCalcreator\util\util::$LCVJOURNAL,
  2294. kigkonsult\iCalcreator\util\util::$LCVFREEBUSY and
  2295. kigkonsult\iCalcreator\util\util::$LCVTIMEZONE
  2296. as used in code snippets is available.
  2297. </p>
  2298. <p class="label">Format</p>
  2299. <p class="format">vcalendar::newComponent( componentType )</p>
  2300. <p class="comment">componentType = (string) component type</p>
  2301. <p class="label">Example</p>
  2302. <p class="example">
  2303. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  2304. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  2305. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2306. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  2307. </p>
  2308. <br>
  2309. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_object_methods">[up]</a>
  2310. <a name="replaceComponent"></a><h4>3.1.3.4 replaceComponent</h4>
  2311. <P>
  2312. Replace calendar component in vcalendar based on component property <a href="#UID">UID</a>
  2313. (<a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a>).
  2314. If not found, inserted last in component chain.
  2315. </p>
  2316. <p>
  2317. In case of multiple components sharing the same UID (ex. a RECURRENCE-ID property altering a recurrence pattern), the first found is replaced
  2318. and it may lead to unpredictable result, to use with care.
  2319. </p>
  2320. <p>
  2321. For a <a href="#VTIMEZONE">VTIMEZONE</a> component, a <a href="#TZID">TZID</a> match is required.
  2322. </p>
  2323. <p>
  2324. A successfull replace returns bool true otherwise bool false.
  2325. </p>
  2326. <p class="label">Format</p>
  2327. <p class="format">vcalendar::replaceComponent( component )</p>
  2328. <p class="comment">component = (object) component object instance</p>
  2329. <p class="label">Example</p>
  2330. <p class="example">
  2331. $vcalendar-&gt;replaceComponent( $component );
  2332. </p>
  2333. <br>
  2334. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_object_methods">[up]</a>
  2335. <a name="selectComponents"></a><h4>3.1.3.5 selectComponents</h4>
  2336. <p class="label">Format 1</p>
  2337. <p>
  2338. Selects <a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> /
  2339. <a href="#VFREEBUSY">VFREEBUSY</a> components from the iCalcreator object instance on based on <b>dates</b>
  2340. (notice <a href="#date_restriction">date restriction</a>), based on the initial <a href="#DTSTART">DTSTART</a>
  2341. property along with the <a href="#RRULE">RRULE</a>, <a href="#RDATE">RDATE</a>, <a href="#EXDATE">EXDATE</a>
  2342. and <a href="#EXRULE">EXRULE</a> properties in the component.
  2343. </p>
  2344. <p>Requirement:</p>
  2345. <ul>
  2346. <li>The property <a href="#DTSTART">DTSTART</a> is required. If missing in a <a href="#VTODO">VTODO</a> component, <a href="#DTSTART">DUE</a> is used.</li>
  2347. <li>If not using local date, timezone in property <a href="#DTSTART">DTSTART</a> etc. MUST be PHP complient.</li>
  2348. </ul>
  2349. <p>Limitations:</p>
  2350. <ul>
  2351. <li>The values &quot;SECONDLY&quot; / &quot;MINUTELY&quot; / &quot;HOURLY&quot; in the &quot;FREQ&quot; rule part are NOT supported.
  2352. <li>If using components with properties<br>
  2353. <a href="#UID">UID</a> in combination with <a href="#SEQUENCE">SEQUENCE</a> and <a href="#RECURRENCE-ID">RECURRENCE-ID</a><br>
  2354. (i.e. altering an individual instance within the recurrence set),<br>
  2355. the <a href="#RECURRENCE-ID">RECURRENCE-ID</a> parameter &quot;RANGE&quot; (&quot;THISANDPRIOR&quot; / &quot;THISANDFUTURE&quot;) is NOT (yet) supported.</li>
  2356. <li>only one reccurrence a day</li>
  2357. <li>a RDATE reccurrence will overwrite any RRULE reccurrence, on an date (Ymd) basis</li>
  2358. <li>no X-CURRENT-DTEND if no DTEND (DUE) is set (below)</li>
  2359. </ul>
  2360. <p>
  2361. Returns an array with components (events) or bool false is returned if no selected component exists.
  2362. <p>
  2363. <p>Added X-properties in recurrent instances of a <strong>calendar</strong> component:</p>
  2364. <ul>
  2365. <li>&quot;X-CURRENT-DTSTART&quot;, TEXT content, <i>&quot;Y-m-d&nbsp;[H:i:s [timezone]]&quot;</i> showing the current start date.</li>
  2366. <li>&quot;X-CURRENT-DTEND&quot; alt. &quot;X-CURRENT-DUE&quot; (opt), TEXT content, <i>&quot;Y-m-d&nbsp;[H:i:s [timezone]]&quot;</i> showing the current end date.</li>
  2367. <li>&quot;X-RECURRENCE&quot;, the RRULE/RDATE recurrence pattarn number (none in the recurrence start), also after an RECURRENCE-ID change</li>
  2368. <li>&quot;X-OCCURENCE&quot;, contains, where applicable, single multi-day recurrence event day number (formatted as 'day X of Y')</li>
  2369. </ul>
  2370. <p>
  2371. To ease up usage,
  2372. kigkonsult\iCalcreator\util\util::$X_CURRENT_DTSTART,
  2373. kigkonsult\iCalcreator\util\util::$X_CURRENT_DTEND,
  2374. kigkonsult\iCalcreator\util\util::$X_CURRENT_DUE,
  2375. kigkonsult\iCalcreator\util\util::$X_RECURRENCE,
  2376. kigkonsult\iCalcreator\util\util::$X_OCCURENCE and
  2377. are available.
  2378. </p>
  2379. <p class="format">vcalendar::selectComponents([ startYear, startMonth, startDay
  2380. [, endYear, endMonth, endDay
  2381. [, cType [, flat [, any [, split]]]]]])
  2382. </p>
  2383. <p class="comment">startYear : (int) start year (4*digit), default current year
  2384. (object) start date (datetime)<sup>*</sup>
  2385. startMonth : (int) start month (1-2*digit), default current month
  2386. (object) end date (datetime)<sup>*</sup>
  2387. startDay : (int) start day (1-2*digit), default current day
  2388. endYear : (int) end year (4*digit), default startYear
  2389. endMonth : (int) end month (1-2*digit), default startMonth
  2390. endDay : (int) end day (1-2*digit), default startDay
  2391. cType : (mixed) <strong>calendar</strong> component type(-s), (string/array)
  2392. (&quot;vevent&quot;, &quot;vtodo&quot;, &quot;vjournal&quot;, &quot;vfreebusy&quot;)
  2393. (bool) false (default) =&gt; all
  2394. flat : (bool) true =&gt; output : array[] (ignores split)
  2395. component where recurrence pattern exists within period
  2396. false (default) =&gt; output : array[Year][Month][Day][]
  2397. any : (bool) true (default) =&gt; select components with recurrence within period
  2398. false =&gt; only components that starts (DTSTART) within period
  2399. split : (bool) true (default) =&gt; one component copy for every day it occurs
  2400. within the period
  2401. false =&gt; one occurrence of component in output array,
  2402. start date/recurrence (start) date
  2403. <sup>*</sup>When using datetime objects, other start/end arguments are ignored.
  2404. valid flat any split
  2405. combinations (defaults in upper case)
  2406. 1 false true true
  2407. 2 false true false
  2408. 3 false false [false] (split set to false if flat=false and any=false)
  2409. 4 true true [false] (split set to false if flat=true)
  2410. 5 true false [false] (split set to false if flat=true)
  2411. If flat is set to false, output array is sorted in 'Y-m-d h-i-s' asc. order.
  2412. </p>
  2413. <p class="label">Example</p>
  2414. <p class="example">
  2415. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2416. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  2417. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  2418. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2419. $vcalendar-&gt;setConfig( $config );
  2420. $vcalendar-&gt;parse();
  2421. $events_arr = $vcalendar-&gt;selectComponents( 2007, 11, 1, 2007, 11, 30,
  2422. kigkonsult\iCalcreator\util\util::$LCVEVENT );
  2423. // <span class="comment">select all events occurring 1-30 nov. 2007</span>
  2424. foreach( $events_arr as $year =&gt; $year_arr ) {
  2425. foreach( $year_arr as $month =&gt; $month_arr ) {
  2426. foreach( $month_arr as $day =&gt; $day_arr ) {
  2427. foreach( $day_arr as $event ) {
  2428. $currddate = $event-&gt;getProperty( kigkonsult\iCalcreator\util\util::$X_CURRENT_DTSTART );
  2429. <span class="comment">// if member of a recurrence set, returns
  2430. // array(&quot; x-current-dtstart&quot;,
  2431. // &lt;(string) date(&quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;)&gt;)</span>
  2432. $startDate = $event-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DTSTART );
  2433. $summary = $event-&gt;getProperty( kigkonsult\iCalcreator\util\util::$SUMMARY );
  2434. $description = $event-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION );
  2435. </p>
  2436. <a name="selectComponents2"></a>
  2437. <p class="label">format 2</p>
  2438. <p>
  2439. Using this format, the iCalcreator object method selects components based on specific property value(-s).
  2440. </p>
  2441. <dl>
  2442. <dt>Supported Descriptive Component Properties
  2443. <dd><a href="#CATEGORIES">CATEGORIES</a>
  2444. <dd><a href="#LOCATION">LOCATION</a>
  2445. <dd><a href="#PRIORITY">PRIORITY</a>
  2446. <dd><a href="#RESOURCES">RESOURCES</a>
  2447. <dd><a href="#STATUS">STATUS</a>
  2448. <dd><a href="#SUMMARY">SUMMARY</a>
  2449. <dt>Supported Relationship Component Properties
  2450. <dd><a href="#ATTENDEE">ATTENDEE</a>&nbsp;<sup>*1</sup>
  2451. <dd><a href="#CONTACT">CONTACT</a>
  2452. <dd><a href="#ORGANIZER">ORGANIZER</a>&nbsp;<sup>*1</sup>
  2453. <dd><a href="#RELATED-TO">RELATED-TO</a>
  2454. <dd><a href="#URL">URL</a>
  2455. <dd><a href="#UID">UID</a>
  2456. </dl>
  2457. <dl>
  2458. <dt><sup>*1</sup>
  2459. <dd><a href="#ATTENDEE">ATTENDEE</a> and
  2460. <a href="#ORGANIZER">ORGANIZER</a> search values must be prefixed by (upper case) protocol like &quot;MAILTO:chair@ical.net&quot;.
  2461. </dl>
  2462. <p>
  2463. To ease up usage, property name holders are found in top of the &quot;util&quot; class (src/util.php).
  2464. </p>
  2465. <p>
  2466. For the property <a href="#SUMMARY">SUMMARY</a>, if a search value (any case) exists within property value, a hit is found.
  2467. For the other properties an exact (strict case) match is required. Multiple search properties may coexist.
  2468. </p>
  2469. <p>
  2470. To retrieve specific iCalcreator object instance property values, searching <b>ALL</b> components,
  2471. use <a href="#getProperty2">getProperty</a> (Format 2).
  2472. </p>
  2473. <p>
  2474. To get components based on property values, use <a href="#getComponent5">getComponent</a> (Format 5).
  2475. </p>
  2476. <p class="format">vcalendar::selectComponents( searchArray )</p>
  2477. <p>Outputs an array of matched (unique) components in <a href="#UID">UID</a> order.</p>
  2478. <p class="comment">searchArray : (array) *( propertyName =&gt; propertyValue )
  2479. propertyName : (string) above (any case)
  2480. propertyValue : (string) value / (array) ( *[ (string) value] )
  2481. </p>
  2482. <p class="label">Example</p>
  2483. <p class="example">
  2484. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2485. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  2486. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  2487. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2488. $vcalendar-&gt;setConfig( $config );
  2489. $vcalendar-&gt;parse();
  2490. $searchArray = array( kigkonsult\iCalcreator\util\util::$PRIORITY =&gt; array( 1, 2, 3, 4 ));
  2491. $highPrioArr = $vcalendar-&gt;selectComponents( $searchArray );
  2492. // <span class="comment">select all components with PRIORITY set to high (1-4)</span>
  2493. if( ! empty( $highPrioArr )) {
  2494. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  2495. $highPrioCal = new kigkonsult\iCalcreator\vcalendar( $config );
  2496. $highPrioCal-&gt;setProperty( "X-WR-CALDESC",
  2497. "High priority events" );
  2498. foreach( $highPrioArr as $highPrioComponent )
  2499. $highPrioCal-&gt;setComponent( $highPrioComponent );
  2500. $highPrioCal-&gt;returnCalendar();
  2501. }
  2502. exit;
  2503. </p>
  2504. <br>
  2505. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_object_methods">[up]</a>
  2506. <a name="setComponent"></a><h4>3.1.3.6 setComponent</h4>
  2507. <p>
  2508. Replace or update component in the iCalcreator object instance.
  2509. Also add a <strong>calendar</strong> component to the iCalcreator object instance
  2510. when <strong>calendar</strong> component is created with the procedural (<b>non</b>-factory) method,
  2511. see example <a href="#vevent_constr">VEVENT</a>, format 2.
  2512. </p>
  2513. <p>A successful update returns true.</p>
  2514. <p class="label">format 1</p>
  2515. <p>Insert last in component chain.</p>
  2516. <p class="format">vcalendar::setComponent( component )
  2517. addComponent( component ) // <span class="comment">alias</span></p>
  2518. <p class="comment">component = (object) iCalcreator component instance</p>
  2519. <p class="comment">addComponent, may be removed in future versions.</p>
  2520. <p class="label">format 2</p>
  2521. <p>
  2522. Insert/replace component with order number (1st=1, 2nd=2).
  2523. If replace and orderNumber is not found, component is inserted last in chain.
  2524. </p>
  2525. <p class="format">vcalendar::setComponent( component, orderNumber )</p>
  2526. <p class="comment">component = (object) iCalcreator component instance
  2527. int = (int) order numder</p>
  2528. <p class="label">format 3</p>
  2529. <p>
  2530. Replace component with component type and 1st alt. component order number.
  2531. If orderNumber is not found, component is inserted last in chain.
  2532. </p>
  2533. <p class="format">vcalendar::setComponent( component, componentType [, componentSuborderNo])</p>
  2534. <p class="comment">component = (object) iCalcreator component instance
  2535. componentType = (string) component type
  2536. componentSuborderNo = (int) component Suborder Number</p>
  2537. <p class="label">format 4</p>
  2538. <p>
  2539. Replace component with <a href="#UID">UID</a>.
  2540. N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
  2541. If <a href="#UID">UID</a> is not found, component is inserted last in chain.
  2542. </p>
  2543. <p class="format">vcalendar::setComponent( component, <a href="#UID">UID</a> )</p>
  2544. <p class="comment">component = (object) iCalcreator component instance</p>
  2545. <p class="label">Example</p>
  2546. <p class="example">
  2547. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2548. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot;);
  2549. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2550. $vcalendar-&gt;setConfig( $config );
  2551. $vcalendar-&gt;parse();
  2552. $vevent = vcalendar-&gt;getComponent( 1 ); // <span class="comment">fetch first EVENT</span>
  2553. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  2554. 2006, 12, 24, 19, 30, 00 );
  2555. // <span class="comment">update <a class="ref" href="#DTSTART">DTSTART</a> property</span>
  2556. $vcalendar-&gt;setComponent( $vevent, 1 ); // <span class="comment">replace first component</span>
  2557. </p>
  2558. <br>
  2559. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_object_methods">[up]</a>
  2560. <a name="iCalcreator_calendar_methods"></a><h3>3.1.4 iCalcreator calendar methods</h3>
  2561. <a name="parse_merge"></a><h4>3.1.4.1 parse and merge</h4>
  2562. <p>
  2563. Parse iCal file(-s) or string/array <strong>calendar</strong> content into a single iCalcreator object instance (components, properties and parameters),
  2564. including multiple vcalendars (within a single ICS file) parse, e.g. Oracle Calendar exports.
  2565. </p>
  2566. <p>
  2567. As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported.
  2568. A remote file, URL, <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.!
  2569. Recommendation is to download (cache) remote file before parsing, due to execution time and control.
  2570. </p>
  2571. <p>
  2572. If missing, component property <a href="#UID">UID</a> is created when parsing.
  2573. For that reason <a href="#Unique_id">UNIQUE_ID</a> might need to be set before parsing, Se examples below.
  2574. </p>
  2575. <p>
  2576. Notice <a href="#date_restriction">date restriction</a>!
  2577. </p>
  2578. <p>
  2579. If major parse error occurs (like file access error,
  2580. invalid <strong>calendar</strong> file or <strong>calendar</strong> file without components), bool is returned.
  2581. </p>
  2582. <p>
  2583. Minor errors like non-standard line-endings, initial and trailing empty lines
  2584. as well as files without proper end line(-s) (i.e. missing component end and/or &quot;END:CALENDAR&quot; iCal directives)
  2585. are managed.
  2586. </p>
  2587. <p>
  2588. Non-standard iCal properties (except the <a href="#X-PROPERTY_PROP">X-properties</a>) are ignored.
  2589. </p>
  2590. <p class="label">Format</p>
  2591. <p class="format">vcalendar::parse( [ textToParse ] )</p>
  2592. <p class="comment">textToParse = (string) calendarContent
  2593. ex. result from - file_get_contents( &quot;filename&quot;)
  2594. (array) calendarContent
  2595. ex. result from - file( &quot;filename&quot;, FILE_IGNORE_NEW_LINES )</p>
  2596. <p class="label">parse example 1</p>
  2597. <p class="example">
  2598. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2599. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  2600. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2601. $vcalendar-&gt;setConfig( $config );
  2602. $vcalendar-&gt;parse();
  2603. </p>
  2604. <p class="label">parse example 2</p>
  2605. <p class="example">
  2606. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2607. kigkonsult\iCalcreator\util\util::$URL =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
  2608. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2609. $vcalendar-&gt;parse();
  2610. </p>
  2611. <p class="label">parse example 3</p>
  2612. <p class="example">
  2613. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2614. kigkonsult\iCalcreator\util\util::$URL =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
  2615. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2616. $str = array(
  2617. &quot;BEGIN:VCALENDAR&quot;,
  2618. &quot;PRODID:-//kigkonsult.se//NONSGML kigkonsult.se iCalcreator 2.24//&quot;,
  2619. &quot;VERSION:2.0&quot;,
  2620. &quot;BEGIN:VEVENT&quot;,
  2621. &quot;DTSTART:20101224T190000Z&quot;,
  2622. &quot;DTEND:20101224T200000Z&quot;,
  2623. &quot;DTSTAMP:20101020T103827Z&quot;,
  2624. &quot;UID:20101020T113827-1234GkdhFR@test.org&quot;,
  2625. &quot;DESCRIPTION:example&quot;,
  2626. &quot;END:VEVENT&quot;,
  2627. &quot;END:VCALENDAR&quot;);
  2628. $vcalendar-&gt;parse( $str );
  2629. </p>
  2630. <p class="label">merge example</p>
  2631. <p class="example">
  2632. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2633. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot; );
  2634. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2635. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$FILENAME,&nbsp;&nbsp;&quot;file1.ics&quot; );
  2636. $vcalendar-&gt;parse();
  2637. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$FILENAME,&nbsp;&nbsp;&quot;file2.ics&quot; );
  2638. $vcalendar-&gt;parse();
  2639. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$DIRECTORY,&nbsp;&quot;export&quot; );
  2640. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$FILENAME,&nbsp;&nbsp;&quot;icalmerge.ics&quot; );
  2641. $vcalendar-&gt;saveCalendar();
  2642. </p>
  2643. <br>
  2644. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2645. <a name="createCalendar"></a><h4>3.1.4.2 createCalendar</h4>
  2646. Generate and return <strong>calendar</strong> in a string, testing?
  2647. <p class="label">Format</p>
  2648. <p class="format">vcalendar::createCalendar()</p>
  2649. <p class="label">Example</p>
  2650. <p class="example">
  2651. $str = $vcalendar-&gt;createCalendar();
  2652. echo $str;
  2653. </p>
  2654. <br>
  2655. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2656. <a name="returnCalendar"></a><h4>3.1.4.3 returnCalendar</h4>
  2657. <p>
  2658. Redirect the iCalcreator object instance content to user browser.
  2659. Filename, addressed to browser, is automatically generated if missing or not set
  2660. and the filename will look like it is set using<br>
  2661. </p>
  2662. <p class="example">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot;</p>
  2663. <p>
  2664. The method do not stop PHP script (exit), returns (bool) true on success!
  2665. </p>
  2666. <p class="label">Format</p>
  2667. <p class="format">vcalendar::returnCalendar( [ utf8Encode [, gzip [, cdType ]]] )</p>
  2668. <p class="comment">utf8Encode = (bool) true: utf8 encoded output,
  2669. false: (default) no encoding
  2670. gzip = (bool) true: gzip compressed output
  2671. Header &quot;Content-Length&quot; only sent when gzip=true
  2672. false: (default) no compressing
  2673. cdType = (bool) true: (default) Content-Disposition: attachment
  2674. false: Content-Disposition: inline</p>
  2675. <p class="label">Example 1</p>
  2676. <p class="example">
  2677. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2678. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  2679. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2680. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  2681. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  2682. array( &quot;year&quot; =&gt; 2007,
  2683. &quot;month&quot; =&gt; 4,
  2684. &quot;day&quot; =&gt; 1,
  2685. &quot;hour&quot; =&gt; 19 ));
  2686. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DURATION,
  2687. 0, 0, 3 ));
  2688. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LOCATION,
  2689. &quot;Central Plaza&quot; );
  2690. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$SUMMARY,
  2691. &quot;PHP summit&quot; );
  2692. $vcalendar-&gt;returnCalendar();
  2693. exit;
  2694. </p>
  2695. <p class="label">Example 2</p>
  2696. <p class="example">
  2697. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  2698. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2699. $vcalendar-&gt;setConfig( array( kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  2700. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; ));
  2701. $vcalendar-&gt;parse();
  2702. $utf8Encode = true;
  2703. if( isset( $_SERVER[&quot;HTTP_ACCEPT_ENCODING&quot;] ) &amp;&amp;
  2704. ( false !== strpos( strtolower( $_SERVER[&quot;HTTP_ACCEPT_ENCODING&quot;] ), &quot;gzip&quot; )))
  2705. $gzip = true;
  2706. else
  2707. $gzip = false;
  2708. $vcalendar-&gt;returnCalendar( $utf8Encode, $gzip );
  2709. exit;
  2710. </p>
  2711. <br>
  2712. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2713. <a name="saveCalendar"></a><h4>3.1.4.4 saveCalendar</h4>
  2714. <p>
  2715. Save the iCalcreator object instance in a file,
  2716. using preset <a href="#Directory">directory</a> and <a href="#Filename">filename</a>.
  2717. Filename is automatically generated if missing or not set
  2718. and the filename will look like it is set using<br>
  2719. </p>
  2720. <p class="example">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot;</p>
  2721. </p>
  2722. <p>Return bool true on success, on error false.</p>
  2723. <p class="label">Format</p>
  2724. <p class="format">vcalendar::saveCalendar()</p>
  2725. <p class="label">Example</p>
  2726. <p class="example">
  2727. $vcalendar-&gt;setConfig( array( kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;depot&quot;,
  2728. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;calendar.ics&quot; ));
  2729. if( false === $vcalendar-&gt;saveCalendar()) {
  2730. &nbsp;&nbsp;echo &quot;error when saving&quot;
  2731. </p>
  2732. <br>
  2733. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2734. <a name="sort"></a><h4>3.1.4.5 sort</h4>
  2735. <p class="label">Format 1</p>
  2736. <p>
  2737. Sort created/parsed <strong>calendar</strong> components on the following (prioritized) keys:<br>
  2738. 1 - X-CURRENT-DTSTART - X-CURRENT-DTEND/X-CURRENT-DUE<br>
  2739. &nbsp;&nbsp;&nbsp;&nbsp;(if created in iCalcreator object method <a href="#selectComponents">selectComponents</a>)<br>
  2740. 1 - <a href="#DTSTART">DTSTART</a> - <a href="#DTEND">DTEND</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VEVENT">VEVENT</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components)<br>
  2741. 1 - <a href="#DTSTART">DTSTART</a> - <a href="#DUE">DUE</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VTODO">VTODO</a> components)<br>
  2742. 1 - <a href="#DTSTART">DTSTART</a> (<a href="#VJOURNAL">VJOURNAL</a> components)<br>
  2743. 2 - <a href="#CREATED">CREATED</a> / <a href="#DTSTAMP">DTSTAMP</a><br>
  2744. 3 - <a href="#UID">UID</a><br>
  2745. A date value, like &quot;DTSTART;VALUE=DATE:20120717&quot;, are sorted before a datetime value.<br>
  2746. <a href="#VTIMEZONE">VTIMEZONE</a> component(-s) is always placed first (ordered by <a href="#TZID">TZID</a>). The
  2747. <a href="#VTIMEZONE">STANDARD</a>&nbsp;/&nbsp;<a href="#VTIMEZONE">DAYLIGHT</a>&nbsp; sub-components are sorted (on asc. key <a href="#DTSTART">DTSTART</a>) when calling
  2748. <a href="#createCalendar">createCalendar</a> (or <a href="#returnCalender">returnCalender</a>).
  2749. <br>
  2750. <a href="#VALARM">ALARM</a> sub-components, if exists, are not sorted.
  2751. </p>
  2752. <p class="format">vcalendar::sort()</p>
  2753. <p class="label">Example</p>
  2754. <p class="example">
  2755. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  2756. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2757. $vcalendar-&gt;setConfig( array( kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  2758. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; ));
  2759. $vcalendar-&gt;parse();
  2760. $vcalendar-&gt;sort();
  2761. $vcalendar-&gt;returnCalendar();
  2762. exit;
  2763. </p>
  2764. <a name="sort2"></a>
  2765. <p class="label">Format 2</p>
  2766. <p>
  2767. Sort created/parsed <strong>calendar</strong> components based on specific property values and ascending order.
  2768. If a property is not set in component, an empty sort key is used (i.e. sorted first).
  2769. </p>
  2770. <p class="format">vcalendar::sort( sortArgument )</p>
  2771. <p class="comment">sortArgument: (string) &quot;<a href="#ATTENDEE">ATTENDEE</a>&quot; <sup>*</sup> / &quot;<a href="#CATEGORIES">CATEGORIES</a>&quot; <sup>*</sup> / &quot;<a href="#CONTACT">CONTACT</a>&quot; <sup>*</sup> / &quot;<a href="#DTSTAMP">DTSTAMP</a>&quot; /
  2772. &quot;<a href="#LOCATION">LOCATION"</a>&quot; / &quot;<a href="#ORGANIZER">ORGANIZER</a>&quot; / &quot;<a href="#PRIORITY">PRIORITY</a>&quot; /
  2773. &quot;<a href="#RESOURCES">RESOURCES</a>&quot; <sup>*</sup> / &quot;<a href="#STATUS">STATUS</a>&quot; / &quot;<a href="#SUMMARY">SUMMARY</a>&quot; / &quot;<a href="#URL">URL</a>&quot; / &quot;<a href="#UID">UID</a>&quot; <sup>**</sup>.
  2774. <p class="comment"><sup>*) </sup> For a property where multiple occurrence may exist (<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#CONTACT">CONTACT</a>, <a href="#RESOURCES">RESOURCES</a>) lowest (alphabetic) value is used as sort key.</p>
  2775. <p class="comment"><sup>**)</sup> For multiple components with the same <a href="#UID">UID</a>, components with <a href="#RECURRENCE-ID">RECURRENCE-ID</a> / <a href="#SEQUENCE">SEQUENCE</a> set are sorted first (on asc. values) and components without <a href="#RECURRENCE-ID">RECURRENCE-ID</a> last.</p>
  2776. <p>
  2777. To ease up usage, property name holders are found in top of the &quot;util&quot; class (src/util.php).
  2778. </p>
  2779. <br>
  2780. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2781. <a name="useCachedCalendar"></a><h4>3.1.4.6 useCachedCalendar</h4>
  2782. <p>
  2783. If a recent version of (non-empty and saved) <strong>calendar</strong> file exists, an HTTP redirect is sent otherwise bool false is returned.
  2784. </p>
  2785. <p>
  2786. NOTE, the method no longer stops PHP script (exit), returns bool true on success, false on error!
  2787. </p>
  2788. <p class="label">Format</p>
  2789. <p class="format">vcalendar::useCachedCalendar( [ timeout [, cdType ]] )</p>
  2790. <p class="comment">timeout = (int) default 3600 sec
  2791. cdType = (bool) true: (default) Content-Disposition: attachment
  2792. false: Content-Disposition: inline</p>
  2793. <p class="label">Example</p>
  2794. <p class="example">
  2795. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$DIRECTORY, &quot;depot&quot; );
  2796. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$FILENAME, &quot;calendar.ics&quot; );
  2797. $vcalendar-&gt;useCachedCalendar();
  2798. </p>
  2799. <br>
  2800. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2801. <a name="iCalcreatorVersion"></a><h4>3.1.4.7 iCalcreatorVersion</h4>
  2802. <p>
  2803. This static class method returns the iCalcreator class version number (2.24+).
  2804. </p>
  2805. <p>
  2806. There is also a <em>PHP</em> constant &quot;ICALCREATOR_VERSION&quot; (all versions).
  2807. </p>
  2808. <p class="label">Format</p>
  2809. <p class="format">vcalendar::iCalcreatorVersion()</p>
  2810. <br>
  2811. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_calendar_methods">[up]</a>
  2812. <a name="iCalcreator_configuration_methods"></a><h3>3.1.5 iCalcreator configuration methods</h3>
  2813. <a name="configKeys"></a><h4>3.1.5.1 configuration keys</h4>
  2814. <p>
  2815. You will find convenient holders for config keys in top of the &quot;util&quot; class file (src/util.php)
  2816. as well as some (most) property parameter keys.
  2817. </p>
  2818. <table>
  2819. <tr>
  2820. <td class="bl bb">key</td>
  2821. <td class="bl bb"><strong>calendar</strong></td>
  2822. <td class="bl bb">component</td>
  2823. <td class="bl bb">remark</td>
  2824. </tr>
  2825. <tr>
  2826. <td class="bl bb"><a class="ref" href="#allowEmpty">allowEmpty</a></td>
  2827. <td class="bl bb center">*</td>
  2828. <td class="bl bb center">*</td>
  2829. <td class="bl bb ref">&nbsp;</td>
  2830. </tr>
  2831. <tr>
  2832. <td class="bl bb"><a class="ref" href="#Compsinfo">Compsinfo</a></td>
  2833. <td class="bl bb center">*</td>
  2834. <td class="bl bb center">*</td>
  2835. <td class="bl bb ref">getConfig only</td>
  2836. </tr>
  2837. <tr>
  2838. <td class="bl bb"><a class="ref" href="#Delimiter">Delimiter</a></td>
  2839. <td class="bl bb center">*</td>
  2840. <td class="bl bb">&nbsp;</td>
  2841. <td class="bl bb ref">&nbsp;</td>
  2842. </tr>
  2843. <tr>
  2844. <td class="bl bb"><a class="ref" href="#Directory">Directory</a></td>
  2845. <td class="bl bb center">*</td>
  2846. <td class="bl bb">&nbsp;</td>
  2847. <td class="bl bb ref">&nbsp;</td>
  2848. </tr>
  2849. <tr>
  2850. <td class="bl bb"><a class="ref" href="#Filename">Filename</a></td>
  2851. <td class="bl bb center">*</td>
  2852. <td class="bl bb">&nbsp;</td>
  2853. <td class="bl bb ref">&nbsp;</td>
  2854. </tr>
  2855. <tr>
  2856. <td class="bl bb"><a class="ref" href="#Dirfile">Dirfile</a></td>
  2857. <td class="bl bb center">*</td>
  2858. <td class="bl bb">&nbsp;</td>
  2859. <td class="bl bb ref">getConfig only</td>
  2860. </tr>
  2861. <tr>
  2862. <td class="bl bb"><a class="ref" href="#Filesize">Filesize</a></td>
  2863. <td class="bl bb center">*</td>
  2864. <td class="bl bb">&nbsp;</td>
  2865. <td class="bl bb ref">getConfig only</td>
  2866. </tr>
  2867. <tr>
  2868. <td class="bl bb"><a class="ref" href="#Language">Language</a></td>
  2869. <td class="bl bb center">*</td>
  2870. <td class="bl bb center">*</td>
  2871. <td class="bl bb ref">&nbsp;</td>
  2872. </tr>
  2873. <tr>
  2874. <td class="bl bb"><a class="ref" href="#setPropertyNames">setPropertyNames</a></td>
  2875. <td class="bl bb center">&nbsp;</td>
  2876. <td class="bl bb center">*</td>
  2877. <td class="bl bb ref">getConfig only</td>
  2878. </tr>
  2879. <tr>
  2880. <td class="bl bb"><a class="ref" href="#dTZID">TZID</a></td>
  2881. <td class="bl bb center">*</td>
  2882. <td class="bl bb center">*</td>
  2883. <td class="bl bb ref">&nbsp;</td>
  2884. </tr>
  2885. <tr>
  2886. <td class="bl bb"><a class="ref" href="#Unique_id">Unique_id</a></td>
  2887. <td class="bl bb center">*</td>
  2888. <td class="bl bb center">*</td>
  2889. <td class="bl bb ref">&nbsp;</td>
  2890. </tr>
  2891. <tr>
  2892. <td class="bl bb"><a class="ref" href="#configURL">URL</a></td>
  2893. <td class="bl bb center">*</td>
  2894. <td class="bl bb">&nbsp;</td>
  2895. <td class="bl bb ref">&nbsp;</td>
  2896. </tr>
  2897. </table>
  2898. <br>
  2899. <br>
  2900. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  2901. <a name="getConfig"></a><h4>3.1.5.2 getConfig</h4>
  2902. <p class="format">vcalendar::getConfig( [ key ] )</p>
  2903. <p class="comment">key = (string) config key</p>
  2904. <p class="label">Example 1</p>
  2905. <p class="example">
  2906. $filename = $vcalendar-&gt;getConfig( kigkonsult\iCalcreator\util\util::$FILENAME );
  2907. </p>
  2908. In this example, notice <a href="#Filename">Filename</a>
  2909. <br>
  2910. <p class="label">Example 2</p>
  2911. <p class="example">
  2912. $config = $vcalendar-&gt;getConfig();
  2913. </p>
  2914. <p class="comment">Output= array( string key =&gt; mixed value
  2915. *[, string key =&gt; mixed value] )</p>
  2916. <br>
  2917. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  2918. <a name="initConfig"></a><h4>3.1.5.3 calendar/component initialization</h4>
  2919. <p class="label">Format</p>
  2920. <p>Create a new iCalcreator object instance.</p>
  2921. <p class="format">vcalendar::vcalendar( [ config ] )</p>
  2922. <p class="comment">config = (array) ( *[, key =&gt; value] )
  2923. key = (string) config key
  2924. value = (mixed) config value</p>
  2925. <p class="label">Example 1</p>
  2926. <p class="example">
  2927. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  2928. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  2929. </p>
  2930. <p>
  2931. Do <b>NOT</b> set <a href="#Directory">directory</a>/<a href="#Filename">filename</a> in vcalendar constructor,
  2932. due to inability to detect error (bool false) config return.
  2933. </p>
  2934. <p>Create a new <strong>calendar</strong> component.</p>
  2935. <p class="format">vcalendar::component( [ config ] )</p>
  2936. <p class="comment">config = (array) ( key =&gt; value *[, key =&gt; value] )
  2937. key = (string) config key
  2938. value = (mixed) config value</p>
  2939. <p class="label">Example 2</p>
  2940. <p class="example">
  2941. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  2942. $vevent = new kigkonsult\iCalcreator\vevent( $config );
  2943. </p>
  2944. <p class="label">Example 3</p>
  2945. <p class="example">
  2946. $config = $vcalendar-&gt;getConfig();
  2947. $vevent = new kigkonsult\iCalcreator\vevent( $config );
  2948. </p>
  2949. <p>Only component relevant configuration are set. If using the <a href="#newComponent">newComponent</a> method, configuration is set automatically.</p>
  2950. <br>
  2951. <br>
  2952. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  2953. <a name="setConfig"></a><h4>3.1.5.4 setConfig</h4>
  2954. <p>A successful &quot;setConfig&quot; returns true.</p>
  2955. <p class="label">Format 1</p>
  2956. <p class="format">vcalendar::setConfig( [ config ] )</p>
  2957. <p class="comment">config = (array) ( key =&gt; value *[, key =&gt; value] )
  2958. key = (string) config key
  2959. value = (mixed) config value</p>
  2960. <p class="label">Example 1</p>
  2961. <p class="example">
  2962. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  2963. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  2964. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  2965. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2966. $vcalendar-&gt;setConfig( $config );
  2967. </p>
  2968. <p class="label">Example 2</p>
  2969. <p class="example">
  2970. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  2971. $vevent = new kigkonsult\iCalcreator\vevent();
  2972. $vevent-&gt;setConfig( $config );
  2973. </p>
  2974. <p class="label">Format 2</p>
  2975. <p class="format">vcalendar::setConfig( key, value )</p>
  2976. <p class="comment">key = (string) config key
  2977. value = (mixed) config value</p>
  2978. <p class="label">Example 1</p>
  2979. <p class="example">
  2980. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  2981. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$DIRECTORY, &quot;depot&quot; );
  2982. </p>
  2983. <p class="label">Example 2</p>
  2984. <p class="example">
  2985. $vevent = new kigkonsult\iCalcreator\vevent();
  2986. $vevent-&gt;setConfig( kigkonsult\iCalcreator\util\util::$UNIQUE_ID, &quot;kigkonsult.se&quot; );
  2987. </p>
  2988. <br>
  2989. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  2990. <a name="allowEmpty"></a><h4>3.1.5.5 Allow empty components</h4>
  2991. <p>
  2992. Allow or reject empty <strong>calendar</strong> properties. Used in <a href="#createCalendar">createCalendar</a>, <a href="#returnCalender">returnCalender</a> or
  2993. create&lt;Property&gt; methods, creating [RFC5545] formats.
  2994. </p>
  2995. <p>
  2996. Default true (allow).
  2997. </p>
  2998. <br>
  2999. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3000. <a name="Compsinfo"></a><h4>3.1.5.6 Component information</h4>
  3001. <p>Only to use with iCalcreator object method getConfig.</p>
  3002. <p>
  3003. Get information about the iCalcreator object instance components. Returns array with basic information
  3004. about all components (in array format) within the iCalcreator object instance.
  3005. </p>
  3006. <p class="comment">Output = array ( *compinfo )
  3007. compinfo = array ( &quot;ordno&quot; =&gt; int ordno,
  3008. // <span class="commsnt">order number (1st=1, 2nd=2..)</span>
  3009. , &quot;type&quot; =&gt; string type
  3010. // <span class="comment">component type (vevent, vtodo</span>
  3011. , &quot;uid&quot; =&gt; string uid
  3012. // <span class="comment">component <a href="#UID">UID</a> (not for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a>)</span>
  3013. , &quot;props&quot; =&gt;
  3014. array( *[ propertyName =&gt; Property count ])
  3015. // <span class="comment">for every set property</span>
  3016. , &quot;sub&quot; =&gt; array( *compinfo ))
  3017. // <span class="comment">if subcomponents exists, an array for each subcomponent</span></p>
  3018. <p class="label">Example</p>
  3019. <p class="example">
  3020. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  3021. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  3022. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  3023. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  3024. $vcalendar-&gt;setConfig( $config );
  3025. $vcalendar-&gt;parse();
  3026. $compsinfo = $vcalendar-&gt;getConfig( kigkonsult\iCalcreator\util\util::$COMPSINFO );
  3027. foreach( $compsinfo as compinfo) {
  3028. &nbsp;&nbsp;echo &quot; order number : &quot;.$compinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
  3029. &nbsp;&nbsp;echo &quot; type : &quot;.$compinfo[&quot;type&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
  3030. &nbsp;&nbsp;echo &quot; UID : &quot;.$compinfo[&quot;uid&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
  3031. &nbsp;&nbsp;foreach( $compinfo[&quot;props&quot;] as $propertyName =&gt; $propertyCount )
  3032. &nbsp;&nbsp;&nbsp;&nbsp;echo &quot; $propertyName = $propertyCount&quot;;
  3033. &nbsp;&nbsp;if( is_array( $compinfo[&quot;sub&quot;] )) {
  3034. &nbsp;&nbsp;&nbsp;&nbsp;foreach( $compinfo[&quot;sub&quot;] as $subcompinfo ) {
  3035. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot; order number : &quot;.$subcompinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
  3036. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* .. dito if subcomponents exists */
  3037. &nbsp;&nbsp;&nbsp;&nbsp;}
  3038. &nbsp;&nbsp;}
  3039. }
  3040. </p>
  3041. <br>
  3042. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3043. <a name="Delimiter"></a><h4>3.1.5.7 Delimiter</h4>
  3044. <p>Directory/filename delimiter.</p>
  3045. <p>
  3046. Default <em>PHP</em> constant DIRECTORY_SEPARATOR. If used, <b>must</b> be set BEFORE filename!
  3047. </p>
  3048. <br>
  3049. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3050. <a name="Directory"></a><h4>3.1.5.8 Directory</h4>
  3051. <p>
  3052. Local directory to store/read iCal files.
  3053. </p>
  3054. <p>
  3055. Default &quot;<b>.</b>&quot;.
  3056. </p>
  3057. <p>
  3058. Directory <b>must</b> be set BEFORE <a href="#Filename">filename</a> and <b>must</b> exist and be writeable otherwise bool false is returned.
  3059. If set using an config array and together with <a name="Filename"><u>Filename</u></a>, Directory are set automatically first.
  3060. When setting directory, the <em>PHP</em> realpath function is applied to speed up parse/saveCalendar methods.
  3061. When setting Directory, any previously set <a href="#configURL">URL</a> is removed.
  3062. </p>
  3063. <p class="label">Example</p>
  3064. <p class="example">
  3065. $dir = 'test';
  3066. $config = array( kigkonsult\iCalcreator\util\util::$DIRECTORY => $dir );
  3067. if( false === $vcalendar-&gt;setConfig( $config ))
  3068. die( &quot;Invalid directory $dir&quot; );
  3069. </p>
  3070. <p>
  3071. For temporary calendar files, you may set directory/<a href="#Filename">filename</a> using <em>PHP</em> functions sys_get_temp_dir() and tempnam().
  3072. </p>
  3073. <p>
  3074. Do <b>NOT</b> set directory/<a href="#Filename">filename</a> in <a href="#vcalendar_constr">vcalendar</a> constructor,
  3075. due to inability to detect error (bool false) config return.
  3076. </p>
  3077. <br>
  3078. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3079. <a name="Dirfile"></a><h4>3.1.5.9 Dirfile</h4>
  3080. <p>
  3081. Only available in iCalcreator object method getConfig, returning (string) <a href="#Directory">directory</a>, <a href="#Delimiter">delimiter</a> and <a href="#Filename">filename</a>.
  3082. </p>
  3083. <br>
  3084. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3085. <a name="Fileinfo"></a><h4>3.1.5.10 Fileinfo</h4>
  3086. <p>
  3087. Only available in iCalcreator object method getConfig, giving information in array format about <a href="#Directory">directory</a>,
  3088. <a href="#Filename">filename</a> and <a href="#Filesize">filesize</a>.
  3089. </p>
  3090. <p class="label">Example</p>
  3091. <p class="example">
  3092. $fileinfo = $vcalendar-&gt;getConfig( kigkonsult\iCalcreator\util\util::$FILEINFO );
  3093. </p>
  3094. <p class="comment">output = array( &lt;directory&gt;, &lt;filename&gt;, &lt;filesize&gt; )</p>
  3095. <br>
  3096. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3097. <a name="Filename"></a><h4>3.1.5.11 Filename</h4>
  3098. <p>Calendar local file name, default created like (if not set) like</p>
  3099. <p class="example">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot;;</p>
  3100. <p>
  3101. If not set, filename is created when requested, ex. in iCalcreator object methods <a href="#saveCalendar">saveCalendar</a> or getConfig(kigkonsult\iCalcreator\util\util::$FILENAME).
  3102. </p>
  3103. <p>
  3104. Local filename <b>must</b> be set AFTER setting directory (and opt. delimiter)!
  3105. Filename (and opt. directory) <b>must</b> be readable/writeable otherwise bool false is returned.
  3106. </p>
  3107. <p class="label">Example</p>
  3108. <p class="example">
  3109. $dir = 'test';
  3110. $config = array( kigkonsult\iCalcreator\util\util::$DIRECTORY => $dir );
  3111. if( false === $vcalendar-&gt;setConfig( $config ))
  3112. die( &quot;Error when config directory $dir&quot; );
  3113. $file = 'temp.ics';
  3114. $config = array( kigkonsult\iCalcreator\util\util::$FILENAME =&gt; $file );
  3115. if( false === $vcalendar-&gt;setConfig( $config ))
  3116. die( &quot;Error when config filename $file&quot; );
  3117. </p>
  3118. <p>
  3119. For temporary calendar files, you may set <a href="#Directory">directory</a>/filename</a> using <em>PHP</em> functions sys_get_temp_dir() and tempnam().
  3120. </p>
  3121. <p>
  3122. Do <b>NOT</b> set <a href="#Directory">directory</a>/filename</a> in <a href="#vcalendar_constr">vcalendar</a> constructor,
  3123. due to inability to detect error (bool false) config return.
  3124. </p>
  3125. <br>
  3126. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3127. <a name="Filesize"></a><h4>3.1.5.12 Filesize</h4>
  3128. <p>
  3129. Only when getting configuration (using iCalcreator object method getConfig).<br>
  3130. Returns the size of the file in bytes, to be invoked<br>
  3131. - after &quot;saveCalendar()&quot;<br>
  3132. or<br>
  3133. - after a &quot;setConfig( &quot;directory&quot; / &quot;filename&quot; )&quot; and before/after &quot;parse()&quot;.<br>
  3134. Getting the filesize for a remote file (URL) will always return zero.
  3135. </p>
  3136. <br>
  3137. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3138. <a name="Language"></a><h4>3.1.5.13 Language</h4>
  3139. <p>
  3140. Language for the iCalcreator object instance and component TEXT value properties as defined in [RFC5546].
  3141. </p>
  3142. <p>
  3143. Default empty.
  3144. </p>
  3145. <p>
  3146. If NOT set in TEXT property parameters, language from component instance &quot;setConfig( &quot;language&quot;, ..)&quot; method will be used, if set,
  3147. otherwise language from <strong>calendar</strong> method &quot;setConfig( &quot;language&quot;, ..)&quot; will be used, if set.
  3148. </p>
  3149. <p>
  3150. The <strong>calendar</strong> property PRODID is always recreated when setting (<strong>calendar</strong>) language
  3151. (, note <a href="#Unique_id">Unique_id</a>, below).
  3152. </p>
  3153. <br>
  3154. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3155. <a name="setPropertyNames"></a><h4>3.1.5.14 setPropertyNames</h4>
  3156. <p>
  3157. Returns array of property names for all set properties in component. &quot;X-PROP&quot; will be used when <a href="#X-PROPERTY_PROP">X-properties</a> are set.
  3158. </p>
  3159. <br>
  3160. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3161. <a name="dTZID"></a><h4>3.1.5.15 TZID</h4>
  3162. <p>
  3163. General timezone, will be used if no TZID parameter is supplied when setting <a href="#DTSTART">DTSTART</a>,
  3164. <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a> or <a href="#RECURRENCE-ID">RECURRENCE-ID</a>, a TZID <b>auto completion</b>.
  3165. </p>
  3166. <p>
  3167. Default empty.
  3168. </p>
  3169. <p>
  3170. Note, some <strong>calendar</strong> software may also require calendar property <a href="#Additional_Descriptors">X-WR-TIMEZONE</a>
  3171. and vtimezone component property <a href="#Additional_Descriptors">X-LIC-LOCATION</a>
  3172. (to be set manually, examine also the <a href="#createTimezone">createTimezone</a> a timezoneHandler class method ).
  3173. </p>
  3174. <br>
  3175. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3176. <a name="Unique_id"></a><h4>3.1.5.16 Unique_id</h4>
  3177. <p>
  3178. &quot;Unique_id&quot; is used in <strong>calendar</strong> property PRODID and component property <a href="#UID">UID</a>,
  3179. both created automatically (, if not setting <a href="#UID">UID</a> manually.
  3180. </p>
  3181. <p class="quotes">PRODID
  3182. The identifier is RECOMMENDED to be the identical syntax to the [RFC 822] addr-spec.
  3183. A good method to assure uniqueness is to put the domain name or a domain literal IP address of the host on which
  3184. </p>
  3185. <p>
  3186. Default <b>AUTOMATICALLY</b> generated by using <em>PHP</em> function gethostbyname( $_SERVER[&quot;SERVER_NAME&quot;] )
  3187. when running in a web server environment or &quot;localhost&quot; when using command line interface.
  3188. Used when setting other (domain) name than server name.
  3189. </p>
  3190. <p>
  3191. The <strong>calendar</strong> property PRODID is always recreated when setting unique_id.
  3192. </p>
  3193. <p>
  3194. If missing, the component property <a href="#UID">UID</a> is created at first use of iCalcreator object methods <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a>
  3195. </p>
  3196. <p>
  3197. A strong recommendation is <b>always</b> to set unique_id, creating a new iCalcreator object or component instance,
  3198. to ensure accurate creation of all components <a href="#UID">UID</a> property, also before <a href="#parse">parse</a>, in case of missing <a href="#UID">UID</a>.
  3199. </p>
  3200. <br>
  3201. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3202. <a name="configURL"></a><h4>3.1.5.17 URL</h4>
  3203. <p>
  3204. When reading remote files or resources with URL (using the <a href="#parse">parse()</a> method),
  3205. protocol &quot;http&quot; (&quot;webcal&quot;) and &quot;https&quot; are supported.
  3206. </p>
  3207. <p>
  3208. When setting URL, the previously set <a href="#Directory">Directory</a> is removed.
  3209. </p>
  3210. <p>
  3211. A remote file is identified by the file suffix &quot;.ics&quot;, otherwise the URL is classified as a resource.
  3212. When setting URL to a remote iCal <u>file</u>, only directory need to be (re-)set,
  3213. filename remains unchanged (i.e. 1. set URL, 2. parse, 3. set directory, 4. saveCalendar).
  3214. The URL remote file <u>file</u> part can be retrieved by the vcalendar method<br>
  3215. getConfig( &quot;filename&quot; ).
  3216. When using a resource, filename is unset (note <a href="#Filename">filename</a>, above).
  3217. </p>
  3218. <p class="label">Example</p>
  3219. <p>Parse of remote file, then local save in &quot;depot&quot; folder, using original filename</p>
  3220. <p class="example">
  3221. $url = &quot;http://www.iCal.net/depot/calendar.ics&quot;;
  3222. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  3223. kigkonsult\iCalcreator\util\util::$URL =&gt; $url );
  3224. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  3225. $vcalendar-&gt;parse();
  3226. $vcalendar-&gt;sort();
  3227. $vcalendar-&gt;setConfig( kigkonsult\iCalcreator\util\util::$DIRECTORY, &quot;depot&quot; );
  3228. $vcalendar-&gt;saveCalendar();
  3229. </p>
  3230. <br>
  3231. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_configuration_methods">[up]</a>
  3232. <a name="Calendar_component_object_property_function_list"></a><h2>3.2 Calendar component property method list</h2>
  3233. <p>
  3234. All iCalcreator component object property methods for get/set data.<br>
  3235. For property format in detail, see
  3236. <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
  3237. </p>
  3238. <a name="DATE_WITH_UTC_TIME"></a>
  3239. <span class="label">Notice:</span> for properties and VALUE=DATE-TIME with <b>UTC</b> time.
  3240. <p class="quotes">RFC2445:
  3241. The date with UTC time, or absolute time,
  3242. is identified by a LATIN CAPITAL LETTER Z suffix character (US-ASCII decimal 90),
  3243. the UTC designator, appended to the time value.
  3244. For example, the following represents January 19, 1998, at 0700 UTC:
  3245. </p>
  3246. <p class="quotes">DTSTART:19980119T070000Z</p>
  3247. <p class="quotes">The <a href="#TZID">TZID</a> property parameter MUST <b>NOT</b> be applied to DATE-TIME properties
  3248. whose time values are specified in UTC.
  3249. </p>
  3250. <p>
  3251. <a name="date_restriction"></a>
  3252. Due to a limitation in <em>PHP</em> date functions (on 32 bit systems),
  3253. a date (ex. while setting <a href="#DTSTART">DTSTART</a> property)
  3254. before 1970 or after GMT may force a <em>PHP</em> date function to generate an error or set date to &quot;January 1 1970&quot;.
  3255. Timezones need to be PHP complient!
  3256. </p>
  3257. <a name="deleteProperty_PROP"></a><h3>3.2.1 deleteProperty</h3>
  3258. Generic iCalcreator object instance delete property method,simplifying removal of <strong>calendar</strong> properties.<br>
  3259. Bool false is returned if no property exists or when end-of-properties at consecutive function calls.
  3260. <p class="label">Format</p>
  3261. <p class="format">calendarComponent::deleteProperty( [ PropName [, order ] )</p>
  3262. <p class="comment">propName = (string) case independent, [RFC5545] component property names,
  3263. unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
  3264. order = (int) if missing 1st/next occurrence,
  3265. used with multiply (property) occurrences</p>
  3266. <p class="label">Example</p>
  3267. <p>Remove all COMMENT properties in first event component.</p>
  3268. <p class="example">
  3269. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  3270. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  3271. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  3272. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  3273. $vcalendar-&gt;setConfig( $config );
  3274. $vcalendar-&gt;parse();
  3275. $event = $vcalendar-&gt;getComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  3276. while( $event-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$COMMENT ))
  3277. &nbsp;&nbsp;continue;
  3278. </p>
  3279. <br>
  3280. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3281. <a name="getProperty_PROP"></a><h3>3.2.2 getProperty</h3>
  3282. <a name="geoLocation_PROP"></a>
  3283. <p>Generic iCalcreator component get property method, simplifying fetch of properties.</p>
  3284. <p>Bool false is returned if no property exists or when end-of-properties at consecutive function calls.</p>
  3285. <p>Using the non-standard directive &quot;GEOLOCATION&quot;, iCalcreator returns output supporting<br>
  3286. ISO6709 &quot;Standard representation of geographic point location by coordinates&quot;,<br>
  3287. by combining the <a href="#LOCATION">LOCATION</a> and <a href="#GEO">GEO</a> property values
  3288. (only if <a href="#GEO">GEO</a> is set).
  3289. </p>
  3290. <p class="label">Format</p>
  3291. <p class="format">calendarComponent::getProperty( PropName [, order [, complete ]] )</p>
  3292. <p class="comment">propName = (string) case independent, [RFc5545] component property names,
  3293. unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
  3294. order = (int) if missing/false 1st/next occurrence,
  3295. otherwise with multiply occurrences (1st=1, 2nd=2)
  3296. complete - (bool) false (default): output only property value
  3297. true : output =
  3298. array(&quot;value&quot; =&gt; &lt;value&gt;
  3299. ,&quot;params&quot;=&gt; &lt;parameter array&gt;)</p>
  3300. <p class="label">Example</p>
  3301. <p class="example">
  3302. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  3303. kigkonsult\iCalcreator\util\util::$DIRECTORY =&gt; &quot;import&quot;,
  3304. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  3305. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  3306. $vcalendar-&gt;setConfig( $config );
  3307. $vcalendar-&gt;parse();
  3308. while( $vevent = $vcalendar-&gt;getComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT )) {
  3309. $dtstart = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DTSTART );
  3310. // <span class="comment">one occurrence</span>
  3311. $description = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION ); // <span class="comment">one occurrence</span>
  3312. while( $comment = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$COMMENT )) { // <span class="comment">MAY occur more than once</span>
  3313. }
  3314. }
  3315. </p>
  3316. <p>
  3317. To get iCalcreator object instance property values, use <a href="#getProperty">getProperty</a>.
  3318. <p/>
  3319. <br>
  3320. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3321. <a name="parse"></a><h3>3.2.3 parse</h3>
  3322. <p>
  3323. Parse iCal component property text from a string or an array.
  3324. Each string/array row must be strict RFC5545 formatted, i.e. begin with a property name.
  3325. </p>
  3326. <p>
  3327. Complete <a href="#VALARM">ALARM</a>s, all properties included, in array format and
  3328. first array row as &quot;BEGIN:VALARM&quot;, last as &quot;END:VALARM&quot;
  3329. as well as <a href="#VTIMEZONE">TIMEZONE</a> and standard/daylight subcomponents.
  3330. </p>
  3331. <p>
  3332. If major parse error occurs (like invalid <strong>calendar</strong> structure or no <strong>calendar</strong> components),
  3333. bool false is returned.
  3334. </p>
  3335. <p>
  3336. Minor errors like non-standard line-endings, initial and trailing empty lines
  3337. as well as files without proper end line(-s) (i.e. missing component end iCal directives)
  3338. are managed.
  3339. </p>
  3340. <p>
  3341. Except the <a href="#X-PROPERTY_PROP">X-properties</a>, non-standard properties are ignored.
  3342. </p>
  3343. <p class="label">Format</p>
  3344. <p class="format">calendarComponent::parse( propertyText )</p>
  3345. <p class="comment">propertyText = (string) [RFC5545] formatted property,
  3346. (array) [RFC5545] formatted properties,
  3347. property name <b>must</b> start string / rows(-s)</p>
  3348. <p class="label">example</p>
  3349. <p class="example">
  3350. $e = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  3351. $e-&gt;parse( &quot;DTSTAMP:19970324T1200Z&quot; );
  3352. $e-&gt;parse( &quot;SEQUENCE:0&quot; );
  3353. $e-&gt;parse( &quot;ORGANIZER:MAILTO:jdoe@host1.com&quot; );
  3354. $e-&gt;parse( array(
  3355. &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com&quot;,
  3356. &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host2.com&quot;,
  3357. &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host3.com&quot;,
  3358. &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host4.com&quot; ));
  3359. $e-&gt;parse( &quot;DTSTART:19970324T123000Z&quot; );
  3360. $e-&gt;parse( &quot;DTEND:19970324T210000Z&quot; );
  3361. $e-&gt;parse( &quot;CATEGORIES:MEETING,PROJECT&quot; );
  3362. $e-&gt;parse( &quot;CLASS:PUBLIC&quot; );
  3363. $e-&gt;parse( &quot;SUMMARY:Calendaring Interoperability Planning Meeting&quot; );
  3364. $e-&gt;parse( &quot;STATUS:DRAFT&quot; );
  3365. $e-&gt;parse( &quot;DESCRIPTION:Project xyz Review Meeting Minutes\\n &quot;
  3366. . &quot;Agenda\\n &quot;
  3367. . &quot;1. Review of project version 1.0 requirements.\\n &quot;
  3368. . &quot;2. Definition of project processes.\\n &quot;
  3369. . &quot;3. Review of project schedule.\\n &quot;
  3370. . &quot;Participants: John Smith, Jane Doe, Jim Dandy\\n &quot;
  3371. . &quot;- It was decided that the requirements need to be signed off by \\n &quot;
  3372. . &quot;product marketing.\\n &quot;
  3373. . &quot;- Project processes were accepted.\\n &quot;
  3374. . &quot;- Project schedule needs to account for scheduled holidays and employee\\n &quot;
  3375. . &quot; vacation time. Check with HR for specific dates.\\n &quot;
  3376. . &quot;- New schedule will be distributed by Friday.\\n &quot;
  3377. . &quot;- Next weeks meeting is cancelled. No meeting until 3/23.&quot; );
  3378. $e-&gt;parse( &quot;LOCATION:LDB Lobby&quot; );
  3379. $e-&gt;parse( &quot;ATTACH;FMTTYPE=application/postscript:ftp://xyz.com/pub/conf/bkgrnd.ps&quot; );
  3380. $e-&gt;parse( array( &quot;BEGIN:VALARM&quot;
  3381. , &quot;ACTION:AUDIO&quot;
  3382. , &quot;TRIGGER;VALUE=DATE-TIME:19970224T070000Z&quot;
  3383. , &quot;ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud&quot;
  3384. , &quot;REPEAT:4&quot;
  3385. , &quot;DURATION:PT1H&quot;
  3386. , &quot;X-alarm:non-standard ALARM property&quot;
  3387. , &quot;END:VALARM&quot; ));
  3388. $e-&gt;parse( &quot;X-xomment:non-standard property will be displayed, comma escaped&quot;);
  3389. </p>
  3390. <br>
  3391. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3392. <a name="setProperty_PROP"></a><h3>3.2.4 setProperty</h3>
  3393. <p>
  3394. Generic iCalcreator component object set property method, simplifying insert of properties. For properties where
  3395. multiple occurrences are allowed, last parameter is an index, implementing replaceProperty functionality.
  3396. </p>
  3397. <p>A successful update returns bool true.</p>
  3398. <p>
  3399. To ease up usage, property name holders are found in top of the &quot;util&quot; class (src/util.php).
  3400. </p>
  3401. <p class="label">Format</p>
  3402. <p class="format">calendarComponent::setProperty( PropName, Proparg_1 *[, Proparg_n] )</p>
  3403. <p class="comment">propName = (string) case independent, [RFC5545] component property names,
  3404. unknown propName will be regarded as (a non-standard) <a href="#X-PROPERTY_PROP">X-property</a>.
  3405. Proparg_n = (mixed) property content
  3406. Last property argument is a (optional) property dependent parameters
  3407. array( *[(string) key =&gt; (string) value ] ).
  3408. A non-standard (, experimental) parameter key MUST be prefixed by &quot;X-&quot;.
  3409. </p>
  3410. <p class="label">Example</p>
  3411. <p class="example">
  3412. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  3413. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  3414. array( &quot;year&quot; =&gt; 2007,
  3415. &quot;month&quot;=&gt; 4,
  3416. &quot;day&quot; =&gt; 1,
  3417. &quot;hour&quot; =&gt; 19));
  3418. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DURATION,
  3419. 0, 0, 3 ));
  3420. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LOCATION,
  3421. &quot;Central Plaza&quot; );
  3422. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$SUMMARY,
  3423. &quot;PHP summit&quot; );
  3424. </p>
  3425. <br>
  3426. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3427. <a name="ACTION"></a><h3>3.2.5 ACTION</h3>
  3428. <p>
  3429. This property defines the action to be invoked when an <a href="#VALARM">VALARM</a> is triggered,
  3430. <br> &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;.
  3431. This property is REQUIRED and MUST NOT occur more than once. (&quot;PROCEDURE&quot; is deprecated in [RFC5545].)
  3432. </p>
  3433. <p>
  3434. To ease up usage, kigkonsult\iCalcreator\util\util::$ACTION as used in code snippets is available.
  3435. </p>
  3436. <h5>Create ACTION</h5>
  3437. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3438. <p class="label">Format</p>
  3439. <p class="format">calendarComponent::createAction()</p>
  3440. <p class="label">Example</p>
  3441. <p class="example">
  3442. $str = $component-&gt;createAction();
  3443. </p>
  3444. <h5>Delete ACTION</h5>
  3445. <p>Remove ACTION from component.</p>
  3446. <p class="label">Format</p>
  3447. <p class="format">calendarComponent::deleteProperty( &quot;Action&quot; )</p>
  3448. <p class="label">Example</p>
  3449. <p class="example">
  3450. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ACTION );
  3451. </p>
  3452. <h5>Get ACTION</h5>
  3453. <p>If set, returns property value, otherwise bool false.</p>
  3454. <p class="label">Format 1</p>
  3455. <p class="format">calendarComponent::getProperty( &quot;Action&quot; )</p>
  3456. <p class="comment">output = actionValue<sup>1</sup>
  3457. <p class="label">Format 2</p>
  3458. <p class="format">calendarComponent::getProperty( &quot;Action&quot;, false , true )</p>
  3459. <p class="comment">output = array( &quot;value&quot; =&gt; actionValue<sup>1</sup>
  3460. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  3461. <p class="label">Example</p>
  3462. <p class="example">
  3463. $action = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$ACTION );
  3464. </p>
  3465. <h5>Set ACTION</h5>
  3466. <p>Insert property value.</p>
  3467. <p class="label">Format</p>
  3468. <p class="format">calendarComponent::setProperty( &quot;Action&quot;, actionValue [, xparams ] )</p>
  3469. <p class="comment">actionValue<sup>1</sup> = (string) one of &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;
  3470. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  3471. </p>
  3472. <p class="label">Example</p>
  3473. <p class="example">
  3474. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$ACTION,
  3475. &quot;DISPLAY&quot; );
  3476. </p>
  3477. <br>
  3478. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3479. <a name="ATTACH"></a><h3>3.2.6 ATTACH</h3>
  3480. <p>
  3481. The property provides the capability to associate a document object with a <strong>calendar</strong> component. The property is
  3482. is REQUIRED and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;procedure&quot;),
  3483. OPTIONAL and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;audio&quot;) and
  3484. OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VALARM">VALARM</a> (&quot;ACTION&quot; &quot;email&quot;) components.
  3485. </p>
  3486. <p>
  3487. The default value type for ATTACH is URI. The value type can also be set to BINARY to indicate inline binary encoded content (params<sup>2</sup>).
  3488. </p>
  3489. <p>
  3490. If using other parameters than the recommended &quot;FMTTYPE&quot; and the mandatory &quot;ENCODING&quot; (=&quot;BASE64&quot;)and &quot;VALUE&quot; (=&quot;BINARY&quot;)
  3491. for an inline binary encoded attachment,
  3492. please use only characters within the ASCII character set in parameter name and content,
  3493. to ensure proper line folding when using <a href="#createCalendar">createCalendar</a> and/or <a href="#returnCalendar">returnCalendar</a>.
  3494. </p>
  3495. <p>
  3496. To ease up usage, kigkonsult\iCalcreator\util\util::$ATTACH as used in code snippets is available.
  3497. </p>
  3498. <h5>Create ATTACH</h5>
  3499. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3500. <p class="label">Format</p>
  3501. <p class="format">calendarComponent::createAttach()</p>
  3502. <p class="label">Example</p>
  3503. <p class="example">
  3504. $str = $component-&gt;createAttach();
  3505. </p>
  3506. <h5>Delete ATTACH</h5>
  3507. <p>Remove ATTACH from component.</p>
  3508. <p class="label">Format</p>
  3509. <p class="format">calendarComponent::deleteProperty( &quot;ATTACH&quot; )</p>
  3510. <p class="label">Example 1</p>
  3511. <p class="example">
  3512. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ATTACH );
  3513. </p>
  3514. <p class="label">Example 2</p>
  3515. Delete ATTACH property no 2.
  3516. <p class="example">
  3517. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ATTACH, 2 );
  3518. </p>
  3519. <p class="label">Example 3</p>
  3520. Deleting all ATTACH properties.
  3521. <p class="example">
  3522. while( $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ATTACH ))
  3523. continue;
  3524. </p>
  3525. <h5>Get ATTACH</h5>
  3526. <p>If set, returns property value(-s), otherwise bool false.</p>
  3527. <p class="label">Format 1</p>
  3528. <p class="format">calendarComponent::getProperty( &quot;Attach&quot; )</p>
  3529. <p class="comment">output = attachValue<sup>1</sup></p>
  3530. <p class="label">Format 2</p>
  3531. <p class="format">calendarComponent::getProperty( &quot;ATTACH&quot;, propOrderNo/false , true )</p>
  3532. <p class="comment">propOrderNo = (int) specific property value,
  3533. <p class="comment">output = array( &quot;value&quot; =&gt; attachValue<sup>1</sup>
  3534. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  3535. <p class="label">Format 3</p>
  3536. <p class="format">calendarComponent::getProperty( &quot;Attach&quot;, propOrderNo )</p>
  3537. <p class="comment">propOrderNo = (int) specific property value</p>
  3538. <p class="comment">Get propOrderNo ATTACH</p>
  3539. <p class="label">Example</p>
  3540. <p class="example">
  3541. $attach = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$ATTACH );
  3542. </p>
  3543. <h5>Set ATTACH</h5>
  3544. <p>Insert property value. Parameters will be ordered as prescribed in [RFC5545].</p>
  3545. <p class="label">Format</p>
  3546. <p class="format">calendarComponent::setProperty( &quot;attach&quot;, attachValue<sup>1</sup> [, params [, propOrderNo ]] )</p>
  3547. <p class="comment">attachValue<sup>1</sup> = (string) URI / inline binary encoded content
  3548. params<sup>2</sup> = (array ) ( [ &quot;ENCODING&quot; =&gt; &quot;BASE64&quot;, &quot;VALUE&quot; =&gt; &quot;BINARY&quot; ]
  3549. [, &quot;FMTTYPE&quot; =&gt; contentType ]
  3550. *[,&nbsp;xparams ] )
  3551. contentType = (string) The parameter value MUST be the TEXT for either an IANA
  3552. registered content type or a non-standard content type.
  3553. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  3554. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  3555. </p>
  3556. <p class="label">Example</p>
  3557. <p class="example">
  3558. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$ATTACH,
  3559. &quot;ftp://domain.com/pub/docs/agenda.doc&quot;,
  3560. array( &quot;FMTTYPE&quot; =&gt; &quot;application/binary&quot; ));
  3561. </p>
  3562. <br>
  3563. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3564. <a name="ATTENDEE"></a><h3>3.2.7 ATTENDEE</h3>
  3565. <p>
  3566. The property defines an "Attendee" within a <strong>calendar</strong> component and is OPTIONAL and MUST NOT occur more than once
  3567. in a VALARM (&quot;ACTION&quot; &quot;email&quot;), OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
  3568. </p>
  3569. <p>This value type for ATTENDEE is URI, a <strong>calendar</strong> user address.</p>
  3570. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) ATTENDEE values.</p>
  3571. <p>You can export <strong>calendar</strong> ATTENDEE values as <a href="#iCal2vCards">vCards</a>.
  3572. <p>
  3573. To ease up usage, kigkonsult\iCalcreator\util\util::$ATTENDEE as used in code snippets is available.
  3574. </p>
  3575. <h5>Create ATTENDEE</h5>
  3576. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3577. <p class="label">Format</p>
  3578. <p class="format">calendarComponent::createAttendee()</p>
  3579. <p class="label">Example</p>
  3580. <p class="example">
  3581. $str = $component-&gt;createAttendee();
  3582. </p>
  3583. <h5>Delete ATTENDEE</h5>
  3584. <p>Remove ATTENDEE from component.</p>
  3585. <p class="label">Format</p>
  3586. <p class="format">calendarComponent::deleteProperty( &quot;ATTENDEE&quot; )</p>
  3587. <p class="label">Example 1</p>
  3588. <p>Delete (single/first) ATTENDEE property</p>
  3589. <p class="example">
  3590. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE );
  3591. </p>
  3592. <p class="label">Example 2</p>
  3593. <p>Delete ATTENDEE property no 2.</p>
  3594. <p class="example">
  3595. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE, 2 );
  3596. </p>
  3597. <p class="label">Example 3</p>
  3598. Deleting all ATTENDEE properties.
  3599. <p class="example">
  3600. while( $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE ))
  3601. continue;
  3602. </p>
  3603. <h5>Get ATTENDEE</h5>
  3604. <p>If set, returns property value(-s), otherwise bool false.</p>
  3605. <p class="label">Format 1</p>
  3606. <p class="format">calendarComponent::getProperty( &quot;Attendee&quot; )</p>
  3607. <p class="comment">output = attendeeValue<sup>1</sup></p>
  3608. <p class="label">Format 2</p>
  3609. <p class="format">calendarComponent::getProperty( &quot;ATTENDEE&quot;, propOrderNo/false , true )</p>
  3610. <p class="comment">propOrderNo = (int) specific property value</p>
  3611. <p class="comment">output = array( &quot;value&quot; =&gt; attendeeValue<sup>1</sup>
  3612. , &quot;params&quot; =&gt; array( params<sup>2</sup> ))</p>
  3613. <p class="label">Format 3</p>
  3614. <p class="format">calendarComponent::getProperty( &quot;ATTENDEE&quot;, propOrderNo )</p>
  3615. <p class="comment">propOrderNo = (int) specific property value</p>
  3616. <p class="comment">output = attendeeValue<sup>1</sup></p>
  3617. <p class="label">Example</p>
  3618. <p class="example">
  3619. $attendee = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE );
  3620. </p>
  3621. <h5>Set ATTENDEE</h5>
  3622. <p>
  3623. Insert property value. If exist, default parameter values are removed after input (params<sup>2</sup>).
  3624. Property value must be prefixed by protocol (ftp://, http://,mailto:, file:// ref. rfc 1738 ),
  3625. if missing, &quot;mailto:&quot; is set (indicating an internet mail address).
  3626. Also MEMBER and DIR parameters must be prefixed by protocol. DELEGATED-TO, DELEGATED-FROM, SENT-BY parameters
  3627. must use protocol &quot;mailto:&quot;, prefixed if missing (indicating an internet mail address).
  3628. </p>
  3629. <p>
  3630. The CN, ROLE, PARTSTAT, RSVP, CUTYPE, MEMBER, DELEGATED-TO,DELEGATED-FROM, SENT-BY and DIR
  3631. properties are not accepted (i.e. removed) in a "VFREEBUSY" or "VALARM" "ATTENDEE" property content.
  3632. </p>
  3633. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  3634. <p class="label">Format</p>
  3635. <p class="format">calendarComponent::setProperty( &quot;attendee&quot;, attendeeValue [, params [, propOrderNo ]] )</p>
  3636. <p class="comment">attendeeValue<sup>1</sup> = (string) a <strong>calendar</strong> user address, a URI as defined by
  3637. [RFC 1738] or any other IANA registered form
  3638. for a URI.
  3639. params<sup>2</sup> = (array) ( [CUTYPE] [,MEMBER] [,ROLE] [,PARTSTAT]
  3640. [,RVSP] [,DELEGATED-TO] [,DELEGATED-FROM]
  3641. [,SENT-BY] [,CN] [,DIR] [,LANGUAGE]
  3642. *[,xparams] )
  3643. CUTYPE = "CUTYPE" =&gt; &quot;INDIVIDUAL&quot;
  3644. (An individual, <b>Default</b>)
  3645. / &quot;GROUP&quot;
  3646. (A group of individuals)
  3647. / &quot;RESOURCE&quot;
  3648. (A physical resource)
  3649. / &quot;ROOM&quot;
  3650. (A room resource)
  3651. / &quot;UNKNOWN&quot;
  3652. (Otherwise not known)
  3653. / (string) x-name
  3654. (Experimental type)
  3655. / iana-token
  3656. (string) (Other IANA registered type)
  3657. MEMBER = "MEMBER" =&gt; array( *[ (string) &quot;single member
  3658. of the group or list membership&quot;])
  3659. ROLE = "ROLE" =&gt; &quot;CHAIR&quot;
  3660. (Indicates chair of the <strong>calendar</strong>
  3661. entity)
  3662. / &quot;REQ-PARTICIPANT&quot;
  3663. (required participation, <b>Default</b>)
  3664. / &quot;OPT-PARTICIPANT&quot;
  3665. (optional participation)
  3666. / &quot;NON-PARTICIPANT&quot;
  3667. (information purposes only)
  3668. / (string) x-name
  3669. (Experimental role)
  3670. / (string) iana-token
  3671. (Other IANA role)
  3672. PARTSTAT = &quot;PARTSTAT&quot; =&gt; &quot;NEEDS-ACTION&quot;
  3673. (Event needs action, <b>Default</b>)
  3674. / &quot;ACCEPTED&quot;
  3675. (Event accepted)
  3676. / &quot;DECLINED&quot;
  3677. (Event declined)
  3678. / &quot;TENTATIVE&quot;
  3679. (Event tentatively accepted)
  3680. / &quot;DELEGATED&quot;
  3681. (Event delegated)
  3682. / &quot;NEEDS-ACTION&quot;
  3683. (To-do needs action, <b>Default</b>)
  3684. / &quot;ACCEPTED&quot;
  3685. (To-do accepted)
  3686. / &quot;DECLINED&quot;
  3687. (To-do declined)
  3688. / &quot;TENTATIVE&quot;
  3689. (To-do tentatively accepted)
  3690. / &quot;DELEGATED&quot;
  3691. (To-do delegated)
  3692. / &quot;COMPLETED&quot;
  3693. (To-do completed.
  3694. <a href="#COMPLETED">COMPLETED</a> property
  3695. has date/time completed)
  3696. / &quot;IN-PROCESS&quot;
  3697. (To-do in process of being completed)
  3698. / &quot;NEEDS-ACTION&quot;
  3699. (Journal needs action, <b>Default</b>)
  3700. / &quot;ACCEPTED&quot;
  3701. (Journal accepted)
  3702. / &quot;DECLINED&quot;
  3703. (Journal declined)
  3704. / (string) x-name
  3705. (Experimental status)
  3706. / (string) iana-token
  3707. (Other IANA registered status)
  3708. RSVP = &quot;RSVP&quot; =&gt; (string) &quot;TRUE&quot;
  3709. / &quot;FALSE&quot;, <b>Default</b> (reply expectation)
  3710. DELEGATED-TO = &quot;DELEGATED-TO&quot; =&gt; array(*[(string) &quot;single <strong>calendar</strong> user
  3711. to specified by the property
  3712. has delegated participation&quot;])
  3713. DELEGATED-FROM = &quot;DELEGATED-FROM&quot; =&gt; array( *[ (string) &quot;single <strong>calendar</strong> user that
  3714. have delegated their
  3715. participation to the
  3716. <strong>calendar</strong> user specified
  3717. by the property&quot; ] )
  3718. SENT-BY = &quot;SENT-BY&quot; =&gt; (string) single <strong>calendar</strong> user that is
  3719. acting on behalf
  3720. of the <strong>calendar</strong> user
  3721. specified by the property&quot;
  3722. LANGUAGE = &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot; (applies to the CN parameter value)
  3723. CN = &quot;CN&quot; =&gt; (string) &quot;common name to be associated with the <strong>calendar</strong>
  3724. user specified by the property&quot;
  3725. DIR = &quot;DIR&quot; =&gt; (string) &quot;reference to a directory entry associated with
  3726. the <strong>calendar</strong> user specified by the property&quot;
  3727. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  3728. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  3729. lang<sup>*</sup> = as defined in [RFC5546]</p>
  3730. <p>
  3731. See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
  3732. </p>
  3733. <p class="label">Example</p>
  3734. <p class="example">
  3735. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE,
  3736. &quot;attendee1@ical.net&quot;
  3737. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$ATTENDEE,
  3738. &quot;attendee2@ical.net&quot;,
  3739. array( &quot;cutype&quot; =&gt; &quot;INDIVIDUAL&quot;,
  3740. &quot;member&quot; =&gt; array( &quot;member1@ical.net&quot;,
  3741. &quot;member2@ical.net&quot;,
  3742. &quot;member3@ical.net&quot; ),
  3743. &quot;role&quot; =&gt; &quot;CHAIR&quot;,
  3744. &quot;PARTSTAT&quot; =&gt; &quot;ACCEPTED&quot;,
  3745. &quot;RSVP&quot; =&gt; &quot;TRUE&quot;,
  3746. &quot;DELEgated-to&quot; =&gt; array( &quot;part1@ical.net&quot;,
  3747. &quot;part2@ical.net&quot;,
  3748. &quot;part3@ical.net&quot; ),
  3749. &quot;delegateD-FROM&quot; =&gt;array( &quot;cio@ical.net&quot;,
  3750. &quot;vice.cio@ical.net&quot;),
  3751. &quot;SENT-BY&quot; =&gt; &quot;secretary@ical.net&quot;,
  3752. &quot;LANGUAGE&quot; =&gt; &quot;us-EN&quot;,
  3753. &quot;CN&quot; =&gt; &quot;John Doe&quot;,
  3754. &quot;DIR&quot; =&gt; &quot;http://www.ical.net/info.doc&quot;,
  3755. &quot;x-agenda&quot; =&gt; &quot;status reports&quot;, <span class="comment">// xparam</span>
  3756. &quot;x-length&quot; =&gt; &quot;15 min&quot; )); <span class="comment">// xparam</span>
  3757. </p>
  3758. <br>
  3759. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3760. <a name="CATEGORIES"></a><h3>3.2.8 CATEGORIES</h3>
  3761. <p>
  3762. This property defines the categories for a <strong>calendar</strong> component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
  3763. </p>
  3764. <p>
  3765. The value type for CATEGORIES is TEXT.
  3766. </p>
  3767. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) CATEGORIES values.</p>
  3768. <p>
  3769. To ease up usage, kigkonsult\iCalcreator\util\util::$CATEGORIES as used in code snippets is available.
  3770. </p>
  3771. <h5>Create CATEGORIES</h5>
  3772. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3773. <p class="label">Format</p>
  3774. <p class="format">calendarComponent::createCategories()</p>
  3775. <p class="label">Example</p>
  3776. <p class="example">
  3777. $str = $component-&gt;createCategories();
  3778. </p>
  3779. <h5>Delete CATEGORIES</h5>
  3780. <p>Remove CATEGORIES from component.</p>
  3781. <p class="label">Format</p>
  3782. <p class="format">calendarComponent::deleteProperty( &quot;CATEGORIES&quot; )</p>
  3783. <p class="label">Example 1</p>
  3784. <p>Delete (single/first) CATEGORIES property</p>
  3785. <p class="example">
  3786. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CATEGORIES );
  3787. </p>
  3788. <p class="label">Example 2</p>
  3789. <p>Delete CATEGORIES property no 2.</p>
  3790. <p class="example">
  3791. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CATEGORIES, 2 );
  3792. </p>
  3793. <p class="label">Example 3</p>
  3794. <p>Deleting all CATEGORIES properties.</p>
  3795. <p class="example">
  3796. while( $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CATEGORIES ))
  3797. continue;
  3798. </p>
  3799. <h5>Get CATEGORIES</h5>
  3800. <p>If set, returns property value(-s), otherwise bool false.</p>
  3801. <p class="label">Format 1</p>
  3802. <p class="format">calendarComponent::getProperty( &quot;CATEGORIES&quot; )</p>
  3803. <p class="comment">output = categoryValue<sup>1</sup></p>
  3804. <p class="label">Format 2</p>
  3805. <p class="format">calendarComponent::getProperty( &quot;CATEGORIES&quot;, propOrderNo/false , true )</p>
  3806. <p class="comment">propOrderNo = (int) specific property value</p>
  3807. <p class="comment">output = array( &quot;value&quot; =&gt; categories<sup>1</sup>
  3808. , &quot;params&quot; =&gt; params<sup>3</sup> )</p>
  3809. <p class="label">Format 3</p>
  3810. <p class="format">calendarComponent::getProperty( &quot;CATEGORIES&quot;, propOrderNo )</p>
  3811. <p class="comment">propOrderNo = (int) specific property value</p>
  3812. <p class="comment">Get propOrderNo CATEGORIES</p>
  3813. <p class="label">Example</p>
  3814. <p class="example">
  3815. $categories = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$CATEGORIES );
  3816. </p>
  3817. <h5>Set CATEGORIES</h5>
  3818. <p>Insert property value.</p>
  3819. <p>
  3820. In spite of the fact that CATEGORIES may contain a (comma separated) list of values,
  3821. a strong recommendation is to split a CATEGORIES &quot;list&quot; into multiple single CATEGORIES entries.
  3822. </p>
  3823. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  3824. <p class="label">Format</p>
  3825. <p class="format">calendarComponent::setProperty( &quot;categories&quot;, categories [, params [, propOrderNo ]] )</p>
  3826. <p class="comment">categories<sup>1</sup> = (string) categoryValue / (array) ( *categoryValue )
  3827. categoryValue<sup>2</sup> = (string) textual categories or subtypes of the <strong>calendar</strong> component,
  3828. can be specified as a list of categories
  3829. separated by the COMMA character
  3830. params<sup>3</sup> = (array) ( [&quot;LANGUAGE&quot; =&gt; (string) &quot;&lt;lang<sup>*</sup>&gt;&quot;] *[, xparams] )
  3831. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  3832. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  3833. lang<sup>*</sup> = as defined in [RFC5546]</p>
  3834. <p class="label">Example</p>
  3835. <p class="example">
  3836. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CATEGORIES,
  3837. &quot;project_x&quot; );
  3838. </p>
  3839. <br>
  3840. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3841. <a name="CLASS"></a><h3>3.2.9 CLASS</h3>
  3842. <p>
  3843. This property defines the access classification for a <strong>calendar</strong> component and is OPTIONAL
  3844. and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
  3845. </p>
  3846. <p>
  3847. To ease up usage, kigkonsult\iCalcreator\util\util::$CLASS as used in code snippets is available.
  3848. </p>
  3849. <h5>Create CLASS</h5>
  3850. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3851. <p class="label">Format</p>
  3852. <p class="format">calendarComponent::createClass()</p>
  3853. <p class="label">Example</p>
  3854. <p class="example">
  3855. $str = $component-&gt;createClass();
  3856. </p>
  3857. <h5>Delete CLASS</h5>
  3858. <p>Remove CLASS from component.</p>
  3859. <p class="label">Format</p>
  3860. <p class="format">calendarComponent::deleteProperty( &quot;CLASS&quot; )</p>
  3861. <p class="label">Example</p>
  3862. <p class="example">
  3863. $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CLASS );
  3864. </p>
  3865. <h5>Get CLASS</h5>
  3866. <p>If set, returns property value, otherwise bool false.</p>
  3867. <p class="label">Format 1</p>
  3868. <p class="format">calendarComponent::getProperty( &quot;CLASS&quot; )</p>
  3869. <p class="comment">output = classValue<sup>1</sup></p>
  3870. <p class="label">Format 2</p>
  3871. <p class="format">calendarComponent::getProperty( &quot;CLASS&quot;, false , true )</p>
  3872. <p class="comment">output = array &quot;value&quot; =&gt; classValue<sup>1</sup>
  3873. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  3874. <p class="label">Example</p>
  3875. <p class="example">
  3876. $class = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$CLASS );
  3877. </p>
  3878. <h5>Set CLASS</h5>
  3879. <p>Insert property value.</p>
  3880. <p class="label">Format</p>
  3881. <p class="format">calendarComponent::setProperty( &quot;class&quot;, classvalue [, xparams ] )</p>
  3882. <p class="comment">classvalue<sup>1</sup> = &quot;PUBLIC&quot;
  3883. / &quot;PRIVATE&quot;
  3884. / &quot;CONFIDENTIAL&quot;
  3885. / (string) iana-token
  3886. / (string) x-name
  3887. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  3888. </p>
  3889. <p class="label">Example</p>
  3890. <p class="example">
  3891. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CLASS,
  3892. &quot;CONFIDENTIAL&quot; );
  3893. </p>
  3894. <br>
  3895. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3896. <a name="COMMENT"></a><h3>3.2.10 COMMENT</h3>
  3897. <p>
  3898. This property specifies non-processing information intended to provide a comment to the <strong>calendar</strong> user
  3899. and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VFREEBUSY">VFREEBUSY</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
  3900. </p>
  3901. <p>The value type for COMMENT is TEXT.</p>
  3902. <p>
  3903. To ease up usage, kigkonsult\iCalcreator\util\util::$COMMENT as used in code snippets is available.
  3904. </p>
  3905. <h5>Create COMMENT</h5>
  3906. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3907. <p class="label">Format</p>
  3908. <p class="format">calendarComponent::createComment()</p>
  3909. <p class="label">Example</p>
  3910. <p class="example">
  3911. $str = $component-&gt;createComment();
  3912. </p>
  3913. <h5>Delete COMMENT</h5>
  3914. <p>Remove COMMENT from component.</p>
  3915. <p class="label">Format</p>
  3916. <p class="format">calendarComponent::deleteProperty( &quot;COMMENT&quot; )</p>
  3917. <p class="label">Example 1</p>
  3918. <p>Delete (single/first) COMMENT property</p>
  3919. <p class="example">
  3920. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$COMMENT );
  3921. </p>
  3922. <p class="label">Example 2</p>
  3923. <p>Delete COMMENT property no 2.</p>
  3924. <p class="example">
  3925. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$COMMENT, 2 );
  3926. </p>
  3927. <p class="label">Example 3</p>
  3928. <p>Deleting all COMMENT properties.</p>
  3929. <p class="example">
  3930. while( $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$COMMENT ))
  3931. continue;
  3932. </p>
  3933. <h5>Get COMMENT</h5>
  3934. <p>If set, returns property value, otherwise bool false.</p>
  3935. <p class="label">Format 1</p>
  3936. <p class="format">calendarComponent::getProperty( &quot;COMMENT&quot; )</p>
  3937. <p class="comment">output = commentValue<sup>1</sup></p>
  3938. <p class="label">Format 2</p>
  3939. <p class="format">calendarComponent::getProperty( &quot;COMMENT&quot;, propOrderNo/false , true )</p>
  3940. <p class="comment">propOrderNo = (int) specific property value</p>
  3941. <p class="comment">output = array( &quot;value&quot; =&gt; commentValue<sup>1</sup>
  3942. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  3943. <p class="label">Format 3</p>
  3944. <p class="format">calendarComponent::getProperty( &quot;COMMENT&quot;, propOrderNo )</p>
  3945. <p class="comment">propOrderNo = (int) specific property value</p>
  3946. <p class="comment">Get propOrderNo COMMENT</p>
  3947. <p class="label">Example</p>
  3948. <p class="example">
  3949. $comment = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$COMMENT );
  3950. </p>
  3951. <h5>Set COMMENT</h5>
  3952. <p>Insert property value. Parameters will be ordered as prescribed in [RFC5545].</p>
  3953. <p class="label">Format</p>
  3954. <p class="format">calendarComponent::setProperty( &quot;comment&quot;, commentValue [, params [, propOrderNo ]] )</p>
  3955. <p class="comment">commentValue<sup>1</sup> = (string) Value type Text
  3956. params<sup>2</sup> = (array) (
  3957. [ &quot;ALTREP&quot; =&gt; (string) &quot;&lt;an alternate text representation, URI&gt;&quot;]
  3958. [, &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;]
  3959. *[, xparams ] )
  3960. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  3961. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  3962. lang<sup>*</sup> = as defined in [RFC5546]</p>
  3963. <p class="label">Example</p>
  3964. <p class="example">
  3965. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$COMMENT,
  3966. &quot;this is a comment&quot; );
  3967. </p>
  3968. <br>
  3969. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3970. <a name="COMPLETED"></a><h3>3.2.11 COMPLETED</h3>
  3971. <p>
  3972. This property defines the date and time that a <a href="#VTODO">VTODO</a> was actually completed and is OPTIONAL and MUST NOT occur more than once.
  3973. </p>
  3974. <p>The value type for COMPLETED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.</p>
  3975. <p>For methods and formatting, explore the <a href="#CREATED">CREATED</a> property.</p>
  3976. <p>
  3977. To ease up usage, kigkonsult\iCalcreator\util\util::$CREATED as used in code snippets is available.
  3978. </p>
  3979. <br>
  3980. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  3981. <a name="CONTACT"></a><h3>3.2.12 CONTACT</h3>
  3982. <p>
  3983. The property is used to represent textual contact information or alternately a reference to textual contact information
  3984. associated with the <strong>calendar</strong> component. The property is OPTIONAL and MUST NOT occur more than once in
  3985. a VFREEBUSY or MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and
  3986. <a href="#VJOURNAL">VJOURNAL</a> components.
  3987. </p>
  3988. <p>The value type for CONTACT is TEXT.</p>
  3989. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) CONTACT values.</p>
  3990. <p>You can export <strong>calendar</strong> CONTACT values as <a href="#iCal2vCards">vCards</a>.
  3991. <p>
  3992. To ease up usage, kigkonsult\iCalcreator\util\util::$CONTACT as used in code snippets is available.
  3993. </p>
  3994. <h5>Create CONTACT</h5>
  3995. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  3996. <p class="label">Format</p>
  3997. <p class="format">calendarComponent::createContact()</p>
  3998. <p class="label">Example</p>
  3999. <p class="example">
  4000. $str = $component-&gt;createContact();
  4001. </p>
  4002. <h5>Delete CONTACT</h5>
  4003. <p>Remove CONTACT from component.</p>
  4004. <p class="label">Format</p>
  4005. <p class="format">calendarComponent::deleteProperty( &quot;CONTACT&quot; )</p>
  4006. <p class="label">Example 1</p>
  4007. <p>Delete (single/first) CONTACT property<p>
  4008. <p class="example">
  4009. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CONTACT );
  4010. </p>
  4011. <p class="label">Example 2</p>
  4012. <p>Delete CONTACT property no 2.</p>
  4013. <p class="example">
  4014. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CONTACT, 2 );
  4015. </p>
  4016. <p class="label">Example 3</p>
  4017. <p>Deleting all CONTACT properties.</p>
  4018. <p class="example">
  4019. while( $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CONTACT ))
  4020. continue;
  4021. </p>
  4022. <h5>Get CONTACT</h5>
  4023. <p>If set, returns property value, otherwise bool false.</p>
  4024. <p class="label">Format 1</p>
  4025. <p class="format">calendarComponent::getProperty( &quot;CONTACT&quot; )</p>
  4026. <p class="comment">output = contactValue<sup>1</sup></p>
  4027. <p class="label">Format 2</p>
  4028. <p class="format">calendarComponent::getProperty( &quot;CONTACT&quot;, propOrderNo/false , true )</p>
  4029. <p class="comment">propOrderNo = (int) specific property value</p>
  4030. <p class="comment">output = array( &quot;value&quot; =&gt; contactValue<sup>1</sup>
  4031. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  4032. <p class="label">Format 3</p>
  4033. <p class="format">calendarComponent::getProperty( &quot;CONTACT&quot;, propOrderNo )</p>
  4034. <p class="comment">propOrderNo = (int) specific property value</p>
  4035. <p class="comment">Get propOrderNo CONTACT</p>
  4036. <p class="label">Example</p>
  4037. <p class="example">
  4038. $contact = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$CONTACT );
  4039. </p>
  4040. <h5>Set CONTACT</h5>
  4041. <p>Insert property value. Parameters will be ordered as prescribed in [RFC5545].</p>
  4042. <p class="label">Format</p>
  4043. <p class="format">calendarComponent::setProperty( &quot;contact&quot;, contactValue [, params [, propOrderNo ]] )</p>
  4044. <p class="comment">contactValue<sup>1</sup> = (string) Value type TEXT
  4045. params<sup>2</sup> = (array) (
  4046. [ &quot;ALTREP&quot; =&gt; (string) &quot;&lt;an alternate text representation, URI&gt;&quot;]
  4047. [, &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;]
  4048. *[, xparams] )
  4049. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  4050. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  4051. lang<sup>*</sup> = as defined in [RFC5546]</p>
  4052. <p class="label">Example</p>
  4053. <p class="example">
  4054. $c-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CONTACT,
  4055. &quot;tel 012-34 56 789&quot; )
  4056. </p>
  4057. <br>
  4058. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4059. <a name="CREATED"></a><h3>3.2.13 CREATED</h3>
  4060. <p>
  4061. This property specifies the date and time that the <strong>calendar</strong> information was created by
  4062. the <strong>calendar</strong> user agent in the <strong>calendar</strong> store.
  4063. Note: This is analogous to the creation date and time for a file in the file system.
  4064. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
  4065. <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
  4066. </p>
  4067. <p>The value type for CREATED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.</p>
  4068. <p>
  4069. To ease up usage, kigkonsult\iCalcreator\util\util::$CREATED as used in code snippets is available.
  4070. </p>
  4071. <h5>Create CREATED</h5>
  4072. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  4073. <p class="label">Format</p>
  4074. <p class="format">calendarComponent::createCreated()</p>
  4075. <p class="label">Example</p>
  4076. <p class="example">
  4077. $str = $component-&gt;createCreated();
  4078. </p>
  4079. <h5>Delete CREATED</h5>
  4080. <p>Remove CREATED from component.</p>
  4081. <p class="label">Format</p>
  4082. <p class="format">calendarComponent::deleteProperty( &quot;CREATED&quot; )</p>
  4083. <p class="label">Example</p>
  4084. <p class="example">
  4085. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$CREATED );
  4086. </p>
  4087. <h5>Get CREATED</h5>
  4088. <p>If set, returns property value, otherwise bool false.</p>
  4089. <p class="label">Format 1</p>
  4090. <p class="format">calendarComponent::getProperty( &quot;CREATED&quot; )</p>
  4091. <p class="comment">output = createdDate<sup>1</sup></p>
  4092. <p class="label">Format 2</p>
  4093. <p class="format">calendarComponent::getProperty( &quot;CREATED&quot;, false , true )</p>
  4094. <p class="comment">output = array( &quot;value&quot; =&gt; createdDate<sup>1</sup>
  4095. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  4096. <p class="label">Example</p>
  4097. <p class="example">
  4098. $created = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$CREATED );
  4099. </p>
  4100. <h5>Set CREATED</h5>
  4101. <p>
  4102. Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
  4103. if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
  4104. Notice, youn can use the <a href="#transformDateTime">timezoneHandler::transformDateTime()</a> method to change a local datetime to UTC datetime.
  4105. </p>
  4106. <p>The current UTC date-time is set if invoked without parameters.</p>
  4107. <p class="label">Format</p>
  4108. <p class="format">calendarComponent::setProperty( &quot;created&quot;, [ createdDate [, xparams ]] )</p>
  4109. <p class="comment">createdDate<sup>1</sup> = (array) ( &quot;year&quot; =&gt; (int) year
  4110. , &quot;month&quot; =&gt; (int) month
  4111. , &quot;day&quot; =&gt; (int) day
  4112. [, &quot;hour&quot; =&gt; (int) hour
  4113. , &quot;min&quot; =&gt; (int) min
  4114. , &quot;sec&quot; =&gt; (int) sec
  4115. , &quot;tz&quot; =&gt; offset ]] )
  4116. createdDate = (int) year
  4117. , (int) month
  4118. , (int) day
  4119. [, (int) hour
  4120. , (int) min
  4121. , (int) sec ]
  4122. createdDate = (array) ( (int) year
  4123. , (int) month
  4124. , (int) day
  4125. [, (int) hour
  4126. , (int) min
  4127. , (int) sec
  4128. [, offset ]] )
  4129. createdDate = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp ) // <span class="comment">results in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4130. createdDate = (string) date/datetime string<sup>*</sup>
  4131. offset = (int) (+/-)HHmm[ss] // <span class="comment">(arr/str) local date + UTC offset will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4132. xparams<sup>2</sup> = array( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  4133. <br>date/datetime string<sup>*</sup> recommended formats
  4134. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  4135. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  4136. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  4137. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  4138. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  4139. trailing characters (digits), if exists, will be interpreted as offset
  4140. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  4141. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  4142. <p class="label">Example 1</p>
  4143. <p class="example">
  4144. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  4145. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  4146. $vtodo = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTODO );
  4147. $vtodo-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CREATED,
  4148. 2006, 8, 11, 14, 30, 35 ); // <span class="comment">11 august 2006 14.30.35 UTC</span>
  4149. </p>
  4150. <p class="label">Example 2</p>
  4151. <p class="example">
  4152. $date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
  4153. &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
  4154. // <span class="comment">local date + UTC offset will result in a <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4155. $vtodo-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CREATED,
  4156. $date );
  4157. </p>
  4158. <p class="label">Example 3</p>
  4159. <p class="example">
  4160. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$CREATED ); // <span class="comment">current UTC date-time is set if invoked without parameters</span>
  4161. </p>
  4162. <br>
  4163. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4164. <a name="DESCRIPTION"></a><h3>3.2.14 DESCRIPTION</h3>
  4165. <p>
  4166. This property provides a more complete textual description of the <strong>calendar</strong> component,
  4167. than that provided by the <a href="#SUMMARY">SUMMARY</a> property (, analogous to a mail BODY).
  4168. The property is OPTIONAL, MUST NOT occur more than once within <a href="#VEVENT">VEVENT</a>,
  4169. <a href="#VTODO">VTODO</a> or <a href="#VALARM">VALARM</a> (PROCEDURE) but can be specified multiple
  4170. times within a <a href="#VJOURNAL">VJOURNAL</a> <strong>calendar</strong> component. The property is REQUIRED in <a href="#VALARM">VALARM</a> (DISPLAY, EMAIL) component.
  4171. </p>
  4172. <p>The value type for DESCRIPTION is TEXT.</p>
  4173. <p>
  4174. To ease up usage, kigkonsult\iCalcreator\util\util::$DESCRIPTION as used in code snippets is available.
  4175. </p>
  4176. <h5>Create DESCRIPTION</h5>
  4177. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  4178. <p class="label">Format</p>
  4179. <p class="format">calendarComponent::createDescription()</p>
  4180. <p class="label">Example</p>
  4181. <p class="example">
  4182. $str = $component-&gt;createDescription();
  4183. </p>
  4184. <h5>Delete DESCRIPTION</h5>
  4185. <p>Remove DESCRIPTION from component.</p>
  4186. <p class="label">Format</p>
  4187. <p class="format">calendarComponent::deleteProperty( &quot;DESCRIPTION&quot; )</p>
  4188. <p class="label">Example 1</p>
  4189. <p>Delete (single/first) DESCRIPTION property.</p>
  4190. <p class="example">
  4191. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION );
  4192. </p>
  4193. <p class="label">Example 2</p>
  4194. <p>Delete DESCRIPTION property no 2.</p>
  4195. <p class="example">
  4196. $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION, 2 );
  4197. </p>
  4198. <p class="label">Example 3</p>
  4199. <p>Deleting all DESCRIPTION properties.</p>
  4200. <p class="example">
  4201. while( $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION ))
  4202. continue;
  4203. </p>
  4204. <h5>Get DESCRIPTION</h5>
  4205. <p>If set, returns property value(-s), otherwise bool false.</p>
  4206. <p class="label">Format 1</p>
  4207. <p class="format">calendarComponent::getProperty( &quot;DESCRIPTION&quot; )</p>
  4208. <p class="comment">output = descriptionValue<sup>1</sup></p>
  4209. <p class="label">Format 2</p>
  4210. <p class="format">calendarComponent::getProperty( &quot;DESCRIPTION&quot;, false , true )</p>
  4211. <p class="comment">output = array( &quot;value&quot; =&gt; descriptionValue<sup>1</sup>
  4212. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  4213. <p class="label">Example</p>
  4214. <p class="example">
  4215. $description = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION );
  4216. </p>
  4217. <h5>Set DESCRIPTION</h5>
  4218. <p>Insert property value.</p>
  4219. <br>
  4220. Parameters will be ordered as prescribed in [RFC5545].
  4221. <p class="label">Format</p>
  4222. <p class="format">calendarComponent::setProperty( &quot;description&quot;, descriptionValue [, params [, propOrderNo ]] )</p>
  4223. <p class="comment">descriptionValue<sup>1</sup> = (string) Value type TEXT
  4224. params<sup>2</sup> = (array) (
  4225. [ &quot;ALTREP&quot; =&gt; (string) &quot;&lt;an alternate text representation, URI&gt;&quot;]
  4226. [, &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;]
  4227. *[, xparams ] )
  4228. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  4229. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  4230. lang<sup>*</sup> = as defined in [RFC5546]</p>
  4231. <p class="label">Example</p>
  4232. <p class="example">
  4233. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DESCRIPTION,
  4234. &quot;This is a description&quot; );
  4235. </p>
  4236. <br>
  4237. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4238. <a name="DTEND"></a><h3>3.2.15 DTEND</h3>
  4239. <p>
  4240. This property specifies the date and time that a <strong>calendar</strong> component ends.
  4241. The property is OPTIONAL and MUST NOT occur more than once in VFREEBUSY and VEVENT. In VEVENT, it only occurs
  4242. if DURATION NOT occurs.
  4243. </p>
  4244. <p>
  4245. The default value type for DTEND is DATE-TIME, can be set to a DATE value type.
  4246. </p>
  4247. <p>
  4248. To ease up usage, kigkonsult\iCalcreator\util\util::$DTEND as used in code snippets is available.
  4249. </p>
  4250. <p class="quotes">
  4251. The value type of the "DTEND" or "DUE" properties MUST match the value type of "DTSTART" property as defined in [RFC5545])
  4252. </p>
  4253. <p>
  4254. Notice that an end date without a time is in effect midnight of the day before the date,
  4255. so for timeless dates, use the date following the event date for it to be correct.
  4256. For an &quot;all-day event&quot; and using timeless dates, the DTEND is equal DTSTART plus one day,
  4257. example all-day event (2007-12-01)<br>DTSTART;VALUE=DATE:20071201<br> DTEND;VALUE=DATE:20071202.
  4258. </p>
  4259. <h5>Create DTEND</h5>
  4260. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  4261. <p class="label">Format</p>
  4262. <p class="format">calendarComponent::createDtend()</p>
  4263. <p class="label">Example</p>
  4264. <p class="example">
  4265. $str = $component-&gt;createDtend();
  4266. </p>
  4267. <h5>Delete DTEND</h5>
  4268. <p>Remove DTEND from component.</p>
  4269. <p class="label">Format</p>
  4270. <p class="format">calendarComponent::deleteProperty( &quot;DTEND&quot; )</p>
  4271. <p class="label">Example</p>
  4272. <p class="example">
  4273. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$DTEND );
  4274. </p>
  4275. <h5>Get DTEND</h5>
  4276. <p>If set, returns property value, otherwise bool false.</p>
  4277. <p class="label">Format 1</p>
  4278. <p class="format">calendarComponent::getProperty( &quot;DTEND&quot; )</p>
  4279. <p class="comment">output = dtendDate<sup>1</sup></p>
  4280. <p class="label">Format 2</p>
  4281. <p class="format">calendarComponent::getProperty( &quot;DTEND&quot;, false , true )</p>
  4282. <p class="comment">output = array( &quot;value&quot; =&gt; dtendDate<sup>1</sup>
  4283. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  4284. <p class="label">Example</p>
  4285. <p class="example">
  4286. $dtend = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DTEND );
  4287. </p>
  4288. <h5>Set DTEND</h5>
  4289. <p>
  4290. Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
  4291. (in params<sup>2</sup>) otherwise DATE-TIME (default) value type is set.
  4292. </p>
  4293. <p>
  4294. If no timezone parameter (tz or tzidparam below) is set (i.e.local time) and config <a href="#dTZID">TZID</a> is set,
  4295. date-time values will be set WITH timezone from config.
  4296. Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime from one time zone to another.
  4297. </p>
  4298. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  4299. <p class="label">Format</p>
  4300. <p class="format">calendarComponent::setProperty( &quot;dtend&quot;, dtendDate [, params<sup>2</sup> ] )
  4301. <p class="comment">dtendDate<sup>1</sup> = (array) ( &quot;year&quot; =&gt; (int) year
  4302. , &quot;month&quot; =&gt; (int) month
  4303. , &quot;day&quot; =&gt; (int) day
  4304. [, &quot;hour&quot; =&gt; (int) hour
  4305. , &quot;min&quot; =&gt; (int) min
  4306. , &quot;sec&quot; =&gt; (int) sec
  4307. [, &quot;tz&quot; =&gt; tz ]] )
  4308. dtendDate = (int) year
  4309. , (int) month
  4310. , (int) day
  4311. [, (int) hour
  4312. , (int) min
  4313. , (int) sec
  4314. [, tz ]]
  4315. dtendDate = array( (int) year
  4316. , (int) month
  4317. , (int) day
  4318. [, (int) hour
  4319. , (int) min
  4320. , (int) sec
  4321. [, tz ]] )
  4322. dtendDate = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp [,&quot;tz&quot; =&gt; tz])
  4323. // <span class="comment">timestamp without tz will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4324. // <span class="comment">timestamp with tz=offset will result in a local DATE-TIME</span>
  4325. dtendDate = (string) date/datetime string<sup>*</sup>
  4326. // <span class="comment">Within the "VFREEBUSY" <strong>calendar</strong> component,</span>
  4327. // <span class="comment">the time MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4328. tz = (string) &lt;timezone identifier&gt; / offset
  4329. // <span class="comment">timezone will be used as tzidparam (below), if tzidparam not set</span>
  4330. offset = (int) (+/-)HHmm[ss] // <span class="comment">(arr/str) local date + UTC offset</span>
  4331. // <span class="comment">will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4332. params<sup>2</sup> = (array) ([ tzidparam/datetimeparam/dateparam ] *[,xparams])
  4333. tzidparam = kigkonsult\iCalcreator\util\util::$TZID =&gt; (string) &lt;timezone identifier&gt;
  4334. // <span class="comment">output as local date-time with timezone identifier</span>
  4335. // <span class="comment">if tzidparam=&quot;GMT&quot;/&quot;UTC&quot; then</span>
  4336. // <span class="comment">output date-time is suffixed by 'Z'</span>
  4337. datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="comment">default, output as date-time</span>
  4338. dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="comment">output as DATE, ex. all-day event</span>
  4339. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  4340. <br>date/datetime string<sup>*</sup> recommended formats
  4341. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  4342. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  4343. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  4344. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  4345. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  4346. trailing characters (digits), if exists, will be interpreted as offset/timezone
  4347. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  4348. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  4349. <p class="label">Example 1</p>
  4350. <p class="example">
  4351. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTEND,
  4352. 2006, 8, 11, 16, 30, 0 ); <span class="comment">// 11 august 2006 16.30.00 local date</span>
  4353. </p>
  4354. <p class="label">Example 2</p>
  4355. <p class="example">
  4356. $vfreebusy-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTEND,
  4357. 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
  4358. <span class="comment">// 11 august 2006 16.30.00 -040000</span>
  4359. <span class="comment">// local date + UTC offset will result in a <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4360. </p>
  4361. <p class="label">Example 3</p>
  4362. <p class="example">
  4363. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTEND,
  4364. array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 ),
  4365. array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
  4366. <span class="comment">// end of an all-day event</span>
  4367. </p>
  4368. <p class="label">Example 4</p>
  4369. <p class="example">
  4370. $calendar->setConfig( kigkonsult\iCalcreator\util\util::$TZID, 'Europe/Stockholm' );
  4371. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTEND,
  4372. 2006, 8, 11, 7, 30, 0 );
  4373. <span class="comment">// output: DTEND;TZID=Europe/Stockholm:20060811T073000</span>
  4374. </p>
  4375. <br>
  4376. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4377. <a name="DTSTAMP"></a><h3>3.2.16 DTSTAMP</h3>
  4378. <p>
  4379. The property indicates the date/time the instance of the <strong>iCalendar</strong> object was created and is OPTIONAL and
  4380. MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>
  4381. and <a href="#VFREEBUSY">VFREEBUSY</a> components. However, DTSTAMP is <b>AUTOMATICALL§Y GENERATED</b> in iCalcreator when creating a component.
  4382. </p>
  4383. <p>
  4384. DTSTAMP may be required when importing iCal files into some <strong>calendar</strong> software<br>(MS etc.),
  4385. as well as (<strong>calendar</strong>) <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and<br>"X-WR-TIMEZONE",
  4386. <a href="#METHOD">METHOD</a> property (value PUBLISH etc.) and the (also auto created) <a href="#UID">UID</a> property.
  4387. </p>
  4388. <p>The value type for DTSTAMP is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.</p>
  4389. <p>For methods and formatting, explore the <a href="#CREATED">CREATED</a> property.</p>
  4390. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) DTSTAMP values.</p>
  4391. <p>
  4392. To ease up usage, kigkonsult\iCalcreator\util\util::$DTSTAMP is available.
  4393. </p>
  4394. <br>
  4395. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4396. <a name="DTSTART"></a><h3>3.2.17 DTSTART</h3>
  4397. <p>
  4398. This property specifies when the <strong>calendar</strong> component begins.
  4399. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
  4400. <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
  4401. The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
  4402. </p>
  4403. <p>The default value type for DTSTART is DATE-TIME, can be set to a DATE value type.</p>
  4404. <p>
  4405. For an &quot;all-day event&quot; and using timeless dates, example (2007-12-01)<br>
  4406. DTSTART;VALUE=DATE:20071201<br>
  4407. DTEND;VALUE=DATE:20071202. // <span class="comment">opt., in effect midnight of the day <u>before</u> the date!!</span>
  4408. </p>
  4409. <p>For methods and formatting, explore the <a href="#DTEND">DTEND</a> property.</p>
  4410. <p>
  4411. To ease up usage, kigkonsult\iCalcreator\util\util::$DTSTART is available.
  4412. </p>
  4413. <br>
  4414. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4415. <a name="DUE"></a><h3>3.2.18 DUE</h3>
  4416. <p>
  4417. This property defines the date and time when a <a href="#VTODO">VTODO</a> is expected to be completed
  4418. and is OPTIONAL and MUST NOT occur more than once and only if DURATION NOT occurs.
  4419. </p>
  4420. <p>
  4421. The default value type for DUE is DATE-TIME, can be set to a DATE value type.
  4422. </p>
  4423. <p class="quotes">
  4424. The value type of the "DTEND" or "DUE" properties MUST match the value type of "DTSTART" property as defined in [RFC5545])
  4425. </p>
  4426. <p>For methods and formatting, explore the <a href="#DTEND">DTEND</a> property.</p>
  4427. <p>
  4428. To ease up usage, kigkonsult\iCalcreator\util\util::$DUE is available.
  4429. </p>
  4430. <br>
  4431. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4432. <a name="DURATION"></a><h3>3.2.19 DURATION</h3>
  4433. <p>The property specifies a positive duration of time.</p>
  4434. <dl>
  4435. <dt>In a <a href="#VEVENT">VEVENT</a>
  4436. <dd>it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DTEND. If one occurs, so MUST NOT the other.<br>
  4437. <dt>In a <a href="#VTODO">VTODO</a>
  4438. <dd>it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DUE. If one occurs, so MUST NOT the other.<br>
  4439. <dt>In a <a href="#VFREEBUSY">VFREEBUSY</a>
  4440. <dd>it is OPTIONAL and MUST NOT occur more than once. ([RFC2445])<br>
  4441. <dd>it can not appear. ([RFC5545])<br>
  4442. <dt>In a <a href="#VALARM">VALARM</a>
  4443. <dd>it is OPTIONAL and MUST NOT occur more than once and MUST occur in pair with TRIGGER. If one occurs, so MUST the other.
  4444. </dl>
  4445. <p>
  4446. If any hour/minute/second duration part is set, all parts are included in output (ex. one hour duration: &quot;PT1H0M0S&quot;).
  4447. </p>
  4448. <p>
  4449. To ease up usage, kigkonsult\iCalcreator\util\util::$DURATION as used in code snippets is available.
  4450. </p>
  4451. <h5>Create DURATION</h5>
  4452. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  4453. <p class="label">Format</p>
  4454. <p class="format">calendarComponent::createDuration()</p>
  4455. <p class="label">Example</p>
  4456. <p class="example">
  4457. $str = $component-&gt;createDuration();
  4458. </p>
  4459. <h5>Delete DURATION</h5>
  4460. <p>Remove DURATION from component.</p>
  4461. <p class="label">Format</p>
  4462. <p class="format">calendarComponent::deleteProperty( &quot;DURATION&quot; )</p>
  4463. <p class="label">Example</p>
  4464. <p class="example">
  4465. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$DURATION );
  4466. </p>
  4467. <h5>Get DURATION</h5>
  4468. <p>If set, returns property value, otherwise bool false.</p>
  4469. <p class="label">Format 1</p>
  4470. <p class="format">calendarComponent::getProperty( &quot;DURATION&quot; )</p>
  4471. <p class="comment">output = duration<sup>1</sup></p>
  4472. <p class="label">Format 2</p>
  4473. <p class="format">calendarComponent::getProperty( &quot;DURATION&quot;, false , true )</p>
  4474. <p class="comment">output = array( &quot;value&quot; =&gt; duration<sup>1</sup>
  4475. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  4476. <p class="label">Example</p>
  4477. <p class="example">
  4478. $duration = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$DURATION );
  4479. </p>
  4480. <p class="label">option</p>
  4481. <p>
  4482. If a 4th argument is used and set to true, returned output is in a DATE-TIME
  4483. output format (like <a href="#DTEND">DTEND</a> / <a href="#DUE">DUE</a>), based on
  4484. <a href="#DTSTART">DTSTART</a> value with the added DURATION value (incl. opt. timezone).
  4485. </p>
  4486. <h5>Set DURATION</h5>
  4487. <p>Insert property value.</p>
  4488. <p class="label">Format</p>
  4489. <p class="format">calendarComponent::setProperty( &quot;duration&quot;, duration [, xparams ] )</p>
  4490. <p class="comment">
  4491. duration<sup>1</sup> = (array) ( &quot;week&quot; =&gt; (int) week )
  4492. duration<sup>1</sup> = array ( &quot;day&quot; =&gt; (int) day )
  4493. [, &quot;hour&quot; =&gt; (int) hour
  4494. , &quot;min&quot; =&gt; (int) min
  4495. , &quot;sec&quot; =&gt; (int) sec ])
  4496. duration = (array) ( &quot;sec&quot; =&gt; (int) sec )
  4497. duration = (array) ( (int) week/false
  4498. [, (int) day/false
  4499. [, (int) hour
  4500. , (int) min
  4501. , (int) sec ]] )
  4502. duration = (int) week/false
  4503. [, (int) day/false
  4504. [, (int) hour
  4505. , (int) min
  4506. , (int) sec ]]
  4507. duration = (string) dur-value = [&quot;+&quot;] &quot;P&quot; (dur-date/dur-time/dur-week)
  4508. dur-date = dur-day [dur-time]
  4509. dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
  4510. dur-week = 1*DIGIT &quot;W&quot;
  4511. dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
  4512. dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
  4513. dur-second = 1*DIGIT &quot;S&quot;
  4514. dur-day = 1*DIGIT &quot;D&quot;
  4515. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  4516. </p>
  4517. <p class="label">Example 1</p>
  4518. <p>One day duration.</p>
  4519. <p class="example">
  4520. $vtodo-&gt;setProperty kigkonsult\iCalcreator\util\util::$DURATION ,
  4521. array( &quot;day&quot; =&gt; 1 ));
  4522. </p>
  4523. <p class="label">Example 2</p>
  4524. <p>Four hours duration.</p>
  4525. <p class="example">
  4526. $vtodo-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DURATION,
  4527. &quot;PT4H&quot; );
  4528. </p>
  4529. <br>
  4530. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4531. <a name="EXDATE"></a><h3>3.2.20 EXDATE</h3>
  4532. <p>
  4533. This property defines the list of date/time exceptions for a recurring <strong>calendar</strong> component and is OPTIONAL
  4534. and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.
  4535. </p>
  4536. <p>The default value type for EXDATE is DATE-TIME, can be set to a DATE value type.</p>
  4537. <p>
  4538. To ease up usage, kigkonsult\iCalcreator\util\util::$EXDATE as used in code snippets is available.
  4539. </p>
  4540. <h5>Create EXDATE</h5>
  4541. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  4542. <p class="label">Format</p>
  4543. <p class="format">calendarComponent::createExdate()</p>
  4544. <p class="label">Example</p>
  4545. <p class="example">
  4546. $str = $component-&gt;createExdate();
  4547. </p>
  4548. <h5>Delete EXDATE</h5>
  4549. <p>Remove EXDATE from component.</p>
  4550. <p class="label">Format</p>
  4551. <p class="format">calendarComponent::deleteProperty( &quot;EXDATE&quot; )</p>
  4552. <p class="label">Example 1</p>
  4553. <p class="example">
  4554. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$EXDATE );
  4555. </p>
  4556. <p class="label">Example 2</p>
  4557. <P>Delete EXDATE property no 2.</p>
  4558. <p class="example">
  4559. $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$EXDATE, 2 );
  4560. </p>
  4561. <p class="label">Example 3</p>
  4562. <p>Deleting all EXDATE properties.</p>
  4563. <p class="example">
  4564. while( $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$EXDATE ))
  4565. continue;
  4566. </p>
  4567. <h5>Get EXDATE</h5>
  4568. <p>If set, returns property value, otherwise bool false.</p>
  4569. <p class="label">Format 1</p>
  4570. <p class="format">calendarComponent::getProperty( &quot;EXDATE&quot; )<p>
  4571. <p class="comment">output = exdates<sup>1</sup></p>
  4572. <p class="label">Format 2</p>
  4573. <p class="format">calendarComponent::getProperty( &quot;exdate&quot;, propOrderNo/false, true )</p>
  4574. <p class="comment">propOrderNo = (int) specific property value</p>
  4575. <p class="comment">output = array( &quot;value&quot; =&gt; exdates<sup>1</sup>
  4576. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  4577. <p class="label">Format 3</p>
  4578. <p class="format">calendarComponent::getProperty( &quot;EXDATE&quot;, propOrderNo )</p>
  4579. <p class="comment">propOrderNo = (int) specific property value</p>
  4580. <p class="comment">Get propOrderNo EXDATE</p>
  4581. <p class="label">Example</p>
  4582. <p class="example">
  4583. $exdate = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$EXDATE );
  4584. </p>
  4585. <h5>Set EXDATE</h5>
  4586. <p>Insert property value.</p>
  4587. <p>The value type for EXDATE should match the <a href="#DTSTART">DTSTART</a> value type.</p>
  4588. <p>
  4589. If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br>
  4590. If no &quot;VALUE&quot; value type is set or if DATE-TIME value type or TZID value is set in params, DATE-TIME (default) value type is set.
  4591. </p>
  4592. <p>
  4593. If &quot;TZID&quot; is set in params,
  4594. all timezone or offset in dates are ignored (note timestamp, below) and DATE-TIME value type is set.<br>
  4595. If empty params and offset in 1st date, all remaining (non-timestamp) dates are set to UTC.<br>
  4596. If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br>
  4597. If none of the above rules are applicable, DATE-TIME and local date is set default.
  4598. </p>
  4599. <p>
  4600. Notice, use function <a href="#transformDateTime">transformDateTime</a> to convert a datetime from one time zone to another.
  4601. </p>
  4602. <p>EXDATEs are automatically sorted in ascending order (Y-m-d[-H-i-s]).</p>
  4603. <p>
  4604. In spite of the fact that EXDATE may contain a (comma separated) list of values,
  4605. a strong recommendation is to split a EXDATE &quot;list&quot; into multiple single EXDATE entries.
  4606. </p>
  4607. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  4608. <p class="label">Format</p>
  4609. <p class="format">calendarComponent::setProperty( &quot;exdate&quot;, exdates [, params [, propOrderNo ]] )</p>
  4610. <p class="comment">exdates<sup>1</sup> = (array) ( date *[, date ] )
  4611. date = array( (int) year
  4612. , (int) month
  4613. , (int) day
  4614. [, (int) hour
  4615. , (int) min
  4616. , (int) sec
  4617. [, tz ]] )
  4618. date<sup>1</sup> = (array) ( &quot;year&quot; =&gt; (int) year
  4619. , &quot;month&quot; =&gt; (int) month
  4620. , &quot;day&quot; =&gt; (int) day
  4621. [, &quot;hour&quot; =&gt; (int) hour
  4622. , &quot;min&quot; =&gt; (int) min
  4623. , &quot;sec&quot; =&gt; (int) sec
  4624. [, &quot;tz&quot; =&gt; tz ]] )
  4625. date = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp [, &quot;tz&quot; =&gt; tz])
  4626. // <span class="comment">timestamp without tz will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4627. date = (string) date/datetime string<sup>*</sup>
  4628. tz = (string) &lt;timezone identifier&gt; / offset
  4629. // <span class="comment">timezone will be used as tzidparam (below), if tzidparam not set</span>
  4630. offset = (int) (+/-)HHmm[ss] // <span class="comment">(arr/str) local date + UTC offset will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4631. params<sup>2</sup> = (array) ([(datetimeparam/dateparam)&nbsp;/ tzidparam] *[,xparams])
  4632. datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="comment">default, output as date-time</span>
  4633. dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="comment">output as DATE</span>
  4634. tzidparam = kigkonsult\iCalcreator\util\util::$TZID =&gt; (string) &lt;timezone identifier&gt;
  4635. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  4636. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  4637. <br>date/datetime string<sup>*</sup> recommended formats
  4638. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  4639. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  4640. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  4641. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  4642. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  4643. trailing characters (digits), if exists, will be interpreted as offset/timezone
  4644. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  4645. <span class="commsnt">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  4646. <p class="label">Example 1</p>
  4647. <p class="example">
  4648. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$EXDATE,
  4649. array( array( 2006, 8, 14, 16, 0, 0 ));
  4650. <span class="comment">// exclude 2006-08-14 16.00.00 (local date) from recurrence pattern</span>
  4651. </p>
  4652. <p class="label">Example 2</p>
  4653. <p class="example">
  4654. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$EXDATE,
  4655. array( array(&quot;year&quot; =&gt;,2006,&quot;month&quot; =&gt; 8,&quot;day&quot;=&gt; 11)),
  4656. array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
  4657. <span class="comment">// exclude 2006-08-11 from recurrence pattern;</span>
  4658. </p>
  4659. <br>
  4660. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4661. <a name="EXRULE"></a><h3>3.2.21 EXRULE</h3>
  4662. <p>
  4663. This property defines a rule or repeating pattern for an exception to a recurrence set and is OPTIONAL
  4664. and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.
  4665. </p>
  4666. <p>EXRULE is deprecated in [RFC5545]!</p>
  4667. <p>
  4668. To ease up usage, kigkonsult\iCalcreator\util\util::$EXRULE as used in code snippets is available.
  4669. </p>
  4670. <h5>Create EXRULE</h5>
  4671. <p>If set, returns [RFC2445] formatted string, otherwise bool false.</p>
  4672. <p class="label">Format</p>
  4673. <p class="format">calendarComponent::createExrule()</p>
  4674. <p class="label">Example</p>
  4675. <p class="example">
  4676. $str = $component-&gt;createExrule();
  4677. </p>
  4678. <h5>Delete EXRULE</h5>
  4679. <p>Remove EXRULE from component.</p>
  4680. <p class="label">Format</p>
  4681. <p class="format">calendarComponent::deleteProperty( &quot;EXRULE&quot; )</p>
  4682. <p class="label">Example 1</p>
  4683. <p class="example">
  4684. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$EXRULE );
  4685. </p>
  4686. <p class="label">Example 2</p>
  4687. <p>Delete EXRULE property no 2.</p>
  4688. <p class="example">
  4689. $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$EXRULE, 2 );
  4690. </p>
  4691. <p class="label">Example 3</p>
  4692. <p>Deleting all EXRULE properties.</p>
  4693. <p class="example">
  4694. while( $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$EXRULE ))
  4695. continue;
  4696. </p>
  4697. <h5>Get EXRULE</h5>
  4698. <p>If set, returns property value, otherwise bool false.</p>
  4699. <p class="label">Format 1</p>
  4700. <p class="format">calendarComponent::getProperty( &quot;EXRULE&quot; )</p>
  4701. <p class="comment">output = recur<sup>1</sup></p>
  4702. <p class="label">Format 2</p>
  4703. <p class="format">calendarComponent::getProperty( &quot;exrule&quot;, propOrderNo/false, true )</p>
  4704. <p class="comment">propOrderNo = (int) specific property value</p>
  4705. <p class="comment">output = array( &quot;value&quot; =&gt; recur<sup>1</sup>
  4706. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  4707. <p class="label">Format 3</p>
  4708. <p class="format">calendarComponent::getProperty( &quot;EXRULE&quot;, propOrderNo )</p>
  4709. <p class="comment">propOrderNo = (int) specific property value</p>
  4710. <p class="comment">Get propOrderNo EXRULE</p>
  4711. <p class="label">Example</p>
  4712. <p class="example">
  4713. $exrule = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$EXRULE );
  4714. </p>
  4715. <h5>Set EXRULE</h5>
  4716. <p>
  4717. Insert property value.
  4718. Notice, use function <a href="#transformDateTime">transformDateTime</a>to change a local datetime to a UTC datetime.
  4719. </p>
  4720. <p>Parameters, will be ordered as prescribed in [RFC5545].</p>
  4721. <p class="label">Format</p>
  4722. <p class="format">calendarComponent::setProperty( &quot;exrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
  4723. See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
  4724. <p class="comment">recur<sup>1</sup> = (array) ( "FREQ" =&gt; freq
  4725. // <span class="comment">either UNTIL or COUNT may appear in a &quot;recur&quot;,
  4726. but UNTIL and COUNT MUST NOT occur in the same &quot;recur&quot;</span>
  4727. [, &quot;UNTIL&quot; &quot;=&gt;&quot; >enddate ]
  4728. [, &quot;COUNT&quot; &quot;=&gt;&quot; 1*DIGIT ]
  4729. // <span class="comment">the rest of these keywords are optional,
  4730. but MUST NOT occur more than once</span>
  4731. [, &quot;INTERVAL&quot; &quot;=&gt;&quot; 1*DIGIT ]
  4732. [, &quot;BYSECOND&quot; &quot;=&gt;&quot; byseclist ]
  4733. [, &quot;BYMINUTE&quot; &quot;=&gt;&quot; byminlist ]
  4734. [, &quot;BYHOUR&quot; &quot;=&gt;&quot; byhrlist ]
  4735. [, &quot;BYDAY&quot; &quot;=&gt;&quot; bywdaylist ]
  4736. [, &quot;BYMONTHDAY&quot; &quot;=&gt;&quot; bymodaylist ]
  4737. [, &quot;BYYEARDAY&quot; &quot;=&gt;&quot; byyrdaylist ]
  4738. [, &quot;BYWEEKNO&quot; &quot;=&gt;&quot; bywknolist ]
  4739. [, &quot;BYMONTH&quot; &quot;=&gt;&quot; bymolist ]
  4740. [, &quot;BYSETPOS&quot; &quot;=&gt;&quot; bysplist ]
  4741. [, &quot;WKST&quot; &quot;=&gt;&quot; weekday ]
  4742. [, x-name &quot;=&gt;&quot; (string) text ] )
  4743. freq = &quot;SECONDLY&quot; /
  4744. &quot;MINUTELY&quot; /
  4745. &quot;HOURLY&quot; /
  4746. &quot;DAILY&quot; /
  4747. &quot;WEEKLY&quot; /
  4748. &quot;MONTHLY&quot; /
  4749. &quot;YEARLY&quot;
  4750. enddate = date // <span class="comment">a DATE value or a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME value</span>
  4751. date = (array) ( &quot;year&quot; =&gt; (int) year
  4752. , &quot;month&quot; =&gt; (int) month
  4753. , &quot;day&quot; =&gt; (int) day
  4754. [, &quot;hour&quot; =&gt; (int) hour
  4755. , &quot;min&quot; =&gt; (int) min
  4756. , &quot;sec&quot; =&gt; (int) sec ])
  4757. date = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp ) // <span class="comment">results in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4758. date = (string) date/datetime string<sup>*</sup>
  4759. byseclist = seconds
  4760. byseclist = (array) (seconds *(, seconds ))
  4761. seconds = 1DIGIT / 2DIGIT ;0 to 59
  4762. byminlist = minutes
  4763. byminlist = (array) ( minutes *(, minutes ))
  4764. minutes = 1DIGIT / 2DIGIT ;0 to 59
  4765. byhrlist = hour
  4766. byhrlist = (array) ( hour *(, hour ))
  4767. hour = 1DIGIT / 2DIGIT ;0 to 23
  4768. bywdaylist = weekdaynum
  4769. bywdaylist = (array) ( weekdaynum *("," weekdaynum ))
  4770. weekdaynum = (array) ( [([plus] ordwk / minus ordwk)], &quot;DAY&quot; =&gt; weekday )
  4771. plus = &quot;+&quot;
  4772. minus = &quot;-&quot;
  4773. ordwk = 1DIGIT / 2DIGIT ;1 to 53
  4774. weekday = &quot;SU&quot; / &quot;MO&quot; / &quot;TU&quot; / &quot;WE&quot; / &quot;TH&quot; / &quot;FR&quot; / &quot;SA&quot;
  4775. ; Corresponding to
  4776. ; SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
  4777. ; FRIDAY and SATURDAY days of the week.
  4778. bymodaylist = monthdaynum
  4779. bymodaylist = (array) ( monthdaynum *(, monthdaynum ))
  4780. monthdaynum = ( [plus] ordmoday ) / ( minus ordmoday )
  4781. ordmoday = 1DIGIT / 2DIGIT ;1 to 31
  4782. byyrdaylist = yeardaynum
  4783. byyrdaylist = (array) ( yeardaynum *(, yeardaynum ))
  4784. yeardaynum = ( [plus] ordyrday ) / ( minus ordyrday )
  4785. ordyrday = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366
  4786. bywknolist = weeknum
  4787. bywknolist = (array) ( weeknum *(, weeknum ))
  4788. weeknum = ( [plus] ordwk ) / ( minus ordwk )
  4789. bymolist = monthnum
  4790. bymolist = (array) ( monthnum *(, monthnum ))
  4791. monthnum = 1DIGIT / 2DIGIT ;1 to 12
  4792. bysplist = setposday
  4793. bysplist = (array) ( setposday *(, setposday ))
  4794. setposday = yeardaynum
  4795. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  4796. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  4797. <br>date/datetime string<sup>*</sup> recommended formats
  4798. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  4799. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  4800. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  4801. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  4802. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  4803. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  4804. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  4805. <p class="label">Example</p>
  4806. <p class="example">
  4807. $vevent-&gt;setProperty(&nbsp;&quot;Exrule&quot;,
  4808. &nbsp;array( &quot;FREQ&quot; =&gt; &quot;MONTHLY&quot;,
  4809. &quot;UNTIL&quot; =&gt; &quot;20060831&quot;,
  4810. // <span class="comment">DATE / DATE-TIME in <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> format; string/array, see <a class="ref" href="#CREATED">CREATED</a> format</span>
  4811. &quot;INTERVAL&quot; =&gt; 2,
  4812. &quot;WKST&quot; =&gt; &quot;SU&quot;,
  4813. &quot;BYSECOND&quot; =&gt; 2,
  4814. &quot;BYMINUTE&quot; =&gt; array( 2, -4, 6 ), // (*)
  4815. &quot;BYHOUR&quot; =&gt; array( 2, 4, -6 ), // (*)
  4816. &quot;BYMONTHDAY&quot; =&gt; -2, // (*)
  4817. &quot;BYYEARDAY&quot; =&gt; 2, // (*)
  4818. &quot;BYWEEKNO&quot; =&gt; array( 2, -4, 6 ), // (*)
  4819. &quot;BYMONTH&quot; =&gt; 2, // (*)
  4820. &quot;BYSETPOS&quot; =&gt; array( 2, -4, 6 ), // (*)
  4821. &quot;BYday&quot; =&gt; array( array(-2, &quot;DAY&quot; =&gt; &quot;WE&quot; ),
  4822. array( 3, &quot;DAY&quot; =&gt; &quot;TH&quot;),
  4823. array( 5, &quot;DAY&quot; =&gt; &quot;FR&quot;),
  4824. array( &quot;DAY&quot; =&gt; &quot;MO&quot;)), // (**)
  4825. &quot;X-NAME&quot; =&gt; &quot;x-value&quot; ),
  4826. array( &quot;x-key&quot; =&gt; &quot;xparamValue&quot; ));
  4827. $vtodo-&gt;setProperty( >kigkonsult\iCalcreator\util\util::$EXRULE,
  4828. array( &quot;FREQ&quot; =&gt; &quot;WEEKLY&quot;,
  4829. &quot;COUNT&quot; =&gt; 2,
  4830. &quot;INTERVAL&quot; =&gt; 2,
  4831. &quot;WKST&quot; =&gt; &quot;SU&quot;,
  4832. &quot;BYSECOND&quot; =&gt; array( -2, 4, 6 ), // (*)
  4833. &quot;BYMINUTE&quot; =&gt; -2, // (*)
  4834. &quot;BYHOUR&quot; =&gt; 2, // (*)
  4835. &quot;BYMONTHDAY&quot; =&gt; array( 2, -4, 6 ), // (*)
  4836. &quot;BYYEARDAY&quot; =&gt; array( -2, 4, 6 ), // (*)
  4837. &quot;BYWEEKNO&quot; =&gt; -2, // (*)
  4838. &quot;BYMONTH&quot; =&gt; array( 2, 4, -6 ), // (*)
  4839. &quot;BYSETPOS&quot; =&gt; -2, // (*)
  4840. &quot;BYday&quot; =&gt; array( 5, &quot;DAY&quot; =&gt; &quot;WE&quot; ), // (**)
  4841. &quot;X-NAME&quot; =&gt; &quot;x-value&quot; ),
  4842. array( &quot;x-key&quot; =&gt; &quot;xparamValue&quot; ));
  4843. // <span class="comment">(*) single value/array of values</span>
  4844. // <span class="comment">(**) single value array /array of arrays</span>
  4845. </p>
  4846. <br>
  4847. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4848. <a name="FREEBUSY_PROP"></a><h3>3.2.22 FREEBUSY</h3>
  4849. <p>
  4850. The property defines one or more free or busy time intervals in a <a href="#VFREEBUSY">VFREEBUSY</a>
  4851. <strong>calendar</strong> component.
  4852. <p>
  4853. <p>The value type for FREEBUSY is PERIOD. A PERIOD is a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME/DATE-TIME or a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME/duration.</p>
  4854. <p>
  4855. To ease up usage, kigkonsult\iCalcreator\util\util::$FREEBUSY as used in code snippets is available.
  4856. </p>
  4857. <h5>Create FREEBUSY</h5>
  4858. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  4859. <p class="label">Format</p>
  4860. <p class="format">calendarComponent::createFreebusy()</p>
  4861. <p class="label">Example</p>
  4862. <p class="example">
  4863. $str = $component-&gt;createfreebusy();
  4864. </p>
  4865. <h5>Delete FREEBUSY</h5>
  4866. <p>Remove FREEBUSY from component.</p>
  4867. <p class="label">Format</p>
  4868. <p class="format">calendarComponent::deleteProperty( &quot;FREEBUSY&quot; )</p>
  4869. <p class="label">Example 1</p>
  4870. <p>Delete (single/first) FREEBUSY property</p>
  4871. <p class="example">
  4872. $vfreebusy-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$FREEBUSY );
  4873. </p>
  4874. <p class="label">Example 2</p>
  4875. <p>Delete FREEBUSY property no 2.</p>
  4876. <p class="example">
  4877. $vfreebusy-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$FREEBUSY, 2 );
  4878. </p>
  4879. <p class="label">Example 3</p>
  4880. <p>Deleting all FREEBUSY properties.</p>
  4881. <p class="example">
  4882. while( $vfreebusy-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$FREEBUSY ))
  4883. continue;
  4884. </p>
  4885. <h5>Get FREEBUSY</h5>
  4886. <p>If set, returns property value, otherwise bool false.</p>
  4887. <p class="label">Format 1</p>
  4888. <p class="format">calendarComponent::getProperty( &quot;FREEBUSY&quot; )</p>
  4889. <p class="comment">output = array( &quot;fbtype&quot; =&gt; freebusytype<sup>1</sup> , periods<sup>2</sup> )</p>
  4890. <p class="label">Format 3</p>
  4891. <p class="format">calendarComponent::getProperty( &quot;FREEBUSY&quot;, propOrderNo/false , true )</p>
  4892. <p class="comment">propOrderNo = (int) specific property value</p>
  4893. <p class="comment">output = array( &quot;value&quot; =&gt; array(&quot;fbtype&quot; =&gt; freebusytype<sup>1</sup> ,periods<sup>2</sup>)
  4894. , &quot;params&quot; =&gt; xparams<sup>3</sup> )</p>
  4895. <p class="label">Format 3</p>
  4896. <p class="format">calendarComponent::getProperty( &quot;FREEBUSY&quot;, propOrderNo )</p>
  4897. <p class="comment">propOrderNo = (int) specific property value</p>
  4898. <p class="comment">Get propOrderNo FREEBUSY</p>
  4899. <p class="label">Example</p>
  4900. <p class="example">
  4901. $freebusy = $vfreebusy-&gt;getProperty( kigkonsult\iCalcreator\util\util::$FREEBUSY );
  4902. </p>
  4903. <h5>Set FREEBUSY</h5>
  4904. Insert property value. A FREEBUSY input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
  4905. <p class="label">Format</p>
  4906. <p class="format">calendarComponent::setProperty( &quot;freebusy&quot;,freebusytype,fbperiods [,xparams [,propOrderNo ]] )</p>
  4907. <p class="comment">freebusytype<sup>1</sup> = one of &quot;FREE&quot;
  4908. / &quot;BUSY&quot; <b>Default</b>
  4909. / &quot;BUSY-UNAVAILABLE&quot;
  4910. / &quot;BUSY-TENTATIVE&quot;
  4911. / x-name
  4912. fbperiods = (array) ( periods<sup>2</sup> )&nbsp;
  4913. periods<sup>2</sup> = (array) ( startdate, enddate/duration ) /
  4914. (array) ( *[, (array) ( startdate, enddate/duration )] )
  4915. startdate/enddate = (array) ( (int) year
  4916. , (int) month
  4917. , (int) day
  4918. , (int) hour
  4919. , (int) min
  4920. , (int) sec )
  4921. startdate/enddate = (array) ( &quot;year&quot; =&gt; (int) year
  4922. , &quot;month&quot; =&gt; (int) month
  4923. , &quot;day&quot; =&gt; (int) day
  4924. , &quot;hour&quot; =&gt; (int) hour
  4925. , &quot;min&quot; =&gt; (int) min
  4926. , &quot;sec&quot; =&gt; (int) sec ) // <span class="comment">output format</span>
  4927. startdate/enddate = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp ) // <span class="comment">results in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4928. startdate/enddate = (string) datetime string<sup>*</sup>
  4929. // <span class="comment">startdate/enddate MUST be an <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  4930. duration = (array) ( (int) week / false
  4931. [, (int) day / false
  4932. , (int) hour
  4933. , (int) min
  4934. , (int) sec] )
  4935. duration = (array) ( &quot;week&quot; =&gt; (int) week / false
  4936. [, &quot;day&quot; =&gt; (int) day / false
  4937. [, &quot;hour&quot; =&gt; (int) hour
  4938. , &quot;min&quot; =&gt; (int) min
  4939. , &quot;sec&quot; =&gt; (int) sec ]] ); // <span class="comment">output format</span>
  4940. duration = (array) ( &quot;sec&quot; =&gt; (int) sec )
  4941. duration = (string) dur-value
  4942. = ([&quot;+&quot;]/&quot;-&quot;) &quot;P&quot; (dur-date/dur-time/dur-week)
  4943. dur-date = dur-day [dur-time]
  4944. dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
  4945. dur-week = 1*DIGIT &quot;W&quot;
  4946. dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
  4947. dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
  4948. dur-second = 1*DIGIT &quot;S&quot;
  4949. dur-day = 1*DIGIT &quot;D&quot;
  4950. xparams<sup>3 </sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  4951. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  4952. <br>date/datetime string<sup>*</sup> recommended formats
  4953. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  4954. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  4955. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  4956. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  4957. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  4958. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  4959. <p class="label">Example</p>
  4960. See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
  4961. <p class="example">
  4962. $fdate1 = array ( 2001, 1, 1, 1, 1, 1 );
  4963. alt.
  4964. $fdate1 = array ( &quot;year&quot; =&gt; 2001
  4965. , &quot;month&quot; =&gt; 1
  4966. , &quot;day&quot; =&gt; 1
  4967. , &quot;hour&quot; =&gt; 1
  4968. , &quot;min&quot; =&gt; 1
  4969. , &quot;sec&quot; =&gt; 1 );
  4970. $fdate2 = array ( 2002, 2, 2, 2, 2, 2 );
  4971. $fdate3 = array ( 2003, 3, 3, 3, 3, 3 );
  4972. $fdate4 = &quot;4 April 2005 4:4:4&quot;;
  4973. $fdate7 = array ( &quot;year&quot; =&gt; 2007
  4974. , &quot;month&quot; =&gt; 7
  4975. , &quot;day&quot; =&gt; 7 );
  4976. $fdur6 = array ( &quot;week&quot; =&gt; 0
  4977. , &quot;day&quot; =&gt; 5
  4978. , &quot;hour&quot; =&gt; 5
  4979. , &quot;min&quot; =&gt; 5
  4980. , &quot;sec&quot; =&gt; 5 );
  4981. $fdur7 = array ( 0, 0, 6 ); // <span class="comment">duration for 6 hours</span>
  4982. $fdur8 = &quot;P2D&quot;; // <span class="comment">duration two days</span>
  4983. $freebusy-&gt;setProperty kigkonsult\iCalcreator\util\util::$FREEBUSY,
  4984. &quot;FREE&quot;,
  4985. array( array( $fdate1, $fdate2 ),
  4986. array( $fdate3, $fdur6 ),
  4987. array( $fdate4, $fdate5 )));
  4988. $freebusy-&gt;setProperty(kigkonsult\iCalcreator\util\util::$FREEBUSY,
  4989. &quot;Busy&quot;,
  4990. array( array( array( $fdate1, $fdate2 ),
  4991. array( $fdate3, $fdur8 ),
  4992. array( $fdate4, $fdur7 ),
  4993. array( $fdate1, $fdate3 )));
  4994. </p>
  4995. <br>
  4996. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  4997. <a name="GEO"></a><h3>3.2.23 GEO</h3>
  4998. <p>
  4999. This property specifies information related to the global position for the activity specified by
  5000. <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components and is OPTIONAL and MUST NOT occur more than once.
  5001. </p>
  5002. <p>Value type for latitude and longitude is FLOAT.</p>
  5003. <p class="quotes">Values for latitude and longitude shall be expressed as decimal
  5004. fractions of degrees. Whole degrees of latitude shall be represented by
  5005. a two-digit decimal number ranging from 0 through 90. Whole degrees
  5006. of longitude shall be represented by a decimal number ranging from 0
  5007. through 180. When a decimal fraction of a degree is specified, it shall
  5008. be separated from the whole number of degrees by a decimal point.</p>
  5009. <p>The output (float) latitude and longitude values are presented up to six decimals.</p>
  5010. <p>Using the non-standard directive &quot;GEOLOCATION&quot; when calling iCalcreator
  5011. <a href="#geoLocation"><em>calendar</em></a> or <a href="#geoLocation_PROP">component</a>
  5012. getProperty method, iCalcreator returns output supporting<br>
  5013. ISO6709 &quot;Standard representation of geographic point location by coordinates&quot;<br>
  5014. by combining the <a href="#LOCATION">LOCATION</a> and <a href="#GEO">GEO</a> property values
  5015. (only if <a href="#GEO">GEO</a> is set).
  5016. </p>
  5017. <p>
  5018. To ease up usage, kigkonsult\iCalcreator\util\util::$GEO as used in code snippets is available.
  5019. </p>
  5020. <h5>Create GEO</h5>
  5021. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5022. <p class="label">Format</p>
  5023. <p class="format">calendarComponent::createGeo()</p>
  5024. <p class="label">Example</p>
  5025. <p class="example">
  5026. $str = $component-&gt;createGeo();
  5027. </p>
  5028. <h5>Delete GEO</h5>
  5029. <p>Remove GEO from component.</p>
  5030. <p class="label">Format</p>
  5031. <p class="format">calendarComponent::deleteProperty( &quot;GEO&quot; )</p>
  5032. <p class="label">Example</p>
  5033. <p class="example">
  5034. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$GEO );
  5035. </p>
  5036. <h5>Get GEO</h5>
  5037. <p>If set, returns GEO property value (latitude/longitude) as prescribed in [RFC5545], otherwise bool false.</p>
  5038. <p class="label">Format 1</p>
  5039. <p class="format">calendarComponent::getProperty( &quot;GEO&quot; )</p>
  5040. <p class="comment">output = array( &quot;latitude&quot; =&gt; &lt;latitude&gt;
  5041. , &quot;longitude&quot; =&gt; &lt;longitude&gt;))</p>
  5042. <p class="label">Format 2</p>
  5043. <p class="format">calendarComponent::getProperty( &quot;GEO&quot;, false , true )</p>
  5044. <p class="comment">output = array( &quot;value&quot; =&gt; array ( &quot;latitude&quot; =&gt; &lt;latitude&gt;
  5045. , &quot;longitude&quot; =&gt; &lt;longitude&gt;))
  5046. , &quot;params&quot; =&gt; xparams<sup>1</sup> )</p>
  5047. <p class="label">Example</p>
  5048. <p class="example">
  5049. $geo = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$GEO );
  5050. </p>
  5051. <h5>Set GEO</h5>
  5052. <p>Insert property value.</p>
  5053. <p class="label">Format</p>
  5054. <p class="format">calendarComponent::setProperty( &quot;geo&quot;, latitude, longitude [, xparams ] )</p>
  5055. <p class="comment">latitude = (float) latitude
  5056. longitude = (float) longitude
  5057. xparams<sup>1</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  5058. </p>
  5059. <p class="label">Example</p>
  5060. <p class="example">
  5061. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$GEO,
  5062. 11.23456,
  5063. -23.45678 );
  5064. </p>
  5065. <br>
  5066. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5067. <a name="LAST-MODIFIED"></a><h3>3.2.24 LAST-MODIFIED</h3>
  5068. <p>
  5069. The property specifies the date and time that the information associated with the <strong>calendar</strong>
  5070. component was last revised in the <strong>calendar</strong> store.
  5071. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
  5072. <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VTIMEZONE">VTIMEZONE</a> components.
  5073. </p>
  5074. <p>The value type for LAST-MODIFIED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.</p>
  5075. <p>For methods and formatting, explore the <a href="#CREATED">CREATED</a> property.</p>
  5076. <p>
  5077. To ease up usage, kigkonsult\iCalcreator\util\util::$LAST_MODIFIED is available.
  5078. </p>
  5079. <br>
  5080. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5081. <a name="LOCATION"></a><h3>3.2.25 LOCATION</h3>
  5082. <p>
  5083. The property defines the intended venue for the activity defined by a <strong>calendar</strong> component.
  5084. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.
  5085. </p>
  5086. <p>The value type for LOCATION is TEXT.</p>
  5087. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) LOCATION values.</p>
  5088. <p>Using the non-standard directive &quot;GEOLOCATION&quot; when calling iCalcreator
  5089. <a href="#geoLocation"><em>calendar</em></a> or <a href="#geoLocation_PROP">component</a>
  5090. getProperty method, iCalcreator returns output supporting<br>
  5091. ISO6709 &quot;Standard representation of geographic point location by coordinates&quot;,<br>
  5092. by combining the <a href="#LOCATION">LOCATION</a> and <a href="#GEO">GEO</a> property values
  5093. (only if <a href="#GEO">GEO</a> is set).
  5094. </p>
  5095. <p>
  5096. To ease up usage, kigkonsult\iCalcreator\util\util::$LOCATION as used in code snippets is available.
  5097. </p>
  5098. <h5>Create LOCATION</h5>
  5099. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5100. <p class="label">Format</p>
  5101. <p class="format">calendarComponent::createLocation()</p>
  5102. <p class="label">Example</p>
  5103. <p class="example">
  5104. $str = $component-&gt;createLocation();
  5105. </p>
  5106. <h5>Delete LOCATION</h5>
  5107. <p>Remove LOCATION from component.</p>
  5108. <p class="label">Format</p>
  5109. <p class="format">calendarComponent::deleteProperty( &quot;LOCATION&quot; )</p>
  5110. <p class="label">Example</p>
  5111. <p class="example">
  5112. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$LOCATION );
  5113. </p>
  5114. <h5>Get LOCATION</h5>
  5115. <p>If set, returns property value, otherwise bool false.</p>
  5116. <p class="label">Format 1</p>
  5117. <p class="format">calendarComponent::getProperty( &quot;LOCATION&quot; )</p>
  5118. <p class="comment">output = location<sup>1</sup></p>
  5119. <p class="label">Format 2</p>
  5120. <p class="format">calendarComponent::getProperty( &quot;LOCATION&quot;, false , true )</p>
  5121. <p class="comment">output = array( &quot;value&quot; =&gt; location<sup>1</sup>
  5122. , &quot;params&quot; =&gt; param<sup>2</sup> )</p>
  5123. <p class="label">Example</p>
  5124. <p class="example">
  5125. $location = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$LOCATION );
  5126. </p>
  5127. <h5>Set LOCATION</h5>
  5128. <p>Insert property value.</p>
  5129. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  5130. <p class="label">Format</p>
  5131. <p class="format">calendarComponent::setProperty( &quot;location&quot;, location [, param] )</p>
  5132. <p class="comment">location<sup>1</sup> = (string) Value type TEXT
  5133. params<sup>2</sup> = (array) (
  5134. [ &quot;ALTREP&quot; =&gt; (string) &quot;&lt;an alternate text representation, URI&gt;&quot;]
  5135. [, &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;]
  5136. *[, xparams ] )
  5137. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  5138. lang<sup>*</sup> = as defined in [RFC5546]</p>
  5139. <p class="label">Example</p>
  5140. <p class="example">
  5141. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LOCATION,
  5142. &quot;Buckingham Palace&quot; );
  5143. </p>
  5144. <br>
  5145. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5146. <a name="ORGANIZER"></a><h3>3.2.26 ORGANIZER</h3>
  5147. <p>
  5148. The property defines the organizer for a <strong>calendar</strong> component and is OPTIONAL
  5149. and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>,
  5150. <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
  5151. </p>
  5152. <p>This value type for ORGANIZER is URI, a <strong>calendar</strong> user address.</p>
  5153. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) ORGANIZER values.</p>
  5154. <p>You can export <strong>calendar</strong> ORGANIZER values as <a href="#iCal2vCards">vCards</a>.
  5155. <p>
  5156. To ease up usage, kigkonsult\iCalcreator\util\util::$ORGANIZER as used in code snippets is available.
  5157. </p>
  5158. <h5>Create ORGANIZER</h5>
  5159. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5160. <p class="label">Format</p>
  5161. <p class="format">calendarComponent::createOrganizer()</p>
  5162. <p class="label">Example</p>
  5163. <p class="example">
  5164. $str = $component-&gt;createOrganizer();
  5165. </p>
  5166. <h5>Delete ORGANIZER</h5>
  5167. <p>Remove ORGANIZER from component.</p>
  5168. <p class="label">Format</p>
  5169. <p class="format">calendarComponent::deleteProperty( &quot;ORGANIZER&quot; )</p>
  5170. <p class="label">Example</p>
  5171. <p class="example">
  5172. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$ORGANIZER );
  5173. </p>
  5174. <h5>Get ORGANIZER</h5>
  5175. <p>If set, returns property value, otherwise bool false.</p>
  5176. <p class="label">Format 1</p>
  5177. <p class="format">calendarComponent::getProperty( &quot;ORGANIZER&quot; )</p>
  5178. <p class="comment">output = organizer<sup>1</sup></p>
  5179. <p class="label">Format 2</p>
  5180. <p class="format">calendarComponent::getProperty( &quot;ORGANIZER&quot;, false , true )</p>
  5181. <p class="comment">output = array( &quot;value&quot; =&gt; organizer<sup>1</sup>
  5182. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  5183. <p class="label">Example</p>
  5184. <p class="example">
  5185. $organizer = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$ORGANIZER );
  5186. </p>
  5187. <h5>Set ORGANIZER</h5>
  5188. <p>Insert property value.
  5189. Property value must be prefixed by protocol (ftp://, http://,mailto:, file:// ref. rfc 1738), &quot;mailto:&quot; prefixed if missing.
  5190. Also DIR parameter must be prefixed by protocol.
  5191. SENT-BY parameter must use protocol &quot;mailto:&quot;, prefixed if missing.
  5192. </p>
  5193. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  5194. <p class="label">Format</p>
  5195. <p class="format">calendarComponent::setProperty( &quot;organizer&quot;, organizer [, params] )</p>
  5196. <p class="comment">organizer<sup>1</sup> = (string) a <strong>calendar</strong> user address (cal-address), a URI as defined by
  5197. [RFC 1738] or any other IANA registered form for a URI.
  5198. params<sup>2</sup> = (array) ( [ &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot; (applies to the CN parameter value) ]
  5199. [, &quot;CN&quot; =&gt; (string) &quot;common name to be associated with the
  5200. <strong>calendar</strong> user specified by the property&quot;]
  5201. [, &quot;DIR&quot; =&gt; (string) &quot;reference to a directory entry associated
  5202. with the <strong>calendar</strong> user specified by the property&quot; ]
  5203. [, &quot;SENT-BY&quot; =&gt; (string) (cal-address, above)
  5204. &quot;single <strong>calendar</strong> user that is acting on behalf
  5205. of the <strong>calendar</strong> user specified by the property&quot; ]
  5206. *[, xparams ]
  5207. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  5208. lang<sup>*</sup> = as defined in [RFC5546]</p>
  5209. <p class="label">Example</p>
  5210. <p class="example">
  5211. $dir = &quot;ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)&quot;;
  5212. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$ORGANIZER,
  5213. &quot;ical@domain.com&quot;,
  5214. array( &quot;CN&quot; =&gt; &quot;John Doe&quot;,
  5215. &quot;DIR&quot; =&gt; $dir,
  5216. &quot;SENT-BY&quot; =&gt; &quot;secretary@domain.com&quot;,
  5217. &quot;X-Key1&quot; =&gt; &quot;X-Value1&quot;,
  5218. &quot;X-Key2&quot; =&gt; &quot;X-Value2&quot; ));
  5219. </p>
  5220. <br>
  5221. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5222. <a name="PERCENT-COMPLETE"></a><h3>3.2.27 PERCENT-COMPLETE</h3>
  5223. <p>
  5224. This property is used by an assignee or delegatee of a <a href="#VTODO">VTODO</a> to
  5225. convey the percent completion of a <a href="#VTODO">VTODO</a> to the Organizer and is
  5226. OPTIONAL and MUST NOT occur more than once.
  5227. </p>
  5228. <p>
  5229. The property value is a positive integer between zero and one hundred.
  5230. A value of "0" indicates the <a href="#VTODO">VTODO</a> has not yet been started.
  5231. A value of "100" indicates that the <a href="#VTODO">VTODO</a> has been completed.
  5232. Integer values in between indicate the percent partially complete.
  5233. </p>
  5234. <p>
  5235. To ease up usage, kigkonsult\iCalcreator\util\util::$PERCENT_COMPLETE as used in code snippets is available.
  5236. </p>
  5237. <h5>Create PERCENT-COMPLETE</h5>
  5238. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5239. <p class="label">Format</p>
  5240. <p class="format">calendarComponent::createPercentComplete()</p>
  5241. <p class="label">Example</p>
  5242. <p class="example">
  5243. $str = $component-&gt;createPercentComplete();
  5244. </p>
  5245. <h5>Delete PERCENT-COMPLETE</h5>
  5246. <p>Remove PERCENT-COMPLETE from component.</p>
  5247. <p class="label">Format</p>
  5248. <p class="format">calendarComponent::deleteProperty( &quot;PERCENT-COMPLETE&quot; )</p>
  5249. <p class="label">Example</p>
  5250. <p class="example">
  5251. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$PERCENT_COMPLETE )
  5252. </p>
  5253. <h5>Get PERCENT-COMPLETE</h5>
  5254. <p>If set, returns property value, otherwise bool false.</p>
  5255. <p class="label">Format 1</p>
  5256. <p class="format">calendarComponent::getProperty( &quot;PERCENT-COMPLETE&quot; )</p>
  5257. <p class="comment">output = percent<sup>1</sup></p>
  5258. <p class="label">Format 2</p>
  5259. <p class="format">calendarComponent::getProperty( &quot;PRIORITY&quot;, false , true )</p>
  5260. <p class="comment">output = array( &quot;value&quot; =&gt; percent<sup>1</sup>
  5261. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  5262. <p class="label">Example</p>
  5263. <p class="example">
  5264. $percent = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$PERCENT_COMPLETE );
  5265. </p>
  5266. <h5>Set PERCENT-COMPLETE</h5>
  5267. <p>Insert property value.</p>
  5268. <p class="label">Format</p>
  5269. <p class="format">calendarComponent::setProperty( &quot;Percent-Complete&quot;, percent [, xparams ] )</p>
  5270. <p class="comment">percent<sup>1</sup> = (int) Value type INTEGER
  5271. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  5272. </p>
  5273. <p class="label">Example</p>
  5274. <p class="example">
  5275. $vtodo-&gt;setProperty( kigkonsult\iCalcreator\util\util::$PERCENT_COMPLETE, 90 );
  5276. </p>
  5277. <br>
  5278. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5279. <a name="PRIORITY"></a><h3>3.2.28 PRIORITY</h3>
  5280. <p>
  5281. The property defines the relative priority for a <strong>calendar</strong> component and is OPTIONAL
  5282. and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.
  5283. </p>
  5284. <p>
  5285. The priority is specified as an integer in the range zero to nine.<br>
  5286. A value of zero (US-ASCII decimal 48) specifies an undefined priority.<br>
  5287. A value of one (US-ASCII decimal 49) is the highest priority.<br>
  5288. A value of two (US-ASCII decimal 50) is the second highest priority.<br>
  5289. Subsequent numbers specify a decreasing ordinal priority.<br>
  5290. A value of nine (US-ASCII decimal 58) is the lowest priority.
  5291. </p>
  5292. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) PRIORITY values.</p>
  5293. <p>
  5294. To ease up usage, kigkonsult\iCalcreator\util\util::$PRIORITY as used in code snippets is available.
  5295. </p>
  5296. <h5>Create PRIORITY</h5>
  5297. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5298. <p class="label">Format</p>
  5299. <p class="format">calendarComponent::createPriority()</p>
  5300. <p class="label">Example</p>
  5301. <p class="example">
  5302. $str = $component-&gt;createPriority();
  5303. </p>
  5304. <h5>Delete PRIORITY</h5>
  5305. <p>Remove PRIORITY from component.</p>
  5306. <p class="label">Format</p>
  5307. <p class="format">calendarComponent::deleteProperty( &quot;PRIORITY&quot; )</p>
  5308. <p class="label">Example</p>
  5309. <p class="example">
  5310. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$PRIORITY );
  5311. </p>
  5312. <h5>Get PRIORITY</h5>
  5313. <p>If set, returns property value, otherwise bool false.</p>
  5314. <p class="label">Format 1</p>
  5315. <p class="format">calendarComponent::getProperty( &quot;PRIORITY&quot; )</p>
  5316. <p class="comment">output = priority<sup>1</sup></p>
  5317. <p class="label">Format 2</p>
  5318. <p class="format">calendarComponent::getProperty( &quot;PRIORITY&quot;, false , true )</p>
  5319. <p class="comment">output = array( &quot;value&quot; =&gt; priority<sup>1</sup>
  5320. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  5321. <p class="label">Example</p>
  5322. <p class="example">
  5323. $priority = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$PRIORITY );
  5324. </p>
  5325. <h5>Set PRIORITY</h5>
  5326. <p>Insert property value.</p>
  5327. <p class="label">Format</p>
  5328. <p class="format">calendarComponent::setProperty( &quot;priority&quot;, priority [, xparams ] )</p>
  5329. <p class="comment">priority<sup>1</sup> = (int) Value type INTEGER
  5330. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  5331. </p>
  5332. <p class="label">Example</p>
  5333. <p class="example">
  5334. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$PRIORITY, 3 );
  5335. </p>
  5336. <br>
  5337. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5338. <a name="RDATE"></a><h3>3.2.29 RDATE</h3>
  5339. <p>
  5340. This property defines the list of date/times for a recurrence set and is OPTIONAL and MAY occur
  5341. more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>,
  5342. <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
  5343. </p>
  5344. <p>
  5345. The default value type for RDATE is DATE-TIME, can be set to DATE or PERIOD (params<sup>2</sup>).
  5346. In <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components, RDATE MUST be specified as a date-time value type with local time value.
  5347. </p>
  5348. <p>
  5349. To ease up usage, kigkonsult\iCalcreator\util\util::$RDATE as used in code snippets is available.
  5350. </p>
  5351. <h5>Create RDATE</h5>
  5352. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5353. <p class="label">Format</p>
  5354. <p class="format">calendarComponent::createRdate()</p>
  5355. <p class="label">Example</p>
  5356. <p class="example">
  5357. $str = $component-&gt;createRdate();
  5358. </p>
  5359. <h5>Delete RDATE</h5>
  5360. <p>Remove RDATE from component.</p>
  5361. <p class="label">Format</p>
  5362. <p class="format">calendarComponent::deleteProperty( &quot;RDATE&quot; )</p>
  5363. <p class="label">Example 1</p>
  5364. <p>Delete (single/first) RDATE property.</p>
  5365. <p class="example">
  5366. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RDATE );
  5367. </p>
  5368. <p class="label">Example 2</p>
  5369. <p>Delete RDATE property no 2.</p>
  5370. <p class="example">
  5371. $vjournal-&gt;deleteProperty( &quot;RDATE&quot;, 2 );</p>
  5372. <p class="label">Example 3</p>
  5373. <p>Delete all RDATE properties.</p>
  5374. <p class="example">
  5375. while( $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RDATE ))
  5376. continue;
  5377. </p>
  5378. <h5>Get RDATE</h5>
  5379. <p>If set, returns property value, otherwise bool false.</p>
  5380. <p class="label">Format 1</p>
  5381. <p class="format">calendarComponent::getProperty( &quot;RDATE&quot; )</p>
  5382. <p class="comment">output = dates<sup>1</sup></p>
  5383. <p class="label">Format 2</p>
  5384. <p class="format">calendarComponent::getProperty( &quot;RDATE&quot;, propOrderNo/false , true )</p>
  5385. <p class="comment">propOrderNo = (int) specific property value</p>
  5386. <p class="comment">output = array( &quot;value&quot; =&gt; dates<sup>1</sup>
  5387. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  5388. <p class="label">Format 3</p>
  5389. <p class="format">calendarComponent::getProperty( &quot;RDATE&quot;, propOrderNo )</p>
  5390. <p class="comment">propOrderNo = (int) specific property value</p>
  5391. <p class="comment">Get propOrderNo RDATE</p>
  5392. <p class="label">Example</p>
  5393. <p class="example">
  5394. $rdates = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$RDATE );
  5395. </p>
  5396. <h5>Set RDATE</h5>
  5397. <p>Insert property value.</p>
  5398. <p>The value type for RDATE should match the <a href="#DTSTART">DTSTART</a> value type.</p>
  5399. <p>
  5400. If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br>
  5401. If no &quot;VALUE&quot; value type is set or if DATE-TIME value type or TZID value is set in params, DATE-TIME (default) value type is set.
  5402. </p>
  5403. <p>
  5404. If &quot;TZID&quot; is set in params,
  5405. all timezone or offset in dates are ignored (note timestamp, below) and DATE-TIME value type is set.<br>
  5406. If empty params and offset in 1st date, all remaining (non-timestamp) dates are set to UTC.<br>
  5407. If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br>
  5408. If none of the above rules are applicable, DATE-TIME and local date is set default.
  5409. </p>
  5410. <p>
  5411. Notice, use function <a href="#transformDateTime">transformDateTime</a> to convert a datetime from one time zone to another.
  5412. </p>
  5413. <p>RDATEs are automatically sorted in ascending order (Y-m-d[-H-i-s]).</p>
  5414. <p>
  5415. In spite of the fact that RDATE may contain a (comma separated) list of values,
  5416. a strong recommendation is to split a RDATE &quot;list&quot; into multiple single RDATE entries.
  5417. </p>
  5418. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  5419. <p class="label">Format</p>
  5420. <p class="format">calendarComponent::setProperty( &quot;rdate&quot;, dates [, params [, propOrderNo ]] )</p>
  5421. <p class="comment">dates<sup>1</sup> = (array) ( date2 *[, date2 ] )
  5422. date2 = date / (array) ( startdate, enddate/duration )
  5423. startdate = date
  5424. enddate = date
  5425. date = (array) ( (int) year
  5426. , (int) month
  5427. , (int) day
  5428. [, (int) int hour
  5429. , (int) min
  5430. , (int) day
  5431. , tz ] )
  5432. date = (array) ( &quot;year&quot; =&gt; (int) year
  5433. , &quot;month&quot; =&gt; (int) month
  5434. , &quot;day&quot; =&gt; (int) day
  5435. [, &quot;hour&quot; =&gt; (int) hour
  5436. , &quot;min&quot; =&gt; (int) min
  5437. , &quot;sec&quot; =&gt; (int) sec
  5438. [, &quot;tz&quot; =&gt; tz ]] )
  5439. // <span class="comment">output format</span>
  5440. date = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp [, &quot;tz&quot; =&gt; tz ] )
  5441. // <span class="comment">timestamp without tz will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  5442. date = (string) date/datetime string<sup>*</sup>
  5443. tz = &lt;timezone identifier&gt; / offset
  5444. // <span class="comment">timezone will be used as tzidparam, if tzidparam not set</span>
  5445. offset = (int) (+/-)HHmm[ss] // <span class="comment">(arr/str) local date + UTC offset will result in a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  5446. duration = (array) ( (int) week/false
  5447. [, (int) day/false
  5448. , (int) hour
  5449. , (int) min
  5450. , (int) sec] )
  5451. duration = (array) ([ &quot;week&quot; =&gt; (int) week / false ,] /
  5452. [ &quot;day&quot; =&gt; (int) day / false
  5453. [, &quot;hour&quot; =&gt; (int) hour
  5454. , &quot;min&quot; =&gt; (int) min
  5455. , &quot;sec&quot; =&gt; (int) sec ]] );
  5456. // <span class="comment">output format, only used keys</span>
  5457. duration = (array) ( &quot;sec&quot; =&gt; (int) sec );
  5458. duration = (string) duration like &quot;P15DT5H0M20S&quot;
  5459. params<sup>2</sup> = ([tzidparam ( / datetimeparam / dateparam / periodparam )] *[, xparams ] )
  5460. tzidparam = kigkonsult\iCalcreator\util\util::$TZID =&gt; (string) &lt;timezone identifier&gt;
  5461. // <span class="comment">output as local DATE-TIME with timezone identifier</span>
  5462. // <span class="comment">if tzidparam=&quot;GMT&quot;/&quot;UTC&quot; then</span>
  5463. // <span class="comment">output date-time is suffixed by 'Z'</span>
  5464. datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="comment">default, output as DATE-TIME</span>
  5465. dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="comment">output as DATE</span>
  5466. periodparam = &quot;VALUE&quot; =&gt; &quot;PERIOD&quot; // <span class="comment">output as PERIOD (datetime)</span>
  5467. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  5468. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  5469. <br>date/datetime string<sup>*</sup> recommended formats
  5470. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  5471. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  5472. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  5473. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  5474. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  5475. trailing characters (digits), if exists, will be interpreted as offset/timezone
  5476. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  5477. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  5478. <p class="label">Example</p>
  5479. See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).<br>
  5480. <p class="example">
  5481. // $rdate1 = array ( 2001, 1, 1, 1, 1, 1 );
  5482. // alt.
  5483. $rdate1 = array( &quot;year&quot; =&gt; 2001,
  5484. &quot;month&quot; =&gt; 1,
  5485. &quot;day&quot; =&gt; 1,
  5486. &quot;hour&quot; =&gt; 1,
  5487. &quot;min&quot; =&gt; 1,
  5488. &quot;sec&quot; =&gt; 1,
  5489. &quot;tz&quot; =&gt; &quot;GMT&quot; );
  5490. $rdate2 = array( 2002, 2, 2, 2, 2, 2, &quot;GMT&quot; );
  5491. $rdate3 = &quot;3 March 2003 03.03.03&quot;;
  5492. $rdate4 = array( 2004, 4, 4, 4, 4, 4, &quot;GMT&quot; );
  5493. $rdate5 = array( 2005, 10, 5, 5, 5, 5 );
  5494. $rdate8 = array( &quot;year&quot; =&gt; 2007, &quot;month&quot; =&gt; 7, &quot;day&quot; =&gt; 7 );
  5495. $rdur6 = array( &quot;week&quot; =&gt; 0,
  5496. &quot;day&quot; =&gt; 0,
  5497. &quot;hour&quot; =&gt; 5,
  5498. &quot;min&quot; =&gt; 5,
  5499. &quot;sec&quot; =&gt; 5 );
  5500. $rdur7 = array( 0, 0, 6 );
  5501. <span class="comment">// duration for 6 hours</span>
  5502. $rdur8 = array( &quot;week&quot; =&gt; 8 );
  5503. <span class="comment">// duration for 8 weeks</span>
  5504. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  5505. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RDATE,
  5506. array( $rdate1 ));
  5507. <span class="comment">// one recurrence date, date in 7-params format (DATE-TIME)</span>
  5508. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RDATE,
  5509. array( $rdate1, $rdate2 ));
  5510. <span class="comment">// two dates, date 7-params format (DATE-TIME)</span>
  5511. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RDATE,
  5512. array( array( $rdate1, $rdate2 ),
  5513. array( $rdate3, $rdate4 )),
  5514. array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
  5515. <span class="comment">// Both fromdate and enddate must have 7 params (DATE-TIME) !!!</span>
  5516. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RDATE,
  5517. array( array( $rdate2, $rdur6 )),
  5518. array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
  5519. <span class="comment">// one duration (fromdate-duration)</span>
  5520. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RDATE,
  5521. array( array( $rdate1, $date2 ),
  5522. array( $rdate3, $rdur7 )),
  5523. array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
  5524. <span class="comment">// period, pairs of fromdate+enddate and fromdate-duration</span>
  5525. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RDATE,
  5526. array( $rdate5, $date8 )),
  5527. array( &quot;VALUE&quot; => &quot;DATE&quot; ));
  5528. <span class="comment">// dates in DATE format</span>
  5529. </p>
  5530. <br>
  5531. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5532. <a name="RECURRENCE-ID"></a><h3>3.2.30 RECURRENCE-ID</h3>
  5533. <p>
  5534. This property is used in conjunction with the <a href="#UID">UID</a> and <a href="#SEQUENCE">SEQUENCE</a>
  5535. property to identify a specific instance of a recurring <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>
  5536. or <a href="#VJOURNAL">VJOURNAL</a> <strong>calendar</strong> component and is OPTIONAL and MAY NOT occur more than once.
  5537. </p>
  5538. <p>
  5539. The property value is the effective value of the <a href="#DTSTART">DTSTART</a> property of the recurrence instance.
  5540. The default value type is DATE-TIME, can be set to DATE (params<sup>2</sup>).
  5541. </p>
  5542. <p>For methods and formatting, explore the <a href="#DTEND">DTEND</a> property.</p>
  5543. <p>
  5544. The calendar method <a href="#sort2">SORT</a> with argument <a href="#UID">UID</a> also use RECURRENCE-ID / <a href="#SEQUENCE">SEQUENCE</a> as
  5545. sort parameters.
  5546. </p>
  5547. <p>
  5548. To ease up usage, kigkonsult\iCalcreator\util\util::$RECURRENCE_ID is available.
  5549. </p>
  5550. <br>
  5551. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5552. <a name="RELATED-TO"></a><h3>3.2.31 RELATED-TO</h3>
  5553. <p>
  5554. The property is used to represent a relationship or reference between one <strong>calendar</strong> component and another
  5555. and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.
  5556. </p>
  5557. <p>
  5558. The property value consists of the persistent, globally unique identifier of another <strong>calendar</strong> component.
  5559. This value would be represented in a <strong>calendar</strong> component by the <a href="#UID">UID</a> property.
  5560. </p>
  5561. <p>
  5562. The value type for RELATED-TO is TEXT.
  5563. </p>
  5564. <p>
  5565. To ease up usage, kigkonsult\iCalcreator\util\util::$RELATED_TO as used in code snippets is available.
  5566. </p>
  5567. <h5>Create RELATED-TO</h5>
  5568. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5569. <p class="label">Format</p>
  5570. <p class="format">calendarComponent::createRelatedTo()</p>
  5571. <p class="label">Example</p>
  5572. <p class="example">
  5573. $str = $component-&gt;createRelatedTo();
  5574. </p>
  5575. <h5>Delete RELATED-TO</h5>
  5576. <p>Remove RELATED-TO from component.</p>
  5577. <p class="label">Format</p>
  5578. <p class="format">calendarComponent::deleteProperty( kigkonsult\iCalcreator\util\util::$RELATED_TO )</p>
  5579. <p class="label">Example 1</p>
  5580. <p>Delete /single/first) RELATED-TO property</p>
  5581. <p class="example">
  5582. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RELATED_TO )</p>
  5583. <p class="label">Example 2</p>
  5584. <p>Delete RELATED-TO property no 2.</p>
  5585. <p class="example">
  5586. $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RELATED_TO, 2 );
  5587. </p>
  5588. <p class="label">Example 3</p>
  5589. <p>Deleting all RELATED-TO properties.</p>
  5590. <p class="example">
  5591. while( $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RELATED_TO ))
  5592. continue;
  5593. </p>
  5594. <h5>Get RELATED-TO</h5>
  5595. <p>If set, returns property value, otherwise bool false.</p>
  5596. <p class="label">Format 1</p>
  5597. <p class="format">calendarComponent::getProperty( &quot;RELATED-TO&quot; )</p>
  5598. <p class="comment">output = relid<sup>1</sup></p>
  5599. <p class="label">Format 2</p>
  5600. <p class="format">calendarComponent::getProperty( &quot;RELATED-TO&quot;, propOrderNo/false , true )</p>
  5601. <p class="comment">propOrderNo = (int) specific property value</p>
  5602. <p class="comment">output = array( &quot;value&quot; =&gt; relid<sup>1</sup>
  5603. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  5604. <p class="label">Format 3</p>
  5605. <p class="format">calendarComponent::getProperty( &quot;RELATED-TO&quot;, propOrderNo )</p>
  5606. <p class="comment">propOrderNo = (int) specific property value</p>
  5607. <p class="comment">Get propOrderNo RELATED-TO</p>
  5608. <p class="label">Example</p>
  5609. <p class="example">
  5610. $relatedId = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$RELATED_TO );
  5611. </p>
  5612. <h5>Set RELATED-TO</h5>
  5613. <p>Insert property value.</p>
  5614. <p class="label">Format</p>
  5615. <p class="format">calendarComponent::setProperty( &quot;Related-To&quot;, relid [, params [, propOrderNo ]] )</p>
  5616. <p class="comment">relid<sup>1</sup> = (string) Value type TEXT.
  5617. params<sup>2</sup> = (array) ( [ reltype ] *[, xparams] )
  5618. reltype = &quot;RELTYPE&quot; =&gt; (&quot;PARENT&quot; (Default)
  5619. / &quot;CHILD&quot;
  5620. / &quot;SIBLING&quot;
  5621. / (string) iana-token
  5622. / (string) x-name )
  5623. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  5624. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  5625. </p>
  5626. <p class="label">Example</p>
  5627. <p class="example">
  5628. $vtodo-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RELATED_TO,
  5629. &quot;19960401-080045-4000F192713@host.com&quot;);
  5630. </p>
  5631. <br>
  5632. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5633. <a name="REPEAT"></a><h3>3.2.32 REPEAT</h3>
  5634. <p>
  5635. This property defines the number of time the <a href="#VALARM">ALARM</a> should be repeated, after the initial trigger.
  5636. If the <a href="#VALARM">ALARM</a> triggers more than once, then this property MUST be specified along with the <a href="#DURATION">DURATION</a> property.
  5637. </p>
  5638. <p>The value type for REPEAT is INTEGER.</p>
  5639. <p>
  5640. To ease up usage, kigkonsult\iCalcreator\util\util::$REPEAT as used in code snippets is available.
  5641. </p>
  5642. <h5>Create REPEAT</h5>
  5643. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5644. <p class="label">Format</p>
  5645. <p class="format">calendarComponent::createRepeat()</p>
  5646. <p class="label">Example</p>
  5647. <p class="example">
  5648. $str = $component-&gt;createRepeat();
  5649. </p>
  5650. <h5>Delete REPEAT</h5>
  5651. <p>Remove REPEAT from component.</p>
  5652. <p class="label">Format</p>
  5653. <p class="format">calendarComponent::deleteProperty( &quot;REPEAT&quot; )</p>
  5654. <p class="label">Example</p>
  5655. <p class="example">
  5656. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$REPEAT );
  5657. </p>
  5658. <h5>Get REPEAT</h5>
  5659. <p>If set, returns property value, otherwise bool false.</p>
  5660. <p class="label">Format 1</p>
  5661. <p class="format">calendarComponent::getProperty( &quot;REPEAT&quot; )</p>
  5662. <p class="comment">output = repeatTimes<sup>1</sup></p>
  5663. <p class="label">Format 2</p>
  5664. <p class="format">calendarComponent::getProperty( &quot;REPEAT&quot;, false , true )</p>
  5665. <p class="comment">output = array( &quot;value&quot; =&gt; repeatTimes<sup>1</sup>
  5666. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  5667. <p class="label">Example</p>
  5668. <p class="example">
  5669. $repeat = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$REPEAT );
  5670. </p>
  5671. <h5>Set REPEAT</h5>
  5672. <p>Insert property value.</p>
  5673. <p class="label">Format</p>
  5674. <p class="format">calendarComponent::setProperty( &quot;repeat&quot;, repeatTimes [, xparams ] )</p>
  5675. <p class="comment">repeatTimes<sup>1</sup> = (int) Value type INTEGER
  5676. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  5677. </p>
  5678. <p class="label">Example</p>
  5679. <p class="example">
  5680. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$REPEAT, 2 );
  5681. </p>
  5682. <br>
  5683. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5684. <a name="REQUEST-STATUS"></a><h3>3.2.33 REQUEST-STATUS</h3>
  5685. <p>
  5686. This property defines the status code returned for a scheduling request and is OPTIONAL and
  5687. MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
  5688. </p>
  5689. <p>The value type for REQUEST-STATUS is TEXT and consists of</p>
  5690. <dl>
  5691. <dt>a short return status component,
  5692. <dd>(in output) a PERIOD character separated 3-tuple of integers, ex 3.11
  5693. <dt>a longer return status description component
  5694. <dt>optionally a statusspecific data component
  5695. </dl>
  5696. <p>
  5697. To ease up usage, kigkonsult\iCalcreator\util\util::$REQUEST_STATUS as used in code snippets is available.
  5698. </p>
  5699. <h5>Create REQUEST-STATUS</h5>
  5700. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5701. <p class="label">Format</p>
  5702. <p class="format">calendarComponent::createRequestStatus()</p>
  5703. <p class="label">Example</p>
  5704. <p class="example">
  5705. $str = $component-&gt;createRequestStatus();
  5706. </p>
  5707. <h5>Delete REQUEST-STATUS</h5>
  5708. <p>Remove REQUEST-STATUS from component.</p>
  5709. <p class="label">Format</p>
  5710. <p class="format">calendarComponent::deleteProperty( &quot;REQUEST-STATUS&quot; )</p>
  5711. <p class="label">Example 1</p>
  5712. <p>Delete (single/first) REQUEST-STATUS property.</p>
  5713. <p class="example">
  5714. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$REQUEST_STATUS );
  5715. </p>
  5716. <p class="label">Example 2</p>
  5717. <p>Delete REQUEST-STATUS property no 2.</p>
  5718. <p class="example">
  5719. $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$REQUEST_STATUS, 2 );
  5720. </p>
  5721. <p class="label">Example 3</p>
  5722. <p>Deleting all REQUEST-STATUS properties.</p>
  5723. <p class="example">
  5724. while( $vjournal-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$REQUEST_STATUS ))
  5725. continue;
  5726. </p>
  5727. <h5>Get REQUEST-STATUS</h5>
  5728. <p>If set, returns property value, otherwise bool false.</p>
  5729. <p class="label">Format 1</p>
  5730. <p class="format">calendarComponent::getProperty( &quot;REQUEST-STATUS&quot; )</p>
  5731. <p class="comment">output = array( &quot;statcode&quot; =&gt; statcode<sup>1</sup>
  5732. , &quot;text&quot; =&gt; errtext<sup>2</sup>
  5733. [ , &quot;extdata&quot; =&gt; extraData<sup>3</sup> ] )</p>
  5734. <p class="label">Format 2</p>
  5735. <p class="format">calendarComponent::getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo/false, true )</p>
  5736. <p class="comment">propOrderNo = (int) specific property value</p>
  5737. <p class="comment">output = array( &quot;value&quot; =&gt; array( &quot;statcode&quot; =&gt; statcode<sup>1</sup>
  5738. , &quot;text&quot; =&gt; errtext<sup>2</sup>
  5739. [ , &quot;extdata&quot; =&gt; extraData<sup>3</sup> ] )
  5740. , &quot;params&quot; =&gt; params<sup>4</sup> )</p>
  5741. <p class="label">Format 3</p>
  5742. <p class="format">calendarComponent::getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo )</p>
  5743. <p class="comment">propOrderNo = (int) specific property value</p>
  5744. <p class="comment">Get propOrderNo REQUEST-STATUS</p>
  5745. <p class="label">Example</p>
  5746. <p class="example">
  5747. $requestStatus = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$REQUEST_STATUS );
  5748. </p>
  5749. <h5>Set REQUEST-STATUS</h5>
  5750. <p>Insert property value.</p>
  5751. <p class="label">Format</p>
  5752. <p class="format">calendarComponent::setProperty( &quot;Request-Status&quot;
  5753. , statcode, errtext [,extraData/false [,params [,propOrderNo]]])</p>
  5754. <p class="comment">statcode<sup>1</sup> = (int) Hierarchical, numeric return status code
  5755. (1*DIGIT &quot;.&quot; 1*DIGIT 1*DIGIT)
  5756. errtext<sup>2</sup> = (string) Textual status description
  5757. extraData<sup>3</sup> = (string) Textual exception data.
  5758. For example, the offending property name and value
  5759. or complete property line.
  5760. params<sup>4</sup> = (array) ( [&quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;] *[, xparams ] )
  5761. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  5762. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  5763. lang<sup>*</sup> = as defined in [RFC5546]</p>
  5764. <p class="label">Example</p>
  5765. <p class="example">
  5766. $vfreebusy-&gt;setProperty(kigkonsult\iCalcreator\util\util::$REQUEST_STATUS,
  5767. 2.00,
  5768. &quot;Invalid property value&quot;,
  5769. &quot;DTSTART:96-Apr-31&quot;);
  5770. </p>
  5771. <br>
  5772. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5773. <a name="RESOURCES"></a><h3>3.2.34 RESOURCES</h3>
  5774. <p>
  5775. This property defines the equipment or resources anticipated for an activity specified by a <strong>calendar</strong> entity
  5776. and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.
  5777. </p>
  5778. <p>The value type for RESOURCES is TEXT.</p>
  5779. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) RESOURCES values.</p>
  5780. <p>
  5781. To ease up usage, kigkonsult\iCalcreator\util\util::$RESOURCES as used in code snippets is available.
  5782. </p>
  5783. <h5>Create RESOURCES</h5>
  5784. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5785. <p class="label">Format</p>
  5786. <p class="format">calendarComponent::createResources()</p>
  5787. <p class="label">Example</p>
  5788. <p class="example">
  5789. $str = $component-&gt;createResources();
  5790. </p>
  5791. <h5>Delete RESOURCES</h5>
  5792. <p>Remove RESOURCES from component.</p>
  5793. <p class="label">Format</p>
  5794. <p class="format">calendarComponent::deleteProperty( &quot;RESOURCES&quot; )</p>
  5795. <p class="label">Example 1</p>
  5796. <p>Delete (single/first) RESOURCES property.</p>
  5797. <p class="example">
  5798. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RESOURCES );
  5799. </p>
  5800. <p class="label">Example 2</p>
  5801. <p>Delete RESOURCES property no 2.</p>
  5802. <p class="example">
  5803. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RESOURCES, 2 );
  5804. </p>
  5805. <p class="label">Example 3</p>
  5806. <p>Delete all RESOURCES properties.<p>
  5807. <p class="example">
  5808. while( $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RESOURCES ))
  5809. continue;
  5810. </p>
  5811. <h5>Get RESOURCES</h5>
  5812. <p>If set, returns property value, otherwise bool false.</p>
  5813. <p class="label">Format 1</p>
  5814. <p class="format">calendarComponent::getProperty( &quot;RESOURCES&quot; )</p>
  5815. <p class="comment">output = resources<sup>1</sup></p>
  5816. <p class="label">Format 2</p>
  5817. <p class="format">calendarComponent::getProperty( &quot;RESOURCES&quot;, propOrderNo/false, true )</p>
  5818. <p class="comment">propOrderNo = (int) specific property value</p>
  5819. <p class="comment">output = array( &quot;value&quot; =&gt; resources<sup>1</sup>
  5820. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  5821. <p class="label">Format 3</p>
  5822. <p class="format">calendarComponent::getProperty( &quot;RESOURCES&quot;, propOrderNo )</p>
  5823. <p class="comment">propOrderNo = (int) specific property value</p>
  5824. <p class="comment">Get propOrderNo RESOURCES</p>
  5825. <p class="label">Example</p>
  5826. <p class="example">
  5827. $resources = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$RESOURCES );
  5828. </p>
  5829. <h5>Set RESOURCES</h5>
  5830. <p>Insert property value.</p>
  5831. <p>
  5832. In spite of the fact that RESOURCES may contain a (comma separated) list of values,
  5833. a strong recommendation is to split a RESOURCES &quot;list&quot; into multiple single RESOURCES entries.
  5834. </p>
  5835. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  5836. <p class="label">Format</p>
  5837. <p class="format">calendarComponent::setProperty( &quot;resources&quot;, resources [, params [, propOrderNo ]] )</p>
  5838. <p class="comment">resources<sup>1</sup> = (string) resource / (array) ( *resource )
  5839. resource = (string) textual resources or subtypes of the <strong>calendar</strong> component,
  5840. can be specified as a list of resources
  5841. separated by the COMMA character.
  5842. params<sup>2</sup> = (array) (
  5843. [ &quot;ALTREP&quot; =&gt; (string) &quot;&lt;an alternate text representation, URI&gt;&quot;]
  5844. [, &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;]
  5845. *[, xparams] )
  5846. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  5847. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  5848. lang<sup>*</sup> = as defined in [RFC5546]</p>
  5849. <p class="label">Example</p>
  5850. <p class="example">
  5851. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$RESOURCES,
  5852. &quot;COMPUTER PROJECTOR&quot; );
  5853. </p>
  5854. <br>
  5855. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5856. <a name="RRULE"></a><h3>3.2.35 RRULE</h3>
  5857. <p>
  5858. This property defines a rule or repeating pattern for recurring <a href="#VEVENT">EVENTs</a>, <a href="#VTODO">TODOs</a>,
  5859. <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> definitions and is OPTIONAL and MAY occur more than once ([RFC2445]),
  5860. SHOULD NOT occur more than once ([RFC5545]).
  5861. </p>
  5862. <p>
  5863. To ease up usage, kigkonsult\iCalcreator\util\util::$RRULE as used in code snippets is available.
  5864. </p>
  5865. <h5>Create RRULE</h5>
  5866. <p>If set, returns iCal formatted string, otherwise null.</p>
  5867. <p class="label">Format</p>
  5868. <p class="format">calendarComponent::createRrule()</p>
  5869. <p class="label">Example</p>
  5870. <p class="example">
  5871. $str = $component-&gt;createRrule();
  5872. </p>
  5873. <h5>Delete RRULE</h5>
  5874. <p>Remove RRULE from component.</p>
  5875. <p class="label">Format</p>
  5876. <p class="format">calendarComponent::deleteProperty( &quot;RRULE&quot; )</p>
  5877. <p class="label">Example 1</p>
  5878. <p>Delete (single/first) RRULE property.</p>
  5879. <p class="example">
  5880. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RRULE );
  5881. </p>
  5882. <p class="label">Example 2</p>
  5883. <p>Delete RRULE property no 2.</p>
  5884. <p class="example">
  5885. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RRULE, 2 );
  5886. </p>
  5887. <p class="label">Example 3</p>
  5888. <p>Delete all RRULE properties.</p>
  5889. <p class="example">
  5890. while( $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$RRULE ))
  5891. continue;
  5892. </p>
  5893. <h5>Get RRULE</h5>
  5894. <p>If set, returns property value, otherwise bool false.</p>
  5895. <p class="label">Format 1</p>
  5896. <p class="format">calendarComponent::getProperty( &quot;RRULE&quot; )</p>
  5897. <p class="comment">output = recur<sup>1</sup></p>
  5898. <p class="label">Format 2</p>
  5899. <p class="format">calendarComponent::getProperty( &quot;RRULE&quot;, propOrderNo/false, true )</p>
  5900. <p class="comment">propOrderNo = (int) specific property value</p>
  5901. <p class="comment">output = array( &quot;value&quot; =&gt; recur<sup>1</sup>
  5902. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  5903. <p class="label">Format 3</p>
  5904. <p class="format">calendarComponent::getProperty( &quot;RRULE&quot;, propOrderNo )</p>
  5905. <p class="comment">propOrderNo = (int) specific property value</p>
  5906. <p class="comment">Get propOrderNo RRULE</p>
  5907. <p class="label">Example</p>
  5908. <p class="example">
  5909. $rrules = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$RRULE );
  5910. </p>
  5911. <h5>Set RRULE</h5>
  5912. <p>Insert property value.</p>
  5913. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  5914. <p class="label">Format</p>
  5915. <p class="format">calendarComponent::setProperty( &quot;rrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
  5916. <p>
  5917. For rules example see <a href="#EXRULE">Exrule</a> format and in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
  5918. </p>
  5919. <p class="comment">recur<sup>1</sup> = see <a href="#EXRULE">Exrule</a>
  5920. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  5921. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  5922. </p>
  5923. <br>
  5924. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  5925. <a name="SEQUENCE"></a><h3>3.2.36 SEQUENCE</h3>
  5926. <p>
  5927. This property defines the revision sequence number of the <strong>calendar</strong> component within a sequence of revisions.
  5928. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
  5929. <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
  5930. </p>
  5931. <p class="quotes">
  5932. It is monotonically incremented by the <a href="#ORGANIZER">ORGANIZER's</a> CUA (Calendar
  5933. User Agent) each time the <a href="#ORGANIZER">ORGANIZER</a> makes a significant revision
  5934. to the <strong>calendar</strong> component.
  5935. <br><br>
  5936. When the <a href="#ORGANIZER">ORGANIZER</a> makes changes to one of the following
  5937. properties, the sequence number MUST be incremented: <a href="#DTSTART">DTSTART</a>,
  5938. <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#RDATE">RDATE</a>, <a href="#RRULE">RRULE</a>,
  5939. <a href="#EXDATE">EXDATE</a>, <a href="#EXRULE">EXRULE</a>, <a href="#STATUS">STATUS</a>. In addition,
  5940. changes made by the <a href="#ORGANIZER">ORGANIZER</a> to other properties can also force
  5941. the sequence number to be incremented. The <a href="#ORGANIZER">ORGANIZER</a> CUA MUST
  5942. increment the sequence number when ever it makes changes to
  5943. properties in the <strong>calendar</strong> component that the <a href="#ORGANIZER">ORGANIZER</a>
  5944. deems will jeopardize the validity of the participation status of the
  5945. <a href="#ATTENDEE">Attendees</a>. For example, changing the location
  5946. of a meeting from one locale to another distant locale could
  5947. effectively impact the participation status of the <a href="#ATTENDEE">Attendees</a>.
  5948. </p>
  5949. <p>The value type of SEQUENCE is INTEGER.</p>
  5950. <p>The calendar method <a href="#sort2">SORT</a> with argument <a href="#UID">UID</a> also use <a href="#RECURRENCE-ID">RECURRENCE-ID</a> / SEQUENCE as
  5951. sort parameters.</p>
  5952. <p>
  5953. To ease up usage, kigkonsult\iCalcreator\util\util::$SEQUENCE as used in code snippets is available.
  5954. </p>
  5955. <h5>Create SEQUENCE</h5>
  5956. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  5957. <p class="label">Format</p>
  5958. <p class="format">calendarComponent::createSequence()</p>
  5959. <p class="label">Example</p>
  5960. <p class="example">
  5961. $str = $component-&gt;createSequence();
  5962. </p>
  5963. <h5>Delete SEQUENCE</h5>
  5964. <p>Remove SEQUENCE from component.</p>
  5965. <p class="label">Format</p>
  5966. <p class="format">calendarComponent::deleteProperty( &quot;SEQUENCE&quot; )</p>
  5967. <p class="label">Example</p>
  5968. <p class="example">
  5969. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$SEQUENCE );
  5970. </p>
  5971. <h5>Get SEQUENCE</h5>
  5972. <p>If set, returns property value, otherwise bool false.</p>
  5973. <p class="label">Format 1</p>
  5974. <p class="format">calendarComponent::getProperty( &quot;SEQUENCE&quot; )</p>
  5975. <p class="comment">output = sequence<sup>1</sup></p>
  5976. <p class="label">Format 2</p>
  5977. <p class="format">calendarComponent::getProperty( &quot;SEQUENCE&quot;, false , true )</p>
  5978. <p class="comment">output = array( &quot;value&quot; =&gt; sequence<sup>1</sup>
  5979. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  5980. <p class="label">Example</p>
  5981. <p class="example">
  5982. $sequence = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$SEQUENCE );
  5983. </p>
  5984. <h5>Set SEQUENCE</h5>
  5985. <p>Insert property value.</p>
  5986. <p class="label">Format</p>
  5987. <p class="format">calendarComponent::setProperty( &quot;sequence&quot; [, sequence [, xparams ]] )</p>
  5988. <p class="comment">sequence<sup>1</sup> = (int) Value type INTEGER
  5989. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  5990. </p>
  5991. <p class="label">Example 1</p>
  5992. <p class="example">
  5993. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$SEQUENCE, 2 );
  5994. <span class="comment">// set sequence number to 2</span>
  5995. </p>
  5996. <p class="label">Example 2</p>
  5997. <p class="example">
  5998. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$SEQUENCE );
  5999. <span class="comment">// force sequence number to be set to 0
  6000. // or, if sequence exists, incremented by 1</span>
  6001. </p>
  6002. <br>
  6003. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6004. <a name="STATUS"></a><h3>3.2.37 STATUS</h3>
  6005. <p>
  6006. This property defines the overall status or confirmation for the <strong>calendar</strong> component.
  6007. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>
  6008. and <a href="#VJOURNAL">VJOURNAL</a> components.
  6009. </p>
  6010. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) STATUS values.</p>
  6011. <p>
  6012. To ease up usage, kigkonsult\iCalcreator\util\util::$STATUS as used in code snippets is available.
  6013. </p>
  6014. <h5>Create STATUS</h5>
  6015. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6016. <p class="label">Format</p>
  6017. <p class="format">calendarComponent::createStatus()</p>
  6018. <p class="label">Example</p>
  6019. <p class="example">
  6020. $str = $component-&gt;createStatus();
  6021. </p>
  6022. <h5>Delete STATUS</h5>
  6023. <p>Remove STATUS from component.</p>
  6024. <p class="label">Format</p>
  6025. <p class="format">calendarComponent::deleteProperty( &quot;STATUS&quot; )</p>
  6026. <p class="label">Example</p>
  6027. <p class="example">
  6028. $vtodo-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$STATUS );
  6029. </p>
  6030. <h5>Get STATUS</h5>
  6031. <p>If set, returns property value, otherwise bool false.</p>
  6032. <p class="label">Format 1</p>
  6033. <p class="format">calendarComponent::getProperty( &quot;STATUS&quot; )</p>
  6034. <p class="comment">output = status<sup>1</sup></p>
  6035. <p class="label">Format 2</p>
  6036. <p class="format">calendarComponent::getProperty( &quot;STATUS&quot;, false , true )</p>
  6037. <p class="comment">output = array( &quot;value&quot; =&gt; status<sup>1</sup>
  6038. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6039. <p class="label">Example</p>
  6040. <p class="example">
  6041. $status = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$STATUS );
  6042. </p>
  6043. <h5>Set STATUS</h5>
  6044. <p>Insert property value.</p>
  6045. <p class="label">Format</p>
  6046. <p class="format">calendarComponent::setProperty( &quot;status&quot;, status [, xparams ] )</p>
  6047. <p class="comment"> // <span class="comment">Status values for a <a href="#vevent">VEVENT</a></span>
  6048. status<sup>1</sup> = &quot;TENTATIVE&quot; // <span class="comment">Indicates event is tentative</span>
  6049. / &quot;CONFIRMED&quot; // <span class="comment">Indicates event is definite</span>
  6050. / &quot;CANCELLED&quot; // <span class="comment">Indicates event was cancelled</span>
  6051. // <span class="comment">Status values for <a href="#VTODO">VTODO</a></span>
  6052. status<sup>1</sup> = &quot;NEEDS-ACTION&quot; // <span class="comment">Indicates to-do needs action</span>
  6053. / &quot;COMPLETED&quot; // <span class="comment">Indicates to-do completed</span>
  6054. / &quot;IN-PROCESS&quot; // <span class="comment">Indicates to-do in process of</span>
  6055. / &quot;CANCELLED&quot; // <span class="comment">Indicates to-do was cancelled</span>
  6056. // <span class="commsnt">Status values for <a href="#VJOURNAL">VJOURNAL</a></span>
  6057. status<sup>1</sup> = &quot;DRAFT&quot; // <span class="comment">Indicates journal is draft</span>
  6058. / &quot;FINAL&quot; // <span class="comment">Indicates journal is final</span>
  6059. / &quot;CANCELLED&quot; // <span class="comment">Indicates journal is removed</span>
  6060. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6061. </p>
  6062. <p class="label">Example</p>
  6063. <p class="example">
  6064. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$STATUS, &quot;COMPLETED&quot; );
  6065. </p>
  6066. <br>
  6067. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6068. <a name="SUMMARY"></a><h3>3.2.38 SUMMARY</h3>
  6069. <p>
  6070. This property defines a short (&quot;one line&quot;) summary or subject for the <strong>calendar</strong> component.
  6071. (In &quot;[RFC5545], Recommended Practices&quot;, up to 255 characters) (, analogous to a mail SUBJECT).
  6072. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>
  6073. and <a href="#VJOURNAL">VJOURNAL</a> components. The property is REQUIRED and MUST occur once in
  6074. <a href="#VALARM">VALARM</a> (EMAIL) <strong>calendar</strong> component.
  6075. </p>
  6076. <p>The value type for SUMMARY is TEXT.</p>
  6077. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) SUMMARY values.</p>
  6078. <p>
  6079. To ease up usage, kigkonsult\iCalcreator\util\util::$SUMMARY as used in code snippets is available.
  6080. </p>
  6081. <h5>Create SUMMARY</h5>
  6082. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6083. <p class="label">Format</p>
  6084. <p class="format">calendarComponent::createSummary()</p>
  6085. <p class="label">Example</p>
  6086. <p class="example">
  6087. $str = $component-&gt;createSummary();
  6088. </p>
  6089. <h5>Delete SUMMARY</h5>
  6090. <p>Remove SUMMARY from component.</p>
  6091. <p class="label">Format</p>
  6092. <p class="format">calendarComponent::deleteProperty( &quot;SUMMARY&quot; )</p>
  6093. <p class="label">Example</p>
  6094. <p class="example">
  6095. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$SUMMARY );
  6096. </p>
  6097. <h5>Get SUMMARY</h5>
  6098. <p>If set, returns property value, otherwise bool false.</p>
  6099. <p class="label">Format 1</p>
  6100. <p class="format">calendarComponent::getProperty( &quot;SUMMARY&quot; )</p>
  6101. <p class="comment">output = summary<sup>1</sup></p>
  6102. <p class="label">Format 2</p>
  6103. <p class="format">calendarComponent::getProperty( &quot;SUMMARY&quot;, false , true )</p>
  6104. <p class="comment">output = array( &quot;value&quot; =&gt; summary<sup>1</sup>
  6105. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  6106. <p class="label">Example</p>
  6107. <p class="example">
  6108. $summary = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$SUMMARY );
  6109. </p>
  6110. <h5>Set SUMMARY</h5>
  6111. <p>Insert property value.</p>
  6112. <p>Parameters will be ordered as prescribed in [RFC5545].</p>
  6113. <p class="label">Format</p>
  6114. <p class="format">calendarComponent::setProperty( &quot;summary&quot;, summary [, params ] )</p>
  6115. <p CLASS="comment">summary<sup>1</sup> = (string) Value type TEXT,
  6116. a short, one line summary about the activity or journal entry.
  6117. params<sup>2</sup> = array( [&quot;ALTREP&quot; =&gt; (string) &quot;&lt;an alternate text representation, URI&gt;&quot;]
  6118. [, &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;]
  6119. *[, xparams ] )
  6120. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  6121. lang<sup>*</sup> = as defined in [RFC5546]</p>
  6122. <p class="label">Example</p>
  6123. <p class="example">
  6124. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$SUMMARY, &quot;This is a summary&quot; );
  6125. </p>
  6126. <br>
  6127. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6128. <a name="TRANSP"></a><h3>3.2.39 TRANSP</h3>
  6129. <p>
  6130. This property defines whether an <a href="#VEVENT">EVENT</a> is transparent or not to busy time searches and is OPTIONAL and MUST NOT occur more than once.
  6131. </p>
  6132. <p>
  6133. To ease up usage, kigkonsult\iCalcreator\util\util::$TRANSP as used in code snippets is available.
  6134. </p>
  6135. <h5>Create TRANSP</h5>
  6136. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6137. <p class="label">Format</p>
  6138. <p class="format">calendarComponent::createTransp()</p>
  6139. <p class="label">Example</p>
  6140. <p class="example">
  6141. $str = $component-&gt;createTransp();
  6142. </p>
  6143. <h5>Delete TRANSP</h5>
  6144. <p>Remove TRANSP from component.</p>
  6145. <p class="label">Format</p>
  6146. <p class="format">calendarComponent::deleteProperty( &quot;TRANSP&quot; )</p>
  6147. <p class="label">Example</p>
  6148. <p class="example">
  6149. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TRANSP );
  6150. </p>
  6151. <h5>Get TRANSP</h5>
  6152. <p>If set, returns property value, otherwise bool false.</p>
  6153. <p class="label">Format 1</p>
  6154. <p class="format">calendarComponent::getProperty( &quot;TRANSP&quot; )</p>
  6155. <p class="comment">output = transp<sup>1</sup></p>
  6156. <p class="label">Format 2</p>
  6157. <p class="format">calendarComponent::getProperty( &quot;TRANSP&quot;, false , true )</p>
  6158. <p class="comment">output = array( &quot;value&quot; =&gt; transp<sup>1</sup>
  6159. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6160. <p class="label">Example</p>
  6161. <p class="example">
  6162. $transp = $vtodo-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TRANSP );
  6163. </p>
  6164. <h5>Set TRANSP</h5>
  6165. <p>Insert property value.</p>
  6166. <p class="label">Format</p>
  6167. <p class="format">calendarComponent::setProperty( &quot;transp&quot;, transp [, xparams ] )</p>
  6168. <p class="comment">transp<sup>1</sup> = &quot;OPAQUE&quot; / &quot;TRANSPARENT&quot;
  6169. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6170. </p>
  6171. <p class="label">Example</p>
  6172. <p class="example">
  6173. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRANSP, &quot;TRANSPARENT&quot; );
  6174. </p>
  6175. <br>
  6176. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6177. <a name="TRIGGER"></a><h3>3.2.40 TRIGGER</h3>
  6178. <p>
  6179. This property specifies when an <a href="#VALARM">ALARM</a> will trigger and is REQUIRED and MUST NOT occur more than once.
  6180. </p>
  6181. <p>
  6182. The default value type is DURATION. The value type can be set to a DATE-TIME value type,
  6183. in which case the value MUST specify an <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME value.
  6184. </p>
  6185. <p>
  6186. To ease up usage, kigkonsult\iCalcreator\util\util::$TRIGGER as used in code snippets is available.
  6187. </p>
  6188. <h5>Create TRIGGER</h5>
  6189. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6190. <p class="label">Format</p>
  6191. <p class="format">valarm::createTrigger()</p>
  6192. <p class="label">Example</p>
  6193. <p class="example">
  6194. $str = $component-&gt;createTrigger();
  6195. </p>
  6196. <h5>Delete TRIGGER</h5>
  6197. <p>Remove TRIGGER from component.</p>
  6198. <p class="label">Format</p>
  6199. <p class="format">valarm::deleteProperty( &quot;TRIGGER&quot; )</p>
  6200. <p class="label">Example</p>
  6201. <p class="example">
  6202. $valarm-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TRIGGER );
  6203. </p>
  6204. <h5>Get TRIGGER</h5>
  6205. <p>If set, returns property value, otherwise bool false.</p>
  6206. <p class="label">Format 1</p>
  6207. <p class="format">valarm::getProperty( &quot;TRIGGER&quot; )</p>
  6208. <p class="comment">output = duration/date</p>
  6209. <p class="label">Format 2</p>
  6210. <p class="format">valarm::getProperty( &quot;TRIGGER&quot;, false , true )</p>
  6211. <p class="comment">output = array( &quot;value&quot; =&gt; duration<sup>1</sup>/date<sup>3</sup> )
  6212. , &quot;params&quot; =&gt; params<sup>4</sup> )
  6213. <p class="label">Example</p>
  6214. <p class="example">
  6215. $trigger = $valarm-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TRIGGER );
  6216. </p>
  6217. <h5>Set TRIGGER</h5>
  6218. <p>Insert property value.</p>
  6219. <p>Note, use function <a href="#transformDateTime">transformDateTime</a> to change a (local) datetime to UTC time zone.</p>
  6220. <p class="label">Format 1</p>
  6221. <p class="format">valarm::setProperty( &quot;trigger&quot;, duration<sup>1</sup> [, params<sup>4</sup> ] )</p>
  6222. <p class="label">Format 2</p>
  6223. <p class="format">valarm::setProperty( &quot;trigger&quot;, duration<sup>2</sup> [, params<sup>4</sup> ] )</p>
  6224. <p class="label">Format 3</p>
  6225. <p class="format">valqarm::setProperty( &quot;trigger&quot;, date<sup>3</sup> [, params<sup>4</sup> ] )</p>
  6226. <p class="label">Format</p>
  6227. <p class="format">valarm::setProperty( &quot;trigger&quot;, (int) year / null
  6228. , (int) month / null
  6229. , (int) day / null
  6230. [, (int) week / null
  6231. [, (int) hour / null
  6232. , (int) min / null
  6233. , (int) sec / null
  6234. [, relatedStart
  6235. [, before
  6236. [, params<sup>4</sup> ]]]]] )</p>
  6237. <p class="comment">duration<sup>1</sup> = (array) ( &quot;week&quot; =&gt; (int) week
  6238. , &quot;relatedStart&quot; =&gt; relatedStart
  6239. , &quot;before&quot; =&gt; before )
  6240. duration<sup>1</sup> = (array) ( &quot;day&quot; =&gt; (int) day
  6241. , &quot;hour&quot; =&gt; (int) hour
  6242. , &quot;min&quot; =&gt; (int) min
  6243. , &quot;sec&quot; =&gt; (int) sec
  6244. , &quot;relatedStart&quot; =&gt; relatedStart
  6245. , &quot;before&quot; =&gt; before )
  6246. relatedStart = (bool) true : related start (default),
  6247. false : related end
  6248. before = (booL) true : before relatedStart (default),
  6249. false : after relatedStart
  6250. duration<sup>2</sup> = (string) dur-value = ([&quot;+&quot;]/&quot;-&quot;)&quot;P&quot;(dur-date/dur-time/dur-week)
  6251. dur-date = dur-day [dur-time]
  6252. dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
  6253. dur-week = 1*DIGIT &quot;W&quot;
  6254. dur-day = 1*DIGIT &quot;D&quot;
  6255. dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
  6256. dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
  6257. dur-second = 1*DIGIT &quot;S&quot;
  6258. date<sup>3</sup> = (array) ( &quot;year&quot; =&gt; (int) year // <span class="comment"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  6259. , &quot;month&quot; =&gt; (int) month
  6260. , &quot;day&quot; =&gt; (int) day
  6261. [, &quot;hour&quot; =&gt; (int) hour
  6262. , &quot;min&quot; =&gt; (int) min
  6263. , &quot;sec&quot; =&gt; (int) sec ])
  6264. date<sup>3</sup> = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp ) // <span class="comment"><a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
  6265. date<sup>3</sup> = (string) datetime string<sup>*</sup>
  6266. params<sup>4</sup> = (array) ( [[ reltype [, trigRelparam ]] / datetimeparam ] *[, xparams ] )
  6267. reltyp = &quot;RELATED&quot; =&gt; &quot;START&quot; (default) / &quot;END&quot;
  6268. trigRelparam = &quot;VALUE&quot; =&gt; &quot;DURATION&quot;
  6269. datetimeparam= &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="comment">mandatory if DATE-TIME</span>
  6270. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  6271. <br>datetime string<sup>*</sup> recommended formats
  6272. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  6273. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  6274. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  6275. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  6276. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  6277. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  6278. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  6279. <p class="label">Example 1</p>
  6280. <p>A duration, 1 hour 2 min 3 sec, before start</p>
  6281. <p class="example">
  6282. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6283. null, null, null, null, 1, 2, 3 );
  6284. </p>
  6285. <p class="label">Example 2</p>
  6286. <p>A duration, 1 hour 2 min 3 sec, before start</p>
  6287. <p class="example">
  6288. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6289. array (&quot;hour&quot;=&gt;1,&quot;min&quot;=&gt;2,&quot;sec&quot;=&gt;3 );
  6290. </p>
  6291. <p class="label">Example 3</p>
  6292. <p>A duration, 1 hour 2 min 3 sec, before start</p>
  6293. <p class="example">
  6294. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6295. &quot;PT1H2M3S&quot; );
  6296. </p>
  6297. <p class="label">Example 4</p>
  6298. <p>A duration, 1 week before start.</p>
  6299. <p class="example">
  6300. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6301. null, null, null, 1 );
  6302. </p>
  6303. <p class="label">Example 5</p>
  6304. <p>A duration, 1 week after end.</p>
  6305. <p class="example">
  6306. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6307. array ( &quot;week&quot; =&gt; 1,
  6308. &quot;relatedStart&quot; =&gt; false,
  6309. &quot;before&quot; =&gt; false ));
  6310. </p>
  6311. <p class="label">Example 6</p>
  6312. <p>A duration, 1 week after end.</p>
  6313. <p class="example">
  6314. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6315. &quot;P1W&quot;,
  6316. array( &quot;related&quot; =&gt; &quot;END&quot; ));
  6317. </p>
  6318. <p class="label">Example 7</p>
  6319. <p class="example">
  6320. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  6321. array( &quot;year&quot; =&gt; 2007,
  6322. &quot;month&quot; =&gt; 6,
  6323. &quot;day&quot; =&gt; 5,
  6324. &quot;hour&quot; =&gt; 2,
  6325. &quot;min&quot; =&gt; 2,
  6326. &quot;sec&quot; =&gt; 3 ),
  6327. array( &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; ));
  6328. </p>
  6329. <br>
  6330. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6331. <a name="TZID"></a><h3>3.2.41 TZID</h3>
  6332. <p>
  6333. This property specifies the text value that uniquely identifies the <a href="#VTIMEZONE">VTIMEZONE</a>
  6334. <strong>calendar</strong> component and is REQUIRED, but MUST NOT occur more than once.
  6335. </p>
  6336. <p>The value type for TZID is TEXT.</p>
  6337. <p>
  6338. To ease up usage, kigkonsult\iCalcreator\util\util::$TZID as used in code snippets is available.
  6339. </p>
  6340. <h5>Create TZID</h5>
  6341. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6342. <p class="label">Format</p>
  6343. <p class="format">vtimezone::createTzid()</p>
  6344. <p class="label">Example</p>
  6345. <p class="example">
  6346. $str = $component-&gt;createTzid();
  6347. </p>
  6348. <h5>Delete TZID</h5>
  6349. <p>Remove TZID from component.</p>
  6350. <p class="label">Format</p>
  6351. <p class="format">vtimezone::deleteProperty( kigkonsult\iCalcreator\util\util::$TZID )</p>
  6352. <p class="label">Example</p>
  6353. <p class="example">
  6354. $vtimezone-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZID );
  6355. </p>
  6356. <h5>Get TZID</h5>
  6357. <p>If set, returns property value, otherwise bool false.</p>
  6358. <p class="label">Format 1</p>
  6359. <p class="format">vtimezone::getProperty( kigkonsult\iCalcreator\util\util::$TZID )</p>
  6360. <p class="comment">output = tzid<sup>1</sup></p>
  6361. <p class="label">Format 2</p>
  6362. <p class="format">vtimezone::getProperty( kigkonsult\iCalcreator\util\util::$TZID, false , true )</p>
  6363. <p class="comment">output = array( &quot;value&quot; =&gt; tzid<sup>1</sup>
  6364. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6365. <p class="label">Example</p>
  6366. <p class="example">
  6367. $tzid = $vtimezone-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TZID );
  6368. </p>
  6369. <h5>Set TZID</h5>
  6370. <p>Insert property value.</p>
  6371. <p class="label">Format</p>
  6372. <p class="format">vtimezone::setProperty( &quot;tzid&quot;, tzid [, xparams ] )</p>
  6373. <p class="comment">tzid<sup>1</sup> = (string) Value type TEXT
  6374. xparams<sup>2</sup> = (array)( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6375. </p>
  6376. <p class="label">Example</p>
  6377. <p class="example">
  6378. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  6379. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  6380. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  6381. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZID,
  6382. &quot;US-Eastern&quot; );
  6383. </p>
  6384. <br>
  6385. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6386. <a name="TZNAME"></a><h3>3.2.42 TZNAME</h3>
  6387. <p>
  6388. This property specifies the customary designation for a <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> description
  6389. and is OPTIONAL and MAY occur more than once.
  6390. </p>
  6391. <p>The value type for TZNAME is TEXT.</p>
  6392. <p>
  6393. To ease up usage, kigkonsult\iCalcreator\util\util::$TZNAME as used in code snippets is available.
  6394. </p>
  6395. <h5>Create TZNAME</h5>
  6396. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6397. <p class="label">Format</p>
  6398. <p class="format">vtimezone::createTzname()</p>
  6399. <p class="label">Example</p>
  6400. <p class="example">
  6401. $str = $component-&gt;createTzname();
  6402. </p>
  6403. <h5>Delete TZNAME</h5>
  6404. <p>Remove TZNAME from component.</p>
  6405. <p class="label">Format</p>
  6406. <p class="format">vtimezone::deleteProperty( &quot;TZNAME&quot; )</p>
  6407. <p class="label">Example 1</p>
  6408. <p>Delete (single/first) TZNAME property.</p>
  6409. <p class="example">
  6410. $vtimezonestd-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZNAME );
  6411. </p>
  6412. <p class="label">Example 2</p>
  6413. <p>Delete TZNAME property no 2.</p>
  6414. <p class="example">
  6415. $vtimezonestd-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZNAME, 2 );
  6416. </p>
  6417. <p class="label">Example 3</p>
  6418. <p>Deleting all TZNAME properties.</p>
  6419. <p class="example">
  6420. while( $vtimezonestd-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZNAME ))
  6421. continue;
  6422. </p>
  6423. <h5>Get TZNAME</h5>
  6424. <p>If set, returns property value, otherwise bool false.</p>
  6425. <p class="label">Format 1</p>
  6426. <p class="format">vtimezone::getProperty( &quot;TZNAME&quot; )</p>
  6427. <p class="comment">output = tzname<sup>1</sup></p>
  6428. <p class="label">Format 2</p>
  6429. <p class="format">vtimezone::getProperty( &quot;TZNAME&quot;, propOrderNo/false, true )</p>
  6430. <p class="comment">propOrderNo = (int) specific property value</p>
  6431. <p class="comment">output = array( &quot;value&quot; =&gt; tzname<sup>1</sup>
  6432. , &quot;params&quot; =&gt; params<sup>2</sup> )</p>
  6433. <p class="label">Format 3</p>
  6434. <p class="format">vtimezone::getProperty( &quot;TZNAME&quot;, propOrderNo )</p>
  6435. <p class="comment">propOrderNo = (int) specific property value</p>
  6436. <p class="comment">Get propOrderNo TZNAME</p>
  6437. <p class="label">Example</p>
  6438. <p class="example">
  6439. $tzname = $timezonestandard-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TZNAME );
  6440. </p>
  6441. <h5>Set TZNAME</h5>
  6442. <p>Insert property value.</p>
  6443. <p class="label">Format</p>
  6444. <p class="format">vtimezone::setProperty( &quot;tzname&quot;, tzname [, params [, propOrderNo ]] )</p>
  6445. <p class="comment">tzname<sup>1</sup> = (string) Value type TEXT
  6446. params<sup>2</sup> = (array) ( [ &quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot; ] *[, xparams ] )
  6447. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  6448. propOrderNo = (int) order number // <span class="comment">1=1st, 2=2nd etc</span>
  6449. lang<sup>*</sup> = as defined in [RFC5546]</p>
  6450. <p class="label">Example</p>
  6451. <p class="example">
  6452. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  6453. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  6454. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  6455. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZID,
  6456. &quot;US-Eastern&quot; );
  6457. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LAST_MODIFIED,
  6458. &quot;19870101&quot; );
  6459. $standard = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCSTANDARD );
  6460. $standard-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZNAME,
  6461. &quot;EST&quot; );
  6462. </p>
  6463. <br>
  6464. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6465. <a name="TZOFFSETFROM"></a><h3>3.2.43 TZOFFSETFROM</h3>
  6466. <p>
  6467. This property specifies the offset which is in use prior to this <a href="#VTIMEZONE">TIMEZONE</a> observance.
  6468. The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
  6469. </p>
  6470. <p>The value type is UTC-OFFSET, &quot;+&quot; / &quot;-&quot; time-hour (2*DIGIT) time-minute (2*DIGIT) [time-second (2*DIGIT)].</p>
  6471. <p>
  6472. To ease up usage, kigkonsult\iCalcreator\util\util::$TZOFFSETFROM as used in code snippets is available.
  6473. </p>
  6474. <h5>Create TZOFFSETFROM</h5>
  6475. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6476. <p class="label">Format</p>
  6477. <p class="format">vtimezone::createTzoffsetfrom()</p>
  6478. <p class="label">Example</p>
  6479. <p class="example">
  6480. $str = $component-&gt;createTzoffsetfrom();
  6481. </p>
  6482. <h5>Delete TZOFFSETFROM</h5>
  6483. <p>Remove TZOFFSETFROM from component.</p>
  6484. <p class="label">Format</p>
  6485. <p class="format">vtimezone::deleteProperty( &quot;TZOFFSETFROM&quot; )</p>
  6486. <p class="label">Example</p>
  6487. <p class="example">
  6488. $vtimezonestd-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZOFFSETFROM );
  6489. </p>
  6490. <h5>Get TZOFFSETFROM</h5>
  6491. <p>If set, returns property value, otherwise bool false.</p>
  6492. <p class="label">Format 1</p>
  6493. <p class="format">vtimezone::getProperty( &quot;TZOFFSETFROM&quot; )</p>
  6494. <p class="comment">output = tzoffsetfrom<sup>1</sup></p>
  6495. <p class="label">Format 2</p>
  6496. <p class="format">vtimezone::getProperty( &quot;TZOFFSETFROM&quot;, false , true )</p>
  6497. <p class="comment">output = array( &quot;value&quot; =&gt; tzoffsetfrom<sup>1</sup>
  6498. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6499. <p class="label">Example</p>
  6500. <p class="example">
  6501. $tzoffsetfrom = $tzstandard-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TZOFFSETFROM );
  6502. </p>
  6503. <h5>Set TZOFFSETFROM</h5>
  6504. <p>Insert property value.</p>
  6505. <p class="label">Format</p>
  6506. <p class="format">vtimezone::setProperty( &quot;tzoffsetfrom&quot;, tzoffsetfrom [, xparams ] )</p>
  6507. <p class="comment">tzoffsetfrom<sup>1</sup> = (int) (+/-)HHmm[ss] // <span class="comment">UTC offset</span>
  6508. xparams<sup>2</sup> = (array) ( *[ /string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6509. </p>
  6510. <p class="label">Example</p>
  6511. <p class="example">
  6512. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  6513. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  6514. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  6515. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZID,
  6516. &quot;US-Eastern&quot; );
  6517. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LAST_MODIFIED,
  6518. &quot;19870101&quot; );
  6519. $standard = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCSTANDARD );
  6520. $standard-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZNAME,
  6521. &quot;EST&quot; );
  6522. $standard-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZOFFSETFROM,
  6523. &quot;-0500&quot; );
  6524. </p>
  6525. <br>
  6526. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6527. <a name="TZOFFSETTO"></a><h3>3.2.44 TZOFFSETTO</h3>
  6528. <p>
  6529. This property specifies the offset which is in use in this <a href="#VTIMEZONE">TIMEZONE</a> observance.
  6530. The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
  6531. </p>
  6532. <p>The value type is UTC-OFFSET, &quot;+&quot; / &quot;-&quot; time-hour (2*DIGIT) time-minute (2*DIGIT) [time-second (2*DIGIT)].</p>
  6533. <p>
  6534. To ease up usage, kigkonsult\iCalcreator\util\util::$TZOFFSETTO as used in code snippets is available.
  6535. </p>
  6536. <h5>Create TZOFFSETTO</h5>
  6537. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6538. <p class="label">Format</p>
  6539. <p class="format">vtimezone::createTzoffsetto()</p>
  6540. <p class="label">Example</p>
  6541. <p class="example">
  6542. $str = $component-&gt;createTzoffsetto();
  6543. </p>
  6544. <h5>Delete TZOFFSETTO</h5>
  6545. <p>Remove TZOFFSETTO from component.</p>
  6546. <p class="label">Format</p>
  6547. <p class="format">vtimezone::deleteProperty( &quot;TZOFFSETTO&quot; )</p>
  6548. <p class="label">Example</p>
  6549. <p class="example">
  6550. $daylight-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZOFFSETTO );
  6551. </p>
  6552. <h5>Get TZOFFSETTO</h5>
  6553. <p>If set, returns property value, otherwise bool false.</p>
  6554. <p class="label">Format 1</p>
  6555. <p class="format">vtimezone::getProperty( &quot;TZOFFSETTO&quot; )</p>
  6556. <p class="comment">output = tzoffsetto<sup>1</sup></p>
  6557. <p class="label">Format 2</p>
  6558. <p class="format">vtimezone::getProperty( &quot;TZOFFSETTO&quot;, false , true )</p>
  6559. <p class="comment">output = array( &quot;value&quot; =&gt; tzoffsetto<sup>1</sup>
  6560. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6561. <p class="label">Example</p>
  6562. <p class="example">
  6563. $tzoffsetto = $tztandard-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TZOFFSETTO );
  6564. </p>
  6565. <h5>Set TZOFFSETTO</h5>
  6566. <p>Insert property value.</p>
  6567. <p class="label">Format</p>
  6568. <p class="format">vtimezone::setProperty( &quot;tzoffsetto&quot;, tzoffsetto [, xparams ] )</p>
  6569. <p class="comment">tzoffsetto<sup>1</sup> = (int) (+/-)HHmm[ss] // <span class="comment">UTC offset</span>
  6570. xparams<sup>2</sup> = array( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6571. </p>
  6572. <p class="label">Example</p>
  6573. <p class="example">
  6574. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  6575. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  6576. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  6577. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZID,
  6578. &quot;US-Eastern&quot; );
  6579. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LAST_MODIFIED,
  6580. &quot;19870101&quot; );
  6581. $standard = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCSTANDARD );
  6582. .. .
  6583. $daylight = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCDAYLIGHT );
  6584. $daylight-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZOFFSETTO,
  6585. &quot;1345&quot; );
  6586. </p>
  6587. <br>
  6588. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6589. <a name="TZURL"></a><h3>3.2.45 TZURL</h3>
  6590. <p>
  6591. The TZURL provides a means for a <a href="#VTIMEZONE">VTIMEZONE</a> component to point to
  6592. a network location that can be used to retrieve an up-to-date version of itself. The property
  6593. is OPTIONAL and MUST NOT occur more than once.
  6594. </p>
  6595. <p> The value type is URI.</p>
  6596. <p>
  6597. To ease up usage, kigkonsult\iCalcreator\util\util::$TZURL as used in code snippets is available.
  6598. </p>
  6599. <h5>Create TZURL</h5>
  6600. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6601. <p class="label">Format</p>
  6602. <p class="format">vtimezone::createTzurl()</p>
  6603. <p class="label">Example</p>
  6604. <p class="example">
  6605. $str = $component-&gt;createTzurl();
  6606. </p>
  6607. <h5>Delete TZURL</h5>
  6608. <p>Remove TZURL from component.</p>
  6609. <p class="label">Format</p>
  6610. <p class="format">vtimezone::deleteProperty( &quot;TZURL&quot; )</p>
  6611. <p class="label">Example</p>
  6612. <p class="example">
  6613. $vtimezone-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$TZURL );
  6614. </p>
  6615. <h5>Get TZURL</h5>
  6616. <p>If set, returns property value, otherwise bool false.</p>.
  6617. <p class="label">Format 1</p>
  6618. <p class="format">vtimezone::getProperty( &quot;TZURL&quot; )</p>
  6619. <p class="comment">output = tzurl<sup>1</sup></p>
  6620. <p class="label">Format 2</p>
  6621. <p class="format">vtimezone::getProperty( &quot;TZURL&quot;, false , true )</p>
  6622. <p class="comment">output = array( &quot;value&quot; =&gt; tzurl<sup>1</sup>
  6623. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6624. <p class="label">Example</p>
  6625. <p class="example">
  6626. $tzurl = $timezonestandard-&gt;getProperty( kigkonsult\iCalcreator\util\util::$TZURL );
  6627. </p>
  6628. <h5>Set TZURL</h5>
  6629. <p>Insert property value.</p>
  6630. <p class="label">Format</p>
  6631. <p class="format">vtimezone::setProperty( &quot;tzurl&quot;, tzurl [, xparams ] )</p>
  6632. <p class="comment">tzurl<sup>1</sup> = (string) Value type URI
  6633. xparams<sup>2</sup> = array( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6634. </p>
  6635. <p class="label">Example</p>
  6636. <p class="example">
  6637. $tz = &quot;http://zones.stds_r_us.net/tz/US-Eastern&quot; );
  6638. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot; );
  6639. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  6640. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  6641. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZID,
  6642. &quot;US-Eastern&quot; );
  6643. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$LAST_MODIFIED,
  6644. &quot;19870101T000000&quot; );
  6645. $vtimezone-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TZURL,
  6646. $tz );
  6647. </p>
  6648. <br>
  6649. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6650. <a name="UID"></a><h3>3.2.46 UID</h3>
  6651. <p>
  6652. The persistent, globally <b>U</b>nique <b>ID</b>entifier for the <strong>calendar</strong> component.
  6653. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>,
  6654. <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br>
  6655. However, UID is <b>AUTOMATICALLY</b> generated in iCalcreator and configuration <a href="#Unique_id">unique_id</a>
  6656. is used when auto-creating component UID.
  6657. </p>
  6658. <p>UID generated format :</p>
  6659. <p class="format">date(&quot;Ymd\THisT&quot;) . &quot;-&quot; . [microSec][random] . &quot;@&quot; . <a href="#Unique_id">unique_id</a></p>
  6660. <p>
  6661. microSec = microseconds, 4 pos<br>
  6662. random = 6 characters aA-zZ, 0-9
  6663. </p>
  6664. <p class="label">Example</p>
  6665. <p class="example">&quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;</p>
  6666. <p>
  6667. UID may be required when importing iCal files into some <strong>calendar</strong> software (MS etc.),
  6668. as well as (<strong>calendar</strong>) properties <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE",
  6669. <a href="#METHOD">METHOD</a> (value PUBLISH etc.) and the (also automatically created) <a href="#DTSTAMP">DTSTAMP</a> property.
  6670. </p>
  6671. <p>The value type for UID is TEXT.</p>
  6672. <p>
  6673. To ease up usage, kigkonsult\iCalcreator\util\util::$UID as used in code snippets is available.
  6674. </p>
  6675. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) UID values.</p>
  6676. <h5>Create UID</h5>
  6677. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6678. <p class="label">Format</p>
  6679. <p class="format">calendarComponent::createUid()</p>
  6680. <p class="label">Example</p>
  6681. <p class="example">
  6682. $str = $component-&gt;createUid();
  6683. </p>
  6684. <h5>Delete UID</h5>
  6685. <p>
  6686. If UID is remove from a component, UID will automatically be recreated when iCalcreator object output methods
  6687. like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a>
  6688. or <a href="#saveCalendar">saveCalendar</a> is executed.
  6689. </p>
  6690. <p class="label">Format</p>
  6691. <p class="format">calendarComponent::deleteProperty( &quot;UID&quot; )</p>
  6692. <p class="label">Example</p>
  6693. <p class="example">
  6694. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$UID );
  6695. </p>
  6696. <h5>Get UID</h5>
  6697. <p>If set, returns property, otherwise bool false.</p>
  6698. <p class="label">Format 1</p>
  6699. <p class="format">calendarComponent::getProperty( &quot;UID&quot; )</p>
  6700. <p class="comment">output = uid<sup>1</sup></p>
  6701. <p class="label">Format 2</p>
  6702. <p class="format">calendarComponent::getProperty( &quot;UID&quot;, false , true )</p>
  6703. <p class="comment">output = array( &quot;value&quot; =&gt; uid<sup>1</sup>
  6704. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6705. <p class="label">Example</p>
  6706. <p class="example">
  6707. $uid = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$UID );
  6708. </p>
  6709. <h5>Set UID</h5>
  6710. <p>Insert property value, overrides any previously set or auto-created UID.</p>
  6711. <p>
  6712. Do <b>NOT</b> use an integer UID or only a component name in UID (ex. &quot;vevent&quot;),
  6713. this may cause malfunction in iCalcreator object method <a href="#setComponent">setComponent</a> with index or UID argument.
  6714. </p>
  6715. <p class="label">Format</p>
  6716. <p class="format">calendarComponent::setProperty( &quot;uid&quot;, uid [, xparams ] )</p>
  6717. <p class="comment">uid<sup>1</sup> = (string) Value type TEXT
  6718. xparams<sup>2</sup> = array( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6719. </p>
  6720. <p class="label">Example</p>
  6721. <p class="example">
  6722. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$UID,
  6723. &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;);
  6724. </p>
  6725. <p>
  6726. BUT, due to poorly created iCal media files, a numeric UID is accepted in the setProperty( UID ) and <a href="#parse_merge">parse()</a> methods.
  6727. Do check for component digit UIDs and remove it (will force a (auto) UID recreation) or (re-)set it manually.
  6728. </p>
  6729. <p class="example">
  6730. if( ctype_digit( $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$UID )))
  6731. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$UID );
  6732. </p>
  6733. <br>
  6734. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6735. <a name="URL"></a><h3>3.2.47 URL</h3>
  6736. <p>
  6737. This property defines a Uniform Resource Locator (URL) associated with the <strong>iCalendar</strong> object.
  6738. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
  6739. <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
  6740. </p>
  6741. <p> The value type is URI.</p>
  6742. <p>You can <a href="#sort2">SORT</a> <strong>calendar</strong> (components) on (asc) URL values.</p>
  6743. <p>
  6744. To ease up usage, kigkonsult\iCalcreator\util\util::$URL as used in code snippets is available.
  6745. </p>
  6746. <h5>Create URL</h5>
  6747. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6748. <p class="label">Format</p>
  6749. <p class="format">calendarComponent::createUrl()</p>
  6750. <p class="label">Example</p>
  6751. <p class="example">
  6752. $str = $component-&gt;createUrl();
  6753. </p>
  6754. <h5>Delete URL</h5>
  6755. <p>Remove URL from component.</p>
  6756. <p class="label">Format</p>
  6757. <p class="format">calendarComponent::deleteProperty( &quot;URL&quot; )</p>
  6758. <p class="label">Example</p>
  6759. <p class="example">
  6760. $vevent-&gt;deleteProperty( kigkonsult\iCalcreator\util\util::$URL );
  6761. </p>
  6762. <h5>Get URL</h5>
  6763. <p>If set, returns property value, otherwise bool false.</p>
  6764. <p class="label">Format 1</p>
  6765. <p class="format">calendarComponent::getProperty( &quot;URL&quot; )</p>
  6766. <p class="comment">output = url<sup>1</sup></p>
  6767. <p class="label">Format 2</p>
  6768. <p class="format">calendarComponent::getProperty( &quot;URL&quot;, false , true )</p>
  6769. <p class="comment">output = array &quot;value&quot; =&gt; url<sup>1</sup>
  6770. , &quot;params&quot; =&gt; xparams<sup>2</sup> )</p>
  6771. <p class="label">Example</p>
  6772. <p class="example">
  6773. $url = $vevent-&gt;getProperty( kigkonsult\iCalcreator\util\util::$URL );
  6774. </p>
  6775. <h5>Set URL</h5>
  6776. <p>Insert property value.</p>
  6777. <p class="label">Format</p>
  6778. <p class="format">calendarComponent::setProperty( &quot;url&quot;, url [, xparams ] )</p>
  6779. <p class="comment">url<sup>1</sup> = (string) Value type URI
  6780. xparams<sup>2</sup> = (array) ( *[ (string) key =&gt; (string) value ] ) // <span class="comment">key prefix &quot;X-&quot;</span>
  6781. </p>
  6782. <p class="label">Example</p>
  6783. <p class="example">
  6784. $vtodo-&gt;setProperty( kigkonsult\iCalcreator\util\util::$URL,
  6785. &quot;http://www.icaldomain.net&quot; );
  6786. </p>
  6787. <br>
  6788. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6789. <a name="X-PROPERTY_PROP"></a><h3>3.2.48 X-PROPERTY</h3>
  6790. <p>
  6791. A component, non-standard property with a TEXT value and a name with an &quot;<b>X-</b>&quot; prefix. In a component,
  6792. an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
  6793. </p>
  6794. <p>The value type is TEXT.</p>
  6795. <h5>Create X-PROPERTY</h5>
  6796. <p>If set, returns [RFC5545] formatted string, otherwise null.</p>
  6797. <p class="label">Format</p>
  6798. <p class="format">calendarComponent::createXprop()</p>
  6799. <p class="label">Example</p>
  6800. <p class="example">
  6801. $str = $component-&gt;createxProp();
  6802. </p>
  6803. <h5>Delete X-PROPERTY</h5>
  6804. <p>Remove X-PROPERTY from component.</p>
  6805. <p class="label">Format</p>
  6806. <p class="format">calendarComponent::deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
  6807. <p class="label">Example 1</p>
  6808. <p>Deleting x-property named &quot;X-PROPERTY&quot;.</p>
  6809. <p class="example">
  6810. $vevent-&gt;deleteProperty( &quot;X-PROPERTY&quot; );
  6811. </p>
  6812. <p class="label">Example 2</p>
  6813. <p>Deleting all x-properties.</p>
  6814. <p class="example">
  6815. while( $vevent-&gt;deleteProperty())
  6816. continue;
  6817. </p>
  6818. <h5>Get X-property</h5>
  6819. <p>If set, returns property value, otherwise bool false.</p>
  6820. <p class="label">Format 1</p>
  6821. <p class="format">calendarComponent::getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
  6822. <p class="comment">output = array( propertyName<sup>1</sup>
  6823. , propertyData<sup>2</sup> )</p>
  6824. <p class="label">Format 2</p>
  6825. <p class="format">calendarComponent::getProperty()</p>
  6826. <p class="comment">output = array( propertyName<sup>1</sup>
  6827. , propertyData<sup>2</sup> )</p>
  6828. <p class="label">Format 3</p>
  6829. <p class="format">calendarComponent::getProperty( false, propOrderNo/false, true )</p>
  6830. <p class="comment">propOrderNo = (int) specific property value</p>
  6831. <p class="comment">output = array( propertyName<sup>1</sup>
  6832. , array ( &quot;value&quot; =&gt; propertyData<sup>2</sup> )
  6833. , &quot;params&quot; =&gt; params<sup>3</sup>))</p>
  6834. <p class="label">Format 4</p>
  6835. <p class="format">calendarComponent::getProperty( false, propOrderNo )</p>
  6836. <p class="comment">propOrderNo = (int) specific property value</p>
  6837. <p class="comment">Get propOrderNo X-property</p>
  6838. <p class="label">Example 1</p>
  6839. <p class="example">
  6840. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6841. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  6842. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6843. $vcalendar-&gt;setConfig( $config );
  6844. $vcalendar-&gt;parse();
  6845. if( false !== ( $d = $vcalendar-&gt;getProperty( &quot;X-WR-TIMEZONE&quot; )))
  6846. echo $d[1];
  6847. <span class="comment">// $d = array( &quot;X-WR-TIMEZONE&quot;, propertyData<sup>2</sup> )</span>
  6848. </p>
  6849. <p class="label">Example 2</p>
  6850. <p class="example">
  6851. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6852. kigkonsult\iCalcreator\util\util::$FILENAME, &quot;file.ics&quot; ); );
  6853. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6854. $vcalendar-&gt;setConfig( $config );
  6855. $vcalendar-&gt;parse();
  6856. while( $xprop = $vcalendar-&gt;getProperty( )) {
  6857. <span class="comment">// $xprop = array( propertyName<sup>1</sup>, propertyData<sup>2</sup> )</span>
  6858. </p>
  6859. <p class="label">Example 3</p>
  6860. <p class="example">
  6861. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6862. kigkonsult\iCalcreator\util\util::$FILENAME, &quot;file.ics&quot; ); );
  6863. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6864. $vcalendar-&gt;setConfig( $config );
  6865. $vcalendar-&gt;parse();
  6866. while( $xprop = $vcalendar-&gt;getProperty( &quot;X-ABC-MMSUBJ&quot; )) {
  6867. <span class="comment">// $xprop = array( &quot;X-ABC-MMSUBJ&quot;, propertyData<sup>2</sup> )</span>
  6868. </p>
  6869. <p class="label">Example 4</p>
  6870. <p class="example">
  6871. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6872. kigkonsult\iCalcreator\util\util::$FILENAME, &quot;file.ics&quot; ); );
  6873. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6874. $vcalendar-&gt;setConfig( $config );
  6875. $vcalendar-&gt;parse();
  6876. while( $xprop = $vcalendar-&gt;getProperty( false, false, true )) {
  6877. /*<span class="comment"> $xprop = array( propertyName<sup>1</sup>,
  6878. array( &quot;value&quot; =&gt; propertyData<sup>2</sup> ),
  6879. &quot;params&quot; =&gt; params<sup>3</sup> )</span>
  6880. */
  6881. </p>
  6882. <h5>Set X-property</h5>
  6883. <p>Insert property name and value. If an x-prop with the same name already exists, it will be replaced.</p>
  6884. <p class="label">Format</p>
  6885. <p class="format">calendarComponent::setProperty( propertyName, propertyData [, params ] )</p>
  6886. <p class="comment">propertyName<sup>1</sup> = (string) Any property name with a &quot;X-&quot; prefix
  6887. propertyData<sup>2</sup> = (string) Value type TEXT
  6888. params<sup>3</sup> = (array) ( [&quot;LANGUAGE&quot; =&gt; (string) &quot;lang<sup>*</sup>&quot;] *[, xparams] )
  6889. xparams = (string) key =&gt; (string) value // <span class="comment">key prefix &quot;X-&quot;</span>
  6890. lang<sup>*</sup> = as defined in [RFC5546]</p>
  6891. <p class="label">Example</p>
  6892. <p class="example">
  6893. $component-&gt;setProperty(&quot;X-ABC-MMSUBJ&quot;,&quot;http://load.noise.org/mysubj.wav&quot;);
  6894. </p>
  6895. <br>
  6896. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
  6897. <a NAME="iCalcreator_component_configuration_methods"></a><h2>3.3 iCalcreator Component configuration methods</h2>
  6898. <a name="Language_PROP"></a><h3>3.3.1 Language</h3>
  6899. <p>
  6900. Language for specific <strong>calendar</strong> component as defined in [RFC5546].<br>
  6901. Language set at component level can be overridden by specific component property parameter.<br>
  6902. A successful &quot;setConfig&quot; returns bool true.
  6903. </p>
  6904. <p>
  6905. kigkonsult\iCalcreator\util\util::$LANGUAGE as used in code snippets is available.
  6906. </p>
  6907. <h5>Get language</h5>
  6908. Language for <strong>calendar</strong> (only if language is set at component level).
  6909. <p class="label">Format</p>
  6910. <p class="format">calendarComponent::getConfig( &quot;language&quot; )</p>
  6911. <p class="label">Example</p>
  6912. <p class="example">
  6913. $lang = $vevent-&gt;getConfig( kigkonsult\iCalcreator\util\util::$LANGUAGE );
  6914. </p>
  6915. <h5>Set LANGUAGE</h5>
  6916. <p class="label">Format</p>
  6917. <p class="format">calendarComponent::setConfig( &quot;language&quot;, lang )</p>
  6918. <p class="comment">lang = (string) language</p>
  6919. <p class="label">Example</p>
  6920. <p class="example">
  6921. $vevent-&gt;setConfig( kigkonsult\iCalcreator\util\util::$LANGUAGE,
  6922. &quot;en&quot; );
  6923. </p>
  6924. <br>
  6925. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_configuration_methods">[up]</a>
  6926. <a name="iCalcreator_component_object_misc_methods"></a><h2>3.4 iCalcreator component object misc. methods</h2>
  6927. <p>Calendar component subcomponent functions.</p>
  6928. <a name="deleteComponent_PROP"></a><h4>3.4.1 deleteComponent</h4>
  6929. Remove subcomponent from component.
  6930. <p class="label">Format</p>
  6931. <p class="format">calendarComponent::deleteComponent( orderNumber )</p>
  6932. <p class="comment">orderNumber = (int) component order Number</p>
  6933. <p class="comment">Remove component with order number (1st=1, 2nd=2).</p>
  6934. <p class="format">calendarComponent::deleteComponent( componentType [, componentSuborderNumber])</p>
  6935. <p class="comment">componentType = (string) component type
  6936. componentSuborderNumber = (int) component suborder number</p>
  6937. <p class="comment">Remove component with component type (ex. &quot;vevent&quot;)
  6938. and order 1 alt. suborder number.</p>
  6939. <p class="format">calendarComponent::deleteComponent( <a href="#UID">UID</a> )</p>
  6940. <p class="comment">Remove component with <a href="#UID">UID</a>.
  6941. N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">timezone</a> components.</p>
  6942. <p class="label">Example 1</p>
  6943. <p>Delete first subcomponent.</p>
  6944. <p class="example">
  6945. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6946. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  6947. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6948. $vcalendar-&gt;setConfig( $config );
  6949. $vcalendar-&gt;parse();
  6950. $comp1 = $vcalendar-&gt;getComponent();
  6951. $comp1-&gt;deleteComponent( 1 );
  6952. </p>
  6953. <p class="label">Example 2</p>
  6954. <p>Delete all subcomponents.</p>
  6955. <p class="example">
  6956. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6957. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  6958. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6959. $vcalendar-&gt;setConfig( $config );
  6960. $vcalendar-&gt;parse();
  6961. $comp1 = $vcalendar-&gt;getComponent();
  6962. while( $comp1-&gt;deleteComponent( kigkonsult\iCalcreator\util\util::$LCVALARM )
  6963. continue;
  6964. </p>
  6965. <br>
  6966. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_configuration_methods">[up]</a>
  6967. <a name="getComponent_PROP"></a><h4>3.4.2 getComponent</h4>
  6968. Get subComponent from component.
  6969. <p class="label">Format 1</p>
  6970. <p class="format">calendarComponent::getComponent()</p>
  6971. <p class="comment">Get next component until end-of-components.</p>
  6972. <p class="label">Format 2</p>
  6973. <p class="format">calendarComponent::getComponent( int orderNumber )</p>
  6974. <p class="comment">orderNumber = (int) component order number</p>
  6975. <p class="comment">Get component with order number (1st=1, 2nd=2).</p>
  6976. <p class="label">Format 3</p>
  6977. <p class="format">calendarComponent::getComponent( string componentType [, int componentSuborderNumber])</p>
  6978. <p class="comment">componentType = (string) component type
  6979. componentSuborderNumber = (int) component suborder number</p>
  6980. <p class="comment">Get (next) component with component type (until end-of-components)
  6981. alt. component with component type and suborder number (1st=1, 2nd=2..).</p>
  6982. <p class="label">Format 4</p>
  6983. <p class="format">calendarComponent::getComponent( <a href="#UID">UID</a> )</p>
  6984. <p class="comment">Get component with <a href="#UID">UID</a>.
  6985. N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">timezone</a> components.</p>
  6986. <p class="label">Example</p>
  6987. <p class="example">
  6988. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  6989. kigkonsult\iCalcreator\util\util::$FILENAME =&gt; &quot;file.ics&quot; );
  6990. $vcalendar = new kigkonsult\iCalcreator\vcalendar();
  6991. $vcalendar-&gt;setConfig( $config );
  6992. $vcalendar-&gt;parse();
  6993. $comp1 = $vcalendar-&gt;getComponent());
  6994. while( $subComp = $comp1-&gt;getComponent()) {
  6995. </p>
  6996. <br>
  6997. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_configuration_methods">[up]</a>
  6998. <a name="newComponent_PROP"></a><h4>3.4.3 newComponent</h4>
  6999. Create subcomponent (<a href="#VALARM">ALARN</a> / <a href="#VTIMEZONE">VTIMEZONE STANDARD</a> / <a href="#VTIMEZONE">VTIMEZONE DAYLIGHT</a>)
  7000. using a component factory-method, returning a reference to the new component.
  7001. <p class="label">Format</p>
  7002. <p class="format">calendarComponent::newComponent( componentType )</p>
  7003. <p class="comment">componentType = (string) component type</p>
  7004. <p class="label">Example 1</p>
  7005. <p class="example">
  7006. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot;,
  7007. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  7008. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  7009. $vevent = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVEVENT );
  7010. // <span class="comment">add some <a class="ref" href="#VEVENT">EVENT</a> properties</span>
  7011. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  7012. 2006, 12, 24, 19, 30, 00 );
  7013. $vevent-&gt;setProperty(
  7014. $valarm = $vevent-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVALARM );
  7015. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  7016. </p>
  7017. <p class="label">Example 2</p>
  7018. <p class="example">
  7019. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID => &quot;kigkonsult.se&quot; );
  7020. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config );
  7021. $vtimezone = $vcalendar-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCVTIMEZONE );
  7022. $vtimezone-&gt;setProperty(
  7023. $standard = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCSTANDARD );
  7024. $standard-&gt;setProperty(
  7025. $daylight = $vtimezone-&gt;newComponent( kigkonsult\iCalcreator\util\util::$LCDAYLIGHT );
  7026. $daylight-&gt;setProperty(
  7027. </p>
  7028. <br>
  7029. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_configuration_methods">[up]</a>
  7030. <a name="setComponent_PROP"></a><h4>3.4.4 setComponent</h4>
  7031. Add <strong>calendar</strong> component to the iCalcreator object instance or replace/update component in the iCalcreator object instance.
  7032. <p class="label">Format 1</p>
  7033. <p class="format">calendarComponent::setComponent( component )
  7034. addSubComponent( component ) // <span class="comment">alias</span></p>
  7035. <p class="comment">Insert last in component chain.</p>
  7036. <p class="label">Format 2</p>
  7037. <p class="format">calendarComponent::setComponent( component, int orderNumber )</p>
  7038. <p class="comment">orderNumber = (int) component order number</p>
  7039. <p class="comment">Replace component with order number(1st=1, 2nd=2).
  7040. If orderNumber is not found, component is inserted last in chain.</p>
  7041. <p class="label">Format 3</p>
  7042. <p class="format">calendarComponent::setComponent( component, componentType [,componentSuborderNumber])</p>
  7043. <p class="comment">componentType = (string) component type
  7044. componentSuborderNumber = (int) component suborder number</p>
  7045. <p class="comment">Replace component with component type and component order number.
  7046. if orderNumber is not found, component is inserted last in chain. </p>
  7047. <p class="label">Example</p>
  7048. <p class="example">
  7049. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  7050. kigkonsult\iCalcreator\util\util::$TZID =&gt; &quot;Europe/Stockholm&quot; );
  7051. $vcalendar = new kigkonsult\iCalcreator\vcalendar( $config ); // <span class="comment">initiate new CALENDAR</span>
  7052. $vevent = new kigkonsult\iCalcreator\vevent();
  7053. // <span class="comment">add some <a class="ref" href="#VEVENT">EVENT</a> properties</span>
  7054. $vevent-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  7055. 2006, 12, 24, 19, 30, 00 );
  7056. $vevent-&gt;setProperty(
  7057. $valarm = new kigkonsult\iCalcreator\valarm();
  7058. $valarm-&gt;setProperty( kigkonsult\iCalcreator\util\util::$TRIGGER,
  7059. $vevent-&gt;setComponent( $valarm );
  7060. $vcalendar-&gt;setComponent( $vevent );
  7061. </p>
  7062. <br>
  7063. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalcreator_component_configuration_methods">[up]</a>
  7064. <a name="TimezoneXMLjsonvCard"></a><h1>4 Timezone, XML, json and vCard support</h1>
  7065. <a name="timezoneHandler"></a><h3>4.1 iCalcreator and timezoneHandler class</h3>
  7066. The timezoneHandler class has three utility methods: <a href="#createTimezone">createTimezone</a>,
  7067. <a href="#ms2phpTZ">ms2phpTZ</a> and
  7068. <a href="#transformDateTime">transformDateTime</a>.
  7069. <a name="createTimezone"></a><h4>4.1.1 createTimezone</h4>
  7070. <p>
  7071. The (static) method, applied on a iCalcrator object instance and using a <em>PHP</em> valid (string) timezone,
  7072. return <a href="#VTIMEZONE">vtimezone</a>, <a href="#STANDARD">standard</a> and <a href="#DAYLIGHT">daylight</a> components,
  7073. based on <em>PHP</em> DateTimeZone class and the <em>PHP</em> time zone transition dates.
  7074. </p>
  7075. <p>
  7076. Recommendation is to call the method <b>after</b> editing components (and without (period) from/to arguments, below),
  7077. it will automatically create timezone components, starting seven month before lowest <a href="#DTSTART">DTSTART</a>
  7078. value and end 18 month after the higest.
  7079. </p>
  7080. <p>
  7081. If no time zone transition exists within date arguments or within the &quot;<a href="#DTSTART">DTSTART</a>&quot;s span,
  7082. then the time zone transition with the highest transistion date before &quot;from&quot; date is used as base.
  7083. If still missing, timezone components are created, using current date.
  7084. </p>
  7085. <p>
  7086. Note, only when timezone NOT is UTC.
  7087. For dates with UTC DATE-TIME, read <a href="#DATE_WITH_UTC_TIME">this</a>!
  7088. </p>
  7089. <p>
  7090. Bool false is returned if not using a <em>PHP</em> valid timezone.
  7091. </p>
  7092. <p class="label">Format</p>
  7093. <p class="format">timezoneHandler::createTimezone( calendar, timezone [, xprops, [, from [, to ]]] )</p>
  7094. <p class="comment">calendar = (object) iCalcreator instance
  7095. timezone = (string) valid timezone, acceptable by <em>PHP</em> DateTimeZone
  7096. xprops = (array) ( *[ x-propName =&gt; value ] ), timezone non-standard properties
  7097. from = (int) timestamp, period start date<sup>*</sup>
  7098. to = (int) timestamp, period end date<sup>*</sup>
  7099. <sup>*</sup> if empty &quot;from&quot; and &quot;to&quot; arguments, the calendar <a href="#getProperty2">getProperty</a> method (with &quot;<a href="#DTSTART">DTSTART</a>&quot; as argument)
  7100. is used to get the lowest (modified, minus 7 month) and highest (modified, plus 15 month) dates.
  7101. </p>
  7102. <p class="label">Example</p>
  7103. <p class="example">
  7104. $tz = &quot;Europe/Stockholm&quot;;
  7105. $config = array( kigkonsult\iCalcreator\util\util::$UNIQUE_ID =&gt; &quot;kigkonsult.se&quot;,
  7106. kigkonsult\iCalcreator\util\util::$TZID =&gt; $tz );
  7107. $c = new kigkonsult\iCalcreator\vcalendar( $config );
  7108. $c-&gt;setProperty( "X-WR-TIMEZONE", $tz );
  7109. // <span class="comment">insert components or parse an iCal file</span>
  7110. $xprops = array( &quot;X-LIC-LOCATION&quot; => $tz );
  7111. kigkonsult\iCalcreator\timezoneHandler::createTimezone( $c, $tz, $xprops );
  7112. </p>
  7113. <p>
  7114. Output example (when using iCalcreator object createCalendar or returnCalendar methods):
  7115. </p>
  7116. <p class="example">
  7117. BEGIN:VTIMEZONE
  7118. TZID:Europe/Stockholm
  7119. X-LIC-LOCATION:Europe/Stockholm
  7120. BEGIN:STANDARD
  7121. DTSTART:20111030T003000
  7122. TZOFFSETFROM:+0200
  7123. TZOFFSETTO:+0100
  7124. TZNAME:CET
  7125. END:STANDARD
  7126. BEGIN:DAYLIGHT
  7127. DTSTART:20110327T002000
  7128. TZOFFSETFROM:+0100
  7129. TZOFFSETTO:+0200
  7130. TZNAME:CEST
  7131. END:DAYLIGHT
  7132. END:VTIMEZONE
  7133. </p>
  7134. <br>
  7135. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#timezoneHandler">[up]</a>
  7136. <a name="ms2phpTZ"></a><h4>4.1.2 ms2phpTZ</h4>
  7137. <p>
  7138. The (static) ms2phpTZ method manages (a very simple) conversion of a MS timezone to a <em>PHP</em>5 valid (Date-)timezone,<br>
  7139. matching (MS) UTC offset and time zone descriptors, based on <em>PHP</em> DateTimeZone class.
  7140. </p>
  7141. <p>If true is returned, the MS timezone argument (below) is converted to a <em>PHP</em>5 time zone, otherwise unaltered.</p>
  7142. <p class="label">Format</p>
  7143. <p class="format">timezoneHandler::ms2phpTZ( timezone )</p>
  7144. <p class="comment">timezone = (string) MS timezone (input), PHP5 timezone (output)</p>
  7145. <p class="label">Example</p>
  7146. <p class="example">
  7147. $search = '"(UTC-06:00) Central Time (US & Canada)"';
  7148. echo "MS tz:'$search'&lt;br&gt;\n";
  7149. if( false !== kigkonsult\iCalcreator\timezoneHandler::ms2phpTZ( $search ))
  7150. echo "PHP tz:'$search'&lt;br&gt;\n";
  7151. </p>
  7152. <br>
  7153. <br>
  7154. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#timezoneHandler">[up]</a>
  7155. <a name="transformDateTime"></a><h4>4.1.3 transformDateTime</h4>
  7156. <p>
  7157. The (static) transformDateTime method transforms a datetime from a time zone to another. (Requires <em>PHP</em> DateTimeZone acceptable time zones).
  7158. </p>
  7159. <p>
  7160. Bool false is returned if not using a &quot;strtotime&quot; acceptable datetime string or unacceptable <em>PHP</em> time zones.
  7161. If true, the dateTime argument (below) is converted to the new time zone, otherwise unaltered.
  7162. </p>
  7163. <p>
  7164. A DATE input (&lt;year&gt;&lt;month&gt;&lt;day&gt;) will be expanded to a DATETIME (&lt;year&gt;&lt;month&gt;&lt;day&gt;000000) before transform.
  7165. </p>
  7166. <p class="label">Format</p>
  7167. <p class="format">timezoneHandler::transformDateTime( dateTime, timezoneFrom [, timezoneTo [, format ]] )</p>
  7168. <p class="comment">
  7169. dateTime = (array) ( &quot;year&quot; =&gt; (int) year // <span class="comment">alt. input</span>
  7170. , &quot;month&quot; =&gt; (int) month
  7171. , &quot;day&quot; =&gt; (int) day
  7172. [, &quot;hour&quot; =&gt; (int) hour
  7173. , &quot;min&quot; =&gt; (int) min
  7174. , &quot;sec&quot; =&gt; (int) sec ] )
  7175. dateTime = (array) ( (int) year // <span class="comment">alt. input</span>
  7176. , (int) month
  7177. , (int) day
  7178. [, (int) hour
  7179. , (int) min
  7180. , (int) sec ] )
  7181. dateTime = (array) ( &quot;timestamp&quot; =&gt; (int) timestamp ) // <span class="comment">alt. input</span>
  7182. dateTime = (string) datetime string<sup>*</sup> // <span class="comment">alt. input</span>
  7183. dateTime = (string) datetime string // <span class="comment">on successful output</span>
  7184. timezoneFrom = (string) a <em>PHP</em> (DateTimeZone) valid time zone
  7185. timezoneTo = (string) a <em>PHP</em> (DateTimeZone) valid time zone, default &quot;UTC&quot;
  7186. format = (string) output format (any date formatting, default &quot;Ymd\THis&quot;)
  7187. <br>datetime string<sup>*</sup> recommended formats
  7188. &quot;20110625&quot;, &quot;2011-06-25&quot;, &quot;2011/06/26&quot;
  7189. &quot;20110625051015&quot;, &quot;20110625 051015&quot;
  7190. &quot;20110625T051015&quot;, &quot;20110625t051015&quot;
  7191. &quot;2011-06-25 05:10:15&quot;, &quot;2011-06-25T05:10:15&quot;, &quot;2011-06-25t05:10:15&quot;
  7192. &quot;2011/06/25 05:10:15&quot;, &quot;2011/06/25T05:10:15&quot;, &quot;2011/06/25t05:10:15&quot;
  7193. other string formats, acceptable by <em>PHP</em> strtotime function, may (would) work
  7194. <span class="comment">(notice <a href="#date_restriction">date restriction</a>)</span></p>
  7195. <p class="label">Example</p>
  7196. <p>Convert from time zone &quot;Europe/Stockholm&quot; to &quot;UTC&quot;</p>
  7197. <p class="example">
  7198. $d = date( &quot;Y-m-d H:i:s&quot; );
  7199. $tzFr = &quot;Europe/Stockholm&quot;;
  7200. if( false !== kigkonsult\iCalcreator\timezoneHandler::transformDateTime( $d, $tzFr ))
  7201. $event-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  7202. $d . &quot;Z&quot; );
  7203. else
  7204. $event-&gt;setProperty( kigkonsult\iCalcreator\util\util::$DTSTART,
  7205. $d,
  7206. array( kigkonsult\iCalcreator\util\util::$TZID => $tzFr ));
  7207. </p>
  7208. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#timezoneHandler">[up]</a>
  7209. <a name="TZhelpers"></a><h3>4.2 Timezone helper functions</h3>
  7210. <p>
  7211. Additional functions to use with vtimezone components, placed in the &quot;iCal.tz.inc.php&quot; file.
  7212. </p>
  7213. <p>
  7214. Before calling the functions <a href="#getTzOffsetForDate">getTzOffsetForDate</a> and <a href="#getTimezonesAsDateArrays">getTimezonesAsDateArrays</a>,
  7215. set time zone 'GMT' (using 'date_default_timezone_set')!
  7216. </p>
  7217. <a name="getTzOffsetForDate"></a><h4>4.2.1 getTzOffsetForDate</h4>
  7218. <p>
  7219. The <a href="#getTzOffsetForDate">getTzOffsetForDate</a> function returns UTC offset information for specific date (timezone) based on output from <a href="#getTimezonesAsDateArrays">getTimezonesAsDateArrays</a> function.
  7220. </p>
  7221. <p>
  7222. Before calling the function, set time zone 'GMT' ('date_default_timezone_set')!
  7223. </p>
  7224. <p>
  7225. Returns array, time zone data for specific date (timestamp) with keys for
  7226. </p>
  7227. <ul>
  7228. <li>&quot;offsetHis&quot; (+/-Hi[s])
  7229. <li>&quot;offsetSec&quot;( UTC offset in seconds)
  7230. <li>&quot;tzname&quot; (standard/daylight time zone name)
  7231. </ul>
  7232. <p class="label">Format</p>
  7233. <p class="format">getTzOffsetForDate( timezonesarray, tzid, timestamp )</p>
  7234. <p class="comment">timezonesarray = (array) output from getTimezonesAsDateArrays, below
  7235. tzid = (string) time zone identifier
  7236. timestamp = (mixed) the date in question (timestamp)
  7237. or UTC datetime (array) ( &quot;year&quot; =&gt; (int) year
  7238. , &quot;month&quot; =&gt; (int) month
  7239. , &quot;day&quot; =&gt; (int) day
  7240. , &quot;hour&quot; =&gt; (int) hour
  7241. , &quot;min&quot; =&gt; (int) min
  7242. , &quot;sec&quot; =&gt; (int) sec )</p>
  7243. <br>
  7244. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7245. <a name="getTimezonesAsDateArrays"></a><h4>4.2.2 getTimezonesAsDateArrays</h4>
  7246. <p>
  7247. The function creates time zone transition information,
  7248. based on vtimezone component contents in a iCalcreator vcalendar instance,
  7249. using sub-function expandTimezoneDates.
  7250. </p>
  7251. <p>
  7252. Before calling the function, set time zone 'GMT' ('date_default_timezone_set')!
  7253. </p>
  7254. <p>
  7255. Returns an array containing time zone data from vtimezone standard/daylight instances (input to <a href="#getTzOffsetForDate">getTzOffsetForDate</a>, above).
  7256. </p>
  7257. <p class="label">Format</p>
  7258. <p class="format">getTimezonesAsDateArrays( iCalobj )</p>
  7259. <p class="comment">iCalobj= (object) iCalcreator vcalendar instance</p>
  7260. <br>
  7261. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7262. <a name="XMLhelpers"></a><h3>4.3 iCalcreator and iCalXML class</h3>
  7263. <p>
  7264. The iCalXML class methods converts iCal into XML and parses XML into iCal.
  7265. XML is defined by [RFC6321], &quot;xCal: The XML Format for <strong>iCalendar</strong>&quot;.
  7266. </p>
  7267. <a name="iCal2XML"></a><h4>4.3.1 iCal2XML</h4>
  7268. <p>The (static) iCal2XML method converts an iCalcreator object instance to XML.</p>
  7269. <p>
  7270. The iCal2XML method utilizes the SimpleXML extension (and &quot;libxml&quot; <em>PHP</em> extension).
  7271. </p>
  7272. <p>An rfc6321 XML string is returned.</p>
  7273. <p class="label">Format</p>
  7274. <p class="format">iCalXML::iCal2XML( iCalobj )</p>
  7275. <p class="comment">iCalobj = (object) iCalcreator instance</p>
  7276. <br>
  7277. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7278. <a name="XML2iCal"></a><h4>4.3.2 XML2iCal</h4>
  7279. <p>
  7280. The two entry methods: XMLstr2iCal and XMLfile2iCal converts XML to iCal, i.e. parses an XML string/file into an iCalcreator vcalendar instance.
  7281. The methods are <b>not</b> using the <em>PHP</em> SimpleXML extension.
  7282. </p>
  7283. <p>
  7284. On success, an iCalcreator vcalendar instance is returned.
  7285. </p>
  7286. <p>
  7287. On (XML parse) error, bool false is returned.
  7288. </p>
  7289. <h5>XMLstr2iCal</h5>
  7290. <p>
  7291. The (static) method accepts a well-formed (rfc6321) XML string as argument.
  7292. </p>
  7293. <p class="label">Format</p>
  7294. <p class="format">iCalXML::XMLstr2iCal( xmlstr [, config] )</p>
  7295. <p class="comment">xmlstr = (string) rfc6321 XML
  7296. config = (array) iCalcreator config array (opt)</p>
  7297. <h5>XMLfile2iCal</h5>
  7298. <p>
  7299. The (static) method accepts an XML (rfc6321) local file or a remote URI, as argument.
  7300. </p>
  7301. <p class="label">Format</p>
  7302. <p class="format">iCalXML::XMLfile2iCal( xmlfile [, config] )</p>
  7303. <p class="comment">xmlfile = (string) rfc6321 XML file name or resource
  7304. config = (array) iCalcreator config array (opt)</p>
  7305. <h5>XML2iCal</h5>
  7306. <p>
  7307. This (static) method is doing the hard work in XMLstr2iCal/XMLfile2iCal methods.
  7308. </p>
  7309. <p class="label">Format</p>
  7310. <p class="format">iCalXML::XML2iCal( xmlstr [, config] )</p>
  7311. <p class="comment">xmlstr = (string) rfc6321 XML
  7312. config = (array) iCalcreator config array (opt)</p>
  7313. <br>
  7314. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7315. <a name="iCal2jSon"></a><h3>4.4 iCalcreator and json export</h3>
  7316. <p>
  7317. You can export iCal (XML) as json using a iCalcreator vcalendar instance,
  7318. <a href="#iCal2XML">iCalXML::iCal2XML()</a> (above),
  7319. simplexml_load_string and json_encode as follows:
  7320. </p>
  7321. <p class="example">
  7322. $xml = kigkonsult\iCalcreator\iCalXML::iCal2XML( $vcalendar );
  7323. $json = json_encode( simplexml_load_string( $xml ));
  7324. </p>
  7325. <br>
  7326. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7327. <a name="vCardhelpers"></a><h3>4.5 iCalcreator and iCalvCard class</h3>
  7328. <p>
  7329. The iCalvCard class (static) methods produces simplified vCard output.
  7330. </p>
  7331. <a name="iCal2vCard"></a><h4>4.5.1 iCal2vCard</h4>
  7332. <p>
  7333. The (static) method converts a single <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CONTACT">CONTACT</a> or
  7334. <a href="#ORGANIZER">ORGANIZER</a> URI (in email format) into simplified vCard output or saved in vCard file.
  7335. </p>
  7336. <p>
  7337. If argument directory is set, vCards are saved in (directory/) files, named like &lt;firstName&gt;.&lt;familyName&gt;.&quot;ext&quot;.
  7338. </p>
  7339. <p>
  7340. Returns vCard string or true if a valid directory is used as argument (and file write ok)
  7341. otherwise bool false.
  7342. </p>
  7343. <p class="label">Format</p>
  7344. <p class="format">iCalvCard::iCal2vCard( email [ ,version [ ,directory [ ,ext ]]] )</p>
  7345. <p class="comment">
  7346. email = (string) ATTENDEE, CONTACT or ORGANIZER URI in email format
  7347. version = (string) vCard version, default &quot;2.1&quot;, opt. &quot;3.0&quot;/&quot;4.0&quot;
  7348. directory = (string) if and where to save vCards files (write rights required), default bool false
  7349. ext = (string) vCard file extension, default &quot;vcf&quot;
  7350. </p>
  7351. <br>
  7352. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7353. <a name="iCal2vCards"></a><h4>4.5.2 iCal2vCards</h4>
  7354. <p>
  7355. The (static) method collects and converts all <a href="#ATTENDEE">ATTENDEE</a>s, <a href="#CONTACT">CONTACT</a>s and
  7356. <a href="#ORGANIZER">ORGANIZER</a>s (URI, in email format) into simplified vCard (string) output or
  7357. saved in vCard files, using <a href="#iCal2vCard">iCal2vCard</a> function (above).
  7358. </p>
  7359. <p>
  7360. The file name formatting and return values are described above in <a href="#iCal2vCard">iCal2vCard</a> function.
  7361. </p>
  7362. <p class="label">Format</p>
  7363. <p class="format">iCalvCard::iCal2vCards( vcalendar [ ,version [ ,directory [ ,ext ]]] )</p>
  7364. <p class="comment">
  7365. vcalendar = (object) iCalcreator object instance
  7366. version = (string) vCard version, default &quot;2.1&quot;, opt. &quot;3.0&quot;/&quot;4.0&quot;
  7367. directory = (string) if and where to save vCards files (write rights required), default bool false
  7368. ext = (string) vCard file extension, default &quot;vcf&quot;
  7369. </p>
  7370. <p class="comment">
  7371. Return (bool) true if argument directory is not null, otherwise vCard string.
  7372. </p>
  7373. <br>
  7374. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#TimezoneXMLjsonvCard">[up]</a>
  7375. <a name="Copyright_and_Licence"></a><h1>5 COPYRIGHT AND LICENSE</h1>
  7376. <table>
  7377. <tr><td>Copyright<td>(c) 2007-2017 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
  7378. <tr><td>Link <td>http://kigkonsult.se/iCalcreator/index.php
  7379. <tr><td>Package <td>iCalcreator
  7380. <tr><td>Version <td>2.24
  7381. <tr><td class="top">License <td>
  7382. Subject matter of licence is the software iCalcreator.<br>
  7383. The above copyright, link, package and version notices,
  7384. this licence notice and the [rfc5545] PRODID as implemented and
  7385. invoked in iCalcreator shall be included in all copies or
  7386. substantial portions of the iCalcreator.<br>
  7387. iCalcreator can be used either under the terms of
  7388. a proprietary license, available at <a href="https://kigkonsult.se/">&lt;https://kigkonsult.se/&gt;</a><br>
  7389. or the GNU Affero General Public License, version 3:<br>
  7390. iCalcreator is free software: you can redistribute it and/or
  7391. modify it under the terms of the GNU Affero General Public License
  7392. as published by the Free Software Foundation, either version 3 of
  7393. the License, or (at your option) any later version.<br>
  7394. iCalcreator is distributed in the hope that it will be useful,
  7395. but WITHOUT ANY WARRANTY; without even the implied warranty of
  7396. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  7397. GNU Affero General Public License for more details.<br>
  7398. You should have received a copy of the GNU Affero General Public
  7399. License along with this program.
  7400. If not, see <a href="http://www.gnu.org/licenses/">&lt;http://www.gnu.org/licenses/&gt;</a>.
  7401. </table>
  7402. <br>
  7403. <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Copyright_and_Licence">[up]</a>
  7404. </body>
  7405. </html>