From 38419e27f972a28a0c3dc505ce4610bd22d56191 Mon Sep 17 00:00:00 2001 From: Miles Lott Date: Mon, 13 Aug 2001 17:51:23 +0000 Subject: [PATCH] Update most versions to include mysql 3.22.X warning --- setup/doc/setup3.dvi | Bin 49096 -> 51420 bytes setup/doc/setup3.lyx | 15 + setup/doc/setup3.pdf | Bin 38541 -> 51489 bytes setup/doc/setup3.ps | 1802 ++++++++++++++++++++++------------------- setup/doc/setup3.sgml | 3 + setup/doc/setup3.txt | 8 + 6 files changed, 1000 insertions(+), 828 deletions(-) diff --git a/setup/doc/setup3.dvi b/setup/doc/setup3.dvi index b8c6db0efd91d9618e0c327220387325154f5f1c..b8c224718e949e3f9ae683bf401c486d565bbc0b 100644 GIT binary patch delta 2032 zcmZuyU2GIp6rSB$wMCJiQi!Pp8nBow1G@{|@|!GBenb#xv6!gM?abZXo6OHL_YP%^ z$)Y|GLtM9>*fd5(f-m(&Od}8y8bn1yd@%9Bm=F~nhzS}b;lUUKo^xlm1$8%@%+8#9 z&iQ`MnQ!hUuZ%R+7q|DA>FnBcX4RTwhG8V|N1txk+u8AH-w&;cZpaTToY*nr#Yf`H zujaqexa)R?jmyOHpJv1XcY4NV#+RRMJN8(jdm=w@qw#R3wWD!4;pH2bb6>vraD3$U zYdafvU#gvcG`^dCPc<$tjh}6#fB)>}<`z~zf9eotO2TjFGqZMuQi0?ggjcAae%gop znR)QSToA&>mub;dUDjzzyW6Rp{2cKj&=a!V~tXW@{b!+{{5B*>?dBk9JKvl{-I+X%xmAK0W%Yko!6<`Zo0>k15L+)7|DBfjCSj=%M zFvKLc!S_IwI4CycaG*j^@Ppb%t%mXD$V$Vo89u>4Ihypgs}fUC4KSSu_*7bH!j343 zg@ND~pzKRk47fb#q;zsexI$50{3m2oWvaR#;%zRGEqs(s*G}lVR*417Qaq3*A??Q& zV{kJyI!uO0=*S)gDrH{ah2eZ714 z_wL@@OWhAHm7OVABKryZZiN2Sy4vv>6IsZ!wrVD~x^v^rmPmpXY-7~c`F;dI4QWVH zqjT9|;f5|a+$*Y*hRGs6HJvC?CI|Q6fldD*UI$9WJevhJ8l`rks#z$P%Ee(ShopAt zKZ9B*itkE6#Sej@5`{284Fk|kp{7(aeNRcu2*V{|mFS7hr4@)FPN$K1!fwW-KR&I*xW_5X?;}8K|uwf(6 zTro%T*~F42hh{NuRhGFmnyel%$i>Xlqok+K1hNF)vH^`bgxMND zR4h52C#6vp39{se4jQCVZY%*D{Qys3R9u#MR8_AQ!f#HqnKhRm&_MS@^Gzh%K6t)@ z603jvUE~No;zCMHdg_C=WG)A{7H8nhMTK(L$|KEpe{Q@cMSBV}jOp`4AsQkTQ8B$7hq&;HRiexHxC!z2L|Gc6qopZ3!V(JW z*}TI;#>p|5y&m@$$sX@u3K8T86Y?l>Dq1L0uZ9#-9xH`#u=XB`brU{B-W_pGeR)(gAX59=742(bw0@{-Um1H&sU*}@fp6nPdx7m|BmIul_ zD&7eb%~dLeF&TC5aYGgSvzWmLWo~uv=4aI2>=^zUCh48*31e=~bA&O4s}6BMwR~yv zhKa`YZR3TC8qX<#F^{d>0W*H?4rf-L{Ji7|%X@N4i!<}{CcoTkq!E&lSv)xP;3b7M*OrPjGU)DW|llo*@uUV-Ee} zn_rYVxg;N?G False +\begin_inset Quotes erd +\end_inset + + to your field spec for an auto field. + This and probably older versions of MySQL require that specification within + the SQL for a field that will also be an index or unique field, which for + our uses should typically be true for an auto field. + MySQL 3.23.X and PostgreSQL do not have this issue. \layout Subsubsection Default 0 diff --git a/setup/doc/setup3.pdf b/setup/doc/setup3.pdf index 02c2835b9032925a06899aecf55b778d641177cc..0771fd8c8b7134ba076cf5c9580ec5b7b0cf5f90 100644 GIT binary patch literal 51489 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 z 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 delta 37944 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

+CnbzFKZlh$5n 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 diff --git a/setup/doc/setup3.ps b/setup/doc/setup3.ps index 07f06c428e..7a888461a4 100644 --- a/setup/doc/setup3.ps +++ b/setup/doc/setup3.ps @@ -2,15 +2,15 @@ %%Creator: dvipsk 5.86 p1.5d Copyright 1996-2001 ASCII Corp.(www-ptex@ascii.co.jp) %%based on dvipsk 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com) %%Title: setup3.dvi -%%Pages: 3 +%%Pages: 18 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 -%%DocumentFonts: Times-Roman +%%DocumentFonts: Helvetica-Bold Times-Roman Times-Italic Courier %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -t letter -o setup3.ps setup3.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2001.07.17:1611 +%DVIPSSource: TeX output 2001.08.13:1248 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -316,13 +316,42 @@ setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin 40258431 52099146 1000 600 600 (setup3.dvi) -@start /Fa 130[ 40 1[ 40 37 42 42 60 42 42 23 32 28 42 -42 42 42 65 23 42 23 23 42 42 28 37 42 37 42 37 1[ 42 -1[ 28 1[ 28 1[ 60 1[ 78 60 60 51 46 55 60 46 60 60 74 -51 60 32 28 60 60 46 51 60 55 55 60 1[ 37 47 47 47 23 -23 42 42 42 42 42 42 42 42 42 42 23 21 28 21 1[ 42 28 -28 28 1[ 69 42 1[ 34 28 29[ 46 46 2[{ TeXBase1Encoding ReEncodeFont} 85 -83.022 /Times-Roman rf end +@start /Fa 106[ 23 149[{ TeXBase1Encoding ReEncodeFont} 1 +66.4176 /Times-Roman rf /Fb 134[ 46 1[ 65 46 51 28 46 +32 1[ 51 51 51 74 23 2[ 23 51 2[ 46 51 46 51 46 13[ 55 +3[ 65 13[ 60 12[ 46 46 46 46 2[ 23 46[{ TeXBase1Encoding ReEncodeFont} +27 83.022 /Helvetica-Bold rf /Fc 130[ 45 1[ 45 1[ 45 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 1[ 45 45 45 +45 45 45 45 45 45 1[ 45 1[ 45 1[ 45 3[ 45 45 45 45 45 +45 45 45 45 45 45 45 2[ 45 45 45 45 45 45 45 45 45 2[ 45 +45 1[ 45 45 45 3[ 45 45 45 45 45 45 1[ 45 45 45 1[ 45 +45 45 45 1[ 45 45 1[ 45 34[{ TeXBase1Encoding ReEncodeFont} 71 +74.7198 /Courier rf /Fd 134[ 55 1[ 78 55 61 33 55 39 +61 61 61 61 89 28 55 1[ 28 61 61 33 55 61 55 61 55 1[ 55 +9[ 72 61 66 72 8[ 28 72 2[ 66 72 1[ 72 72 9[ 55 55 55 +55 55 55 55 55 1[ 28 1[ 28 2[ 33 33 28 36[ 61 2[{ +TeXBase1Encoding ReEncodeFont} 48 99.6264 /Helvetica-Bold +rf /Fe 138[ 42 23 1[ 32 1[ 42 42 6[ 42 2[ 37 3[ 42 9[ 69 +3[ 42 9[ 28 1[ 60 13[ 42 42 42 42 42 42 42 42 42 42 48[{ +TeXBase1Encoding ReEncodeFont} 22 83.022 /Times-Italic +rf /Ff 134[ 66 1[ 93 66 73 40 66 47 73 73 73 73 106 33 +2[ 33 73 73 40 66 73 66 73 66 1[ 66 7[ 113 1[ 86 2[ 86 +2[ 93 86 100 21[ 66 66 66 66 66 66 66 1[ 33 33 4[ 40 +40 37[ 73 2[{ TeXBase1Encoding ReEncodeFont} 41 119.552 +/Helvetica-Bold rf /Fg 107[ 37 37 24[ 37 42 42 60 42 +42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28 37 42 +37 42 37 1[ 42 5[ 60 60 78 60 60 51 46 55 60 46 60 60 +74 51 60 32 28 60 60 46 51 60 55 55 60 1[ 37 47 47 47 +1[ 23 2[ 42 42 42 42 42 42 42 42 23 21 28 21 2[ 28 28 +28 2[ 42 2[ 28 29[ 46 46 2[{ TeXBase1Encoding ReEncodeFont} 78 +83.022 /Times-Roman rf /Fh 137[ 80 88 48 80 56 1[ 88 +88 88 1[ 40 2[ 40 88 88 1[ 80 88 80 1[ 80 12[ 88 6[ 120 +88 2[ 40 4[ 104 104 1[ 104 11[ 80 80 80 80 80 1[ 40 40 +43[ 88 2[{ TeXBase1Encoding ReEncodeFont} 31 143.462 +/Helvetica-Bold rf /Fi 138[ 126 69 1[ 80 1[ 126 126 6[ 126 +2[ 115 3[ 115 9[ 195 3[ 138 9[ 57 1[ 161 71[{ +TeXBase1Encoding ReEncodeFont} 12 206.584 /Helvetica-Bold +rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi @@ -333,826 +362,943 @@ letter %%EndSetup %%Page: 1 1 -1 0 bop Black Black Fa -434 -417 a(phpGr) n(oupW) -7 -b(are) 26 b(Setup) g(III) 54 b(June) 26 b(18,) h(200) n(1) g(MilesLott) -g(A) g(de) n(v) o(e) n(loper) f(introdu) n(ction) g(to) h(using) f(the) -h(ne) o(xt) f(genera) n(tion) h(setup) f(application) g(for) g(php) n -(group) n(w) o(are.) -600 -318 y(Intro) n(duction) 51 -b(W) -7 b(elcome) 51 b(Thank) n(s) 27 b(for) d(taking) h(the) g(time) h -(to) g(look) e(o) o(v) o(er) g(this) i(docum) n(ent.) g(If) f(you) g -(are) g(a) h(de) n(v) o(e) n(loper) f(who) g(is) h(ne) n(w) g(to) f -(phpg) n(roupw) m(are,) h(this) g(docu) n(ment) -600 --218 y(will) 21 b(be) g(in) m(v) l(aluable) f(to) h(you) n(r) g -(success) g(durin) n(g) g(the) f(life) h(of) f(your) f(application) n -(.) i(This) g(is) g(in) g(additio) n(n) g(to) f(the) h(other) f(\002ne) -g(docu) n(mentation) g(a) n(v) n(ailable) g(in) g(the) h(php) n(gw) o -(api/do) n(c) -600 -118 y(director) n(y) g(in) g(you) n(r) g(install.) g -(Ev) o(en) f(long) n(-time) h(php) n(gw) g(de) n(v) o(e) n(lopers) g -(shou) n(ld) g(bene\002t) f(this) i(doc) n(ument.) e(Herein,) g(I) h -(will) g(attempt) f(to) h(outline) f(the) h(critical) g(steps) g(requ) n -(ired) g(in) -600 -19 y(order) g(to) i(get) f(along) g(with) g(setup3,) -g(setup-T) n(NG,) h(or) f(whate) n(v) o(er) f(we) i(end) f(up) g -(calling) g(it) h(\(He) o(y) -5 b(,) 21 b(ho) n(w) h(abou) n(t) h(') -5 -b(setup'?\)) 45 b(Ov) o(erv) n(ie) n(w) h(W) m(ith) 23 -b(setup3) n(,) g(we) g(introd) n(uce) f(se) n(v) o(eral) -600 -81 y(ne) n(w) i(capabilities) g(and) g(techno) n(logies) g(for) g(the) g -(de) n(v) o(elo) n(per) g(and) g(end) g(user) g(alik) o(e.) g(Michael) g -(Dean) g(w) o(as) h(kind) f(enou) n(gh) g(to) g(of) n(fer) g(up) f -(schema_p) n(roc) h(to) h(form) e(the) h(core) g(of) -600 -180 y(an) d(abstracted) f(and) h(datab) n(ase-indepe) n(ndent) f(upgra) -n(de) h(process.) g(This) g(enables) g(de) n(v) m(elopers) f(to) i -(write) f(a) g(single) g(set) h(of) f(upg) n(rades) g(and) f(table) h -(de\002nitions,) f(which) h(should) -600 280 y(then) e(w) o(ork) g(on) h -(MySQL) f(and) g(PostgreSQL,) g(or) h(an) o(y) f(other) g(databa) n(se) -i(type) e(we) h(might) f(add) h(in) g(the) f(future.) 39 -b(Adding) 18 b(to) i(this) h(to) f(con) n(trol) g(the) g(proc) n(ess) h -(w) o(as) g(a) f(good) e(chunk) -600 380 y(of) 23 b(the) h(old) g -(setup) f(prog) n(ram,) h(written) f(by) g(Dan) h(K) o(uyk) m(endall) g -(\(Seek3) n(r\).) f(Dan) h(had) f(e) n(v) o(ery) n(thing) g(to) h(do) g -(with) f(the) h(ne) n(w) g(depe) n(ndencies) f(suppor) n(t) i(and) e -(with) h(the) f(format) g(of) -600 479 y(the) f($setup_in) n(fo) g -(array) g(in) h(setup3) n(.) 46 b(Setup3) 22 b(adds) g(multi-lan) n -(guage) g(supp) n(ort) h(for) e(the) i(setup) f(application) n(,) h(a) g -(long) e(missed) i(featur) n(e,) g(I) g(w) o(ould) e(imagine.) 45 -b(Setup3) 21 b(gi) n(v) o(es) -600 579 y(each) 28 b(applicatio) n(n) g -(de) n(v) o(elo) n(per) g(contro) n(l) h(o) o(v) o(e) n(r) g(their) e -(application) g(install) i(and) e(upgr) n(ade) h(processes,) g(while) g -(gi) n(vin) n(g) h(them) e(access) i(to) f(w) o(ork) g(within) g(a) g -(realm) g(form) n(erly) -600 679 y(o) n(wned) c(by) h(only) g(the) g -(forme) n(r) h(core) f(php) n(group) n(w) o(are) h(app) n(lications.) g -(Y) -8 b(es,) 25 b(this) h(is) g(e) o(xtra) f(w) o(ork) g(for) f(the) i -(de) n(v) o(e) n(loper) -5 b(.) 25 b(But) h(it) g(is) g(hoped) e(that) i -(setup3) f(is) h(also) g(vie) n(wed) e(as) i(a) -600 -778 y(tool) d(that) h(can) g(truly) f(enhan) n(ce) h(the) g(de) n(v) o -(e) n(lopmen) n(t) h(pro) n(cess.) 49 b(OK.) 24 b(Let') -5 -b(s) 24 b(di) n(v) o(e) f(right) g(in...) 47 b(Application) 23 -b(setup) g(\002les) 49 b(The) 23 b(\002les) i(in) f(this) g(section) f -(are) h(contain) n(ed) g(within) -600 878 y(each) d(application) n -(/setup) h(directo) n(ry) -5 b(.) 21 b(Ev) o(er) n(y) h(app) f(will) h -(some) g(of) f(these) h(\002les) g(in) g(ord) n(er) g(to) g(oper) n -(ate) g(with) g(setup3.) 43 b(setup.in) n(c.php) 20 b(\(Required) n(\)) -44 b(Basic) 23 b(infor) n(mation) 43 b(The) -600 977 -y(v) n(alues) 28 b(in) g(this) g(section) g(must) g(be) g(used) g(by) g -(all) h(app) n(lications.) 57 b(The) 27 b(\002rst) i(section) f(of) g -(setup.inc) n(.php) f(de\002nes) h(the) g(v) o(ery) f(basic) h(and) g -(yet) g(critical) g(inform) n(ation) g(abou) n(t) -600 -1077 y(the) 21 b(applicatio) n(n.) g(T) -7 b(ak) o(e) 21 -b(a) h(look) e(at) h(the) g(follo) n(wing) f(section:) h($setup) n -(_info[) n('addre) n(ssbook']) n(['name) n(']) g(=) h('add) n(ressbook) -n(';) g($setup) n(_info[) n('addr) n(essbook']) n([') o(title']) e(=) i -('Ad-) -600 1177 y(dressboo) n(k';) c($setup_) n(info[') n(addressbo) n -(ok'][) n(') l(v) o(ersio) n(n']) g(=) g('0.9.1) n(3.00) n(2';) g -($setup_) n(info['a) n(ddressboo) n(k'][') n(app_o) n(rder') n(]) h(=) f -(4;) g($setup_in) n(fo['ad) n(dressboo) n(k'][') n(enable']) -600 -1276 y(=) 28 b(1;) 55 b('name') 27 b(is) h(used) f(throu) n(ghout) g -(php) n(grou) n(pw) o(are,) g(typically) g(in) g($php) n(gw_info) f -(\003ags) i(such) f(as) h('curren) n(tapp') f(or) g(as) h(the) g('app) n -(_name) n(') g(almost) f(e) n(v) o(eryw) n(here) g(else.) -600 -1376 y(') o(title') c(w) o(ould) f(be) h(used) g(in) g(the) g(na) n -(vba) n(r) m(,) g(admin,) f(prefer) n(ences,) h(as) h(well) f(as) h(in) -f(the) g(application) f(itself.) 47 b(The) 22 b(') l(v) o(ersio) n(n') h -(string) g(de\002nes) g(the) g(v) o(ersio) n(n) h(of) e(the) h -(application) -600 1476 y(and) g(table) h(code.) g(This) g(w) o(ould) f -(be) h(incremen) n(ted) g(whene) n(v) m(er) g(you) f(create) h(a) h(ne) -n(w) e(upgra) n(de) h(function) n(,) g(and) g(typically) f(only) g(for) -h(table) g(mod) n(i\002cations.) g(If) g(the) g(chang) n(e) h(is) -600 -1575 y(signi\002cant) 19 b(fro) n(m) h(the) f(last) h(code) e(update,) g -(you) g(could) g(incremen) n(t) i(this) g(here) e(also.) i(Incr) n -(ementing) e(this) i(v) o(er) n(sion) f(string) g(is) h(not) f(tri) n -(vial,) g(so) g(please) g(do) g(read) g(the) g(rest) g(of) g(this) -600 -1675 y(docu) n(ment) h(for) f(more) h(info) n(rmation) f(about) g -(that.) 41 b('app) n(_order) n(') 20 b(determine) n(s) h(the) f(order) f -(of) h(applicatio) n(ns) h(in) f(the) g(na) n(vbar) -7 -b(.) 21 b(If) f(the) g(numb) n(er) g(you) f(set) i(here) f(is) h(the) f -(same) g(as) h(is) -600 1774 y(set) h(for) f(anoth) n(er) h(app,) f -(the) g(app) g(whose) g('name) n(') h(is) g(\002rst) h(in) e(the) h -(Eng) n(lish) g(alphabe) n(t) h(w) o(ould) d(appear) g(\002rst.) i -(Smaller) g(num) n(bers) g(sho) n(w) f(closer) g(to) h(the) f(top) g -(or) g(left) h(end) f(of) g(the) -600 1874 y(na) n(vbar) -5 -b(,) 21 b(depen) n(ding) f(upon) g(the) h(layou) n(t.) 43 -b(The) 21 b('enab) n(le') g(string) g(is) h(used) e(by) h(the) g(php) n -(grou) n(pw) o(are) g(API) g(to) g(determin) n(e) h(whethe) n(r) g(an) e -(application) g(is) i(disabled) n(,) g(enab) n(led,) f(or) -600 -1974 y(enabled) h(b) n(ut) h(hidden) f(from) g(the) i(na) n(vb) n(ar) -5 -b(.) 24 b(Most) f(application) n(s) h(will) g(w) o(ant) g(this) f(set) i -(to) e(a) h(v) n(alue) e(of) h(1) g(\(enabled) n(\).) h(The) e -(notifywin) n(do) n(w) h(app) g(sets) h(this) g(to) f(2,) g(which) g(k) -o(eeps) -600 2073 y(it) g(of) n(f) f(the) h(na) n(vbar) -7 -b(.) 24 b(An) f(enab) n(le) h(of) e(0) h(w) o(ould) f(disable) g(the) h -(app) f(by) h(def) o(au) n(lt.) g(There) f(is) i(one) e(other) g -(special) h(case,) g(3,) f(which) h(is) g(used) g(primar) n(ily) g(by) f -(the) h(API) g(itself.) g(From) -600 2173 y(the) h(perspecti) n(v) m(e) -h(of) f(setup3,) f(the) h(API) h(is) g(an) f(application) f(just) i -(lik) o(e) f(an) o(y) g(other) f(application) n(.) i(By) f(setting) h -(the) f('enab) n(le') h(\003ag) f(to) h(3,) f(the) g(API) g(is) i -(still) f(enabled) n(,) g(b) n(ut) f(will) -600 2273 -y(not) i(be) g(assignab) n(le) h(to) f(a) g(user) g(as) h(a) f(real) g -(application) n(.) g(It) h(will) f(thereby) f(be) h(hidd) n(en) g(from) -f(the) h(admin) f(for) h(app) n(lication) g(and) f(user/grou) n(p) h -(editing.) 52 b(T) -7 b(able) 25 b(info) 52 b(Only) -600 -2372 y(applicatio) n(ns) 26 b(with) g(databa) n(se) h(tables) e(will) h -(use) g(entries) f(in) h(this) g(section.) 50 b(The) 25 -b(ne) o(xt) g(section) g(of) g($setup_in) n(fo) g(v) n(alues) g(is) i -(an) e(array) f(de\002ning) g(all) i(of) g(the) f(applicatio) n(n') -5 -b(s) -600 2472 y(database) 21 b(tables:) h($setup_) n(info['a) n -(ddressboo) n(k'][) n(') o(tables']) f(=) h(array\() e('phpg) n(w_addr) -n(essbook') n(,) i('phpg) n(w_add) n(ressbook_) n(e) o(xtra') f(\);) 44 -b(This) 22 b(is) h(a) f(simple) f(array) -5 b(,) 21 b(and) g(must) -600 -2571 y(list) f(accurately) e(the) h(curren) n(t) h(table) f(names) g -(you) g(are) g(using) f(in) i(you) n(r) g(applica) n(tion.) f(This) g -(list) i(will) f(match) e(a) i(much) e(more) h(comp) n(le) o(x) g -(array) f(of) h(table) g(speci\002cations,) g(as) h(you) -600 -2671 y(will) f(see) h(belo) n(w) -7 b(.) 38 b(Hooks) f(Some) 19 -b(app) n(lications) g(will) g(use) g(this) g(section.) 38 -b(The) 18 b(hook) n(s) i(array) d(part) i(of) f($setup_) n(info) g -(contains) g(a) h(simple) g(list) g(of) g(hoo) n(ks) g(the) g -(applicatio) n(n) g(will) -600 2771 y(use:) f($setup_) n(info[') n -(addressbo) n(ok'][) n('hoo) n(ks'][]) f(=) h('pref) n(erences';) f -($setup_) n(info[') n(addressbo) n(ok'][) n('hook) n(s'][]) g(=) h -('admin) n(';) 36 b(Here) 18 b(we) g(also) g(note) f(a) h(dif) n(fer) n -(ent) g(metho) n(d) g(of) -600 2870 y(') -5 b(stuf) n(\002ng) 18 -b(the) g(array) -5 b(.) d(') 19 b(In) f(an) o(y) g(case,) h(this) g -(list) g(of) g(hoo) n(ks) g(will) g(be) g(requ) n(ired) f(soon) g(in) h -(orde) n(r) g(for) f(your) f(hook) n(_admin) n(.inc.ph) n(p) i(and) f -(other) f(\002les) j(to) f(w) o(ork) n(.) g(This) g(is) g(being) f(don) -n(e) -600 2970 y(to) k(cut) h(do) n(w) n(n) g(on) f(the) g(manu) n(al) h -(directo) n(ry) f(listing) h(and) e(\002le_e) o(xists) i(loop) n(s) g -(done) e(currently) g(to) h(disco) o(v) o(e) n(r) h(hoo) n(k) g -(\002les.) g(Other) e(than) h('pref) n(erences') g(and) f('admin') n(,) -i('ho) n(me',) -600 3070 y('manu) n(al',) 17 b('after_) n(na) n(vbar) n -(') g(and) g('na) n(vb) n(ar_end) n(') g(are) g(all) g(v) n(alid) g -(hoo) n(k) g(entries.) 34 b(Depend) n(encies) h(All) 17 -b(application) n(s) h(will) g(ha) n(v) o(e) e(at) h(least) h(one) e -(entry) g(here.) 34 b(The) 16 b(\002nal) h(section,) -600 -3169 y(or) 23 b(array) g(of) h(data,) f(is) i(a) f(listing) g(of) f -(the) h(other) e(application) n(s) j(you) n(r) f(application) f(requ) n -(ires) h(in) g(order) e(to) i(function) n(:) g($setup_in) n(fo['ad) n -(dressboo) n(k'][') -6 b(depen) n(ds'][]) 23 b(=) h(array\() -600 -3269 y('appn) n(ame') e(=>) h('php) n(gw) o(api',) f(') l(v) o(er) n -(sions') h(=>) g(Array\() f('0.9) n(.10') n(,) i('0.) n(9.11') n(,) f -('0.9.1) n(2',) f('0.9.1) n(3') h(\)) f(\);) 47 b(This) 23 -b(is) g(the) g(standard) f(depe) n(ndenc) o(y) f(array) h(for) g(all) i -(php) n(grou) n(pw) o(are) -600 3368 y(applicatio) n(ns.) 19 -b(It) g(states) h(that) f(this) g(applicatio) n(n) g(require) n(s) h -(the) f(php) n(gw) o(api,) f(and) g(lists) j(the) d(v) o(ersion) n(s) i -(with) f(which) f(v) o(ersion) n(s) i(this) f(app) f(is) i(comp) n -(atible.) f(This) g(list) h(w) o(ould) e(need) -600 3468 -y(to) k(be) f(append) n(ed) h(upo) n(n) g(each) f(ne) n(w) g(API) h -(release,) g(assuming) e(your) h(applicatio) n(n) h(is) g(compatib) n -(le) g(with) g(this) g(ne) n(w) g(API) g(v) o(er) n(sion.) g(Y) -9 -b(ou) 21 b(may) g(list) h(other) f(application) n(s) i(here) n(,) -600 -3568 y(e.g.) 17 b(your) f(app) h(might) g(depend) f(upon) g('email') h -(in) h(order) e(to) i(w) o(ork) f(prop) n(erly) -5 b(.) 35 -b(Do) 18 b(NO) m(T) f(list) i(applicatio) n(ns) f(here) f(without) g -(consider) n(ing) h(this:) g(If) f(you) g(do) g(list) i(an) e -(application) -600 3667 y(here,) 25 b(and) h(your) f(app) h(does) g -(not) g(really) g(requ) n(ire) h(it,) f(your) f(application) g(will) i -(not) f(install) h(unless) f(that) h(other) e(application) g(is) i -(already) e(installed.) h(This) h(is) g(hand) n(led) g(nor) l(-) -600 -3767 y(mally) c(within) g(the) g(install/upg) n(rade) g(pro) n(cess) h -(loops,) e(which) h(will) h(install) f(only) g(app) n(lications) g -(whose) g(depen) n(dencies) g(are) g(satis\002ed.) g(Using) g(a) h -(multipass) f(fun) n(ction,) g(the) -600 3867 y(applicatio) n(ns) e -(are) e(installed) h(in) g(the) g(corre) n(ct) h(ord) n(er) f(to) g -(ensure) f(that) h(depend) n(encies) g(are) g(resolv) o(e) n(d.) g(In) f -(all) i(cases,) f(the) g(API) g(w) o(ould) f(be) h(installed) g -(\002rst) g(in) g(e) n(v) o(ery) f(ne) n(w) g(install) -600 -3966 y(or) j(upgr) n(ade,) g(since) h(all) g(application) n(s) h(dep) n -(end) e(on) h(the) f(API.) 46 b(tables_b) n(aseline.inc.ph) n(p) 23 -b(\(Recom) n(mended) n(\)) 46 b(An) o(y) 22 b(applicatio) n(n) h(that) g -(has) f(at) h(least) h(one) e(upg) n(rade) g(routin) n(e) -600 -4066 y(will) 27 b(ha) n(v) o(e) e(this) h(\002le.) 53 -b(The) 26 b(tables_b) n(aseline) g(\002le) h(repre) n(sents) g(the) f -(earliest) g(suppo) n(rted) g(v) o(ersion) f(of) g(an) h(applicatio) n -(n') -5 b(s) 27 b(tables.) f(This) g(\002le) g(is) h(used) f(only) f -(in) h(the) g(upg) n(rade) -600 4165 y(proce) n(ss,) 20 -b(and) e(is) i(critical) f(to) g(its) h(success.) f(It) g(contains) f -(an) h(array) f(of) g(database-in) n(depend) n(ent) h(table,) g -(\002eld,) f(k) o(e) o(y) h(and) f(inde) o(x) f(de\002nitions.) 38 -b(This) 19 b(array) e(is) j(forma) n(tted) f(for) g(use) -600 -4265 y(by) k(the) g(class.schema_) n(proc_) n(array) -5 -b(.) n(inc.ph) n(p) 24 b(\002le) f(in) g(setup3.) g(See) g(the) g -(tables_up) n(date) g(section) g(belo) n(w) f(for) h(more) f(detail) h -(about) f(schema_p) n(roc,) h(b) n(ut) g(for) f(no) n(w) -5 -b(,) 22 b(here) g(is) i(a) -600 4365 y(simple) c(table) g(de\002nition) -f(in) h(this) g(forma) n(t:) h($php) n(gw_ba) n(seline) g(=) f(array) n -(\() h(') -5 b(sk) o(el') 20 b(=>) g(array) n(\() h('fd) n(') g(=>) f -(array) n(\() g(') -5 b(sk) o(el_id') 20 b(=>) g(array) n(\(') o(typ) n -(e') g(=>) g('auto',) -8 b('nullable') 19 b(=>) h(f) o(alse\),) -600 -4464 y(') -5 b(sk) o(el_o) n(wn) n(er') 21 b(=>) g(array\(') m(type') f -(=>) h(') l(v) n(arch) n(ar',) -6 b('p) n(recision') 21 -b(=>) g(25\)) n(,) h(') -5 b(sk) o(el_access') 21 b(=>) g(array\() n(') -o(typ) n(e') h(=>) f(') l(v) n(ar) n(char',) -6 b(') n(precision') 20 -b(=>) h(10\),) f(') -5 b(sk) o(el_cat') 21 b(=>) g(array\() n(') o -(type') -600 4564 y(=>) 26 b('int',) -6 b(') n(precision') 25 -b(=>) h(4\),) f(') -5 b(sk) o(el_des') 25 b(=>) h(array) n(\(') o(typ) n -(e') g(=>) g(') o(te) o(x) n(t'\),) f(') -5 b(sk) o(el_pri') 25 -b(=>) h(array\() n(') o(typ) n(e') g(=>) g('int',) -6 -b('p) n(recision') 25 b(=>) h(4\)) f(\),) h('pk) n(') g(=>) g(array\() n -(') -5 b(sk) o(el_id'\),) 25 b('fk') -600 4664 y(=>) d(array\() n(\),) h -('ix') e(=>) h(array\(\)) n(,) h('uc') e(=>) h(array\() n(\)) h(\)) f -(\);) 45 b(This) 22 b(multi-dime) n(nsional) g(array) f(contains) g(1) i -(subar) n(ray) f(with) g(5) h(subs) f(of) g(its) h(o) n(wn.) e(The) h -(\002rst) h(array) e(\(') -5 b(sk) o(el') 22 b(abo) o(v) m(e\)) -600 -4763 y(de\002nes) i(the) h(table) f(name.) g(Belo) n(w) h(that) g(are) f -(5) h(sections,) f('fd') g(for) g(\002eld) g(de\002nitions,) g('pk') f -(to) i(de\002ne) f(primar) n(y) h(k) o(e) o(ys,) f('fk') g(to) g -(de\002ne) g(foreign) f(k) o(e) o(ys,) h('ix') g(to) h(de\002ne) f(in-) --600 4863 y(de) o(x) o(e) n(d) 19 b(\002elds,) f(and) g('uc') f(to) h -(de\002ne) g(column) n(s) h(that) f(require) f(uniqu) n(e) i(v) n -(alues.) f(In) f(the) i(abo) o(v) m(e) f(e) o(xamp) n(le,) h(the) f -(table) g(') -5 b(sk) o(el') 18 b(has) h(6) f(\002elds) h(\(sk) o -(el_id,) e(sk) o(el_o) n(wn) n(er) m(,) h(sk) o(el_access,) -600 -4962 y(sk) o(el_cat,) f(sk) o(el_des,) g(sk) o(el_pr) n(i\),) h(and) f -(') -5 b(sk) o(el_id') 17 b(is) h(de\002ned) f(also) g(as) i(the) e -(primar) n(y) h(k) o(e) o(y) f(for) g(this) h(table.) f(More) g(info) n -(rmation) g(on) g(this) h(array) e(is) j(belo) n(w) -7 -b(.) 18 b(But,) g(this) g(for) n(mat) g(w) o(as) -600 -5062 y(chosen) 23 b(as) h(an) f(a) n(v) n(ailable) g(solution) f(for) h -(de\002ning) f(tables) i(and) f(\002elds) h(withou) n(t) g(ha) n(ving) f -(to) g(maintain) g(seperate) g(\002les) h(for) f(dif) n(fer) n(ent) h -(datab) n(ases.) 48 b(tables_curr) n(ent.inc.p) n(hp) -600 -5162 y(\(Recomm) n(ended\)) c(All) 23 b(applica) n(tions) g(with) f -(tables) g(will) h(need) f(this) g(\002le.) 46 b(The) 22 -b(tables_cu) n(rrent) g(\002le) h(de\002ne) n(s) g(the) g(curr) n(ent) g -(table) f(de\002nitio) n(n) h(that) f(matches) g(the) g(') l(v) o(er) n -(sion') -600 5261 y(string) i(in) h($setup_) n(info) f(as) h(well) g -(as) h(the) e(curren) n(t) h(code.) f(This) h(\002le) g(is) g(used) g -(only) e(for) h(ne) n(w) g(installs,) i(or) e(whene) n(v) m(er) g(the) h -(applicatio) n(n) g(is) g(remo) o(v) m(ed) f(and) g(reinstalled.) g -(The) -600 5361 y(form) n(at) h(and) f(name) g(of) h(the) f(array) g -(in) g(this) h(\002le) h(is) f(the) g(same) f(as) i(for) d(the) i -(tables_baselin) n(e) g(\002le) h(listed) f(abo) m(v) o(e.) f(In) g(f) o -(act,) h(whene) n(v) m(er) f(it) i(is) f(requir) n(ed) g(to) f(change) g -(you) n(r) h(table) -600 5461 y(de\002nition) n(s,) c(you) f(w) o(ould) -g(start) h(by) f(cop) o(yin) n(g) h(the) g(curr) n(ent) g(\002le) g(o) o -(v) o(e) n(r) g(to) g(becom) n(e) g(the) g(tables_b) n(aseline) g -(\002le.) g(After) f(ha) n(ving) g(created) g(you) n(r) h(upgr) n(ade) g -(rou) n(tines,) g(you) f(w) o(ould) -600 5560 y(then) k(recrea) n(te) h -(the) f(curren) n(t) h(\002le) g(to) f(match) g(the) g(ne) n(w) g -(table) g(de\002nition) n(s.) 50 b(tables_u) n(pdate.in) n(c.php) 23 -b(\(Recommen) n(ded\)) 48 b(An) o(y) 23 b(application) g(which) h(requ) -n(ires) h(an) f(upg) n(rade) -600 5660 y(to) e(a) h(pre) n(vio) n(us) g -(v) o(ersion) n(') -5 b(s) 23 b(tables) g(will) g(need) f(this) g -(\002le.) 46 b(This) 22 b(\002le) h(will) h(be) e(the) g(most) g -(comple) o(x) f(of) h(all) h(setup-o) n(riented) f(\002les) h(with) f -(which) g(you) g(will) h(be) f(w) o(orkin) n(g.) g(It) h(will) -600 -5759 y(contain) 16 b(all) i(upg) n(rade) f(fun) n(ctions) g(capable) f -(of) h(upgr) n(ading) f(an) o(y) h(possible) f(v) o(ersion) g(of) h -(you) n(r) h(php) n(grou) n(pw) o(are) f(app.) f(These) h(upg) n(rade) g -(routin) n(es) h(roug) n(hly) f(match) f(the) h(old) g(setup) -600 -5859 y(prog) n(ram') -5 b(s) 19 b(upgra) n(de) g(function) n(s,) h(b) n -(ut) f(the) g(use) g(of) g(objects) g(and) g(the) g(metho) n(ds) h(ha) n -(v) o(e) e(change) n(d) i(dram) n(atically) -5 b(.) 19 -b(The) g(simplest) g(v) o(ersion) f(upg) n(rade) h(routin) n(e) h(w) o -(ould) e(look) g(lik) o(e:) -600 5959 y($test[]) 27 b(=) h("0.9) n -(.3pre1) n(0";) g(fun) n(ction) f(addre) n(ssbook_u) n(pgrad) n(e0_9_) n -(3pre1) n(0\(\)) g({) h(glob) n(al) g($setup_) n(info;) f($setup_) n -(info[') n(addressbo) n(ok'][) n('curre) n(ntv) o(er') n(]) h(=) g -('0.9) n(.3';) f(return) -600 6058 y($setup_) n(info[') n(addressbo) n -(ok'][) n('curre) n(ntv) o(er') n(];) 22 b(}) 45 b(This) 21 -b(upgr) n(ade) h(func) n(tion) g(merely) e(updates) h(the) h(curr) n -(ent) g(v) o(ersion) e(numbe) n(r) -5 b(.) 22 b(Note) g(that) g(there) f -(is) h(not) g(only) e(an) i(upg) n(rade) -600 6158 y(functio) n(n,) c -(b) n(ut) h(also) g(the) f(setting) g(of) g(a) h(v) n(alue) f(in) h -(the) f($test) h(array) -7 b(.) 19 b(The) f(name) f(') o(test') h(is) i -(a) f(hold) n(o) o(v) o(er) e(from) h(the) g(old) g(setup) g(prog) n -(ram,) g(and) g(is) h(an) g(arbitra) n(ry) g(cho) n(ice.) g(Ho) n(we) n -(v) o(e) n(r) m(,) -600 6258 y(this) j(name) f(must) h(be) g(used) f -(for) g(the) h(upg) n(rade) g(pro) n(cess) h(to) f(w) o(ork) n(.) g -(Prior) g(to) g(each) f(of) g(your) g(upg) n(rade) g(function) n(s,) h -(add) g(the) f(v) n(alue) g(of) h(the) f(pre) n(vio) n(us) i(v) o(er) n -(sion) f(to) g($test.) 44 b(No) n(w) -600 6357 y(look) 23 -b(at) h(the) g(fun) n(ction) g(name.) f(The) g(name) g(is) i(impo) n -(rtant) f(and) f(should) g(be) g(structured) g(as) h(the) g(applicatio) -n(n) g(name) f(and) g(the) h(v) o(ersion) e(from) h(which) g(you) g -(are) h(intend) n(ing) g(to) -600 6457 y(upgr) n(ade.) g(The) f('.) -6 -b(') h(s) 25 b(in) f(the) g(v) o(ersion) f(string) g(are) h(replaced) f -(with) h('_'.) 48 b(Inside) 23 b(the) h(function) n(,) g(we) h(glob) n -(al) g(the) f($setup_) n(info) g(array) -7 b(.) 24 b(Ne) o(xt,) f(we) i -(alter) f(the) g(v) o(ersion) f(num) n(ber) p Black Black -90 rotate dyy eop +1 0 bop Black 0 TeXcolorgray Black Black Fi 964 647 a(phpGr) l(oupW) -8 +b(are) 58 b(Setup) g(III) p Fh 1805 923 a(Miles) 39 b(Lott) p +Fg 695 1155 a(A) 21 b(de) n(v) o(e) n(loper) f(intro) n(duction) f(to) i +(using) e(the) h(ne) o(xt) g(gener) n(ation) g(setup) g(application) f +(for) 695 1263 y(phpg) n(roup) n(w) o(are.) p Fh -2 1981 +a(1.) 39 b(Intr) m(odu) n(ction) p Ff -2 2309 a(1.1.) 34 +b(W) l(elcom) r(e) p Fg 396 2476 a(Thank) n(s) 21 b(for) f(taking) f +(the) i(time) f(to) g(look) g(o) o(v) m(er) g(this) h(docu) n(ment.) f +(If) g(you) f(are) i(a) f(de) n(v) o(elo) n(per) g(who) g(is) h(ne) n +(w) f(to) 396 2584 y(phpg) n(roup) n(w) o(are,) g(this) h(docum) n(ent) +f(will) h(be) f(in) m(v) n(alua) n(ble) h(to) f(your) f(success) i(dur) +n(ing) f(the) g(life) h(of) f(you) n(r) h(applica) n(tion.) f(This) 396 +2692 y(is) h(in) g(additio) n(n) g(to) f(the) g(other) g(\002ne) g +(docu) n(mentation) f(a) n(v) n(ailable) h(in) g(the) g(phpg) n(w) o +(api/doc) g(directo) n(ry) g(in) g(your) f(install.) 396 +2800 y(Ev) o(en) g(long-tim) n(e) i(phpg) n(w) g(de) n(v) o(e) n +(lopers) f(should) f(bene\002t) h(this) g(docum) n(ent.) g(Herein,) g +(I) g(will) h(attempt) f(to) g(outline) g(the) 396 2908 +y(critical) h(steps) f(require) n(d) h(in) f(order) f(to) h(get) h +(along) e(with) h(setup3,) f(setup-TNG,) g(or) h(whate) n(v) o(er) f +(we) i(end) e(up) h(calling) g(it) 396 3016 y(\(He) o(y) -5 +b(,) 19 b(ho) n(w) h(abou) n(t) h(') -5 b(setup'?\)) p +Ff -2 3386 a(1.2.) 34 b(Over) q(v) r(ie) n(w) p Fg 396 +3553 a(W) m(ith) 21 b(setup3) n(,) g(we) f(introd) n(uce) g(se) n(v) o +(eral) g(ne) n(w) f(capabilities) h(and) g(techno) n(logies) g(for) f +(the) h(de) n(v) o(elo) n(per) g(and) f(end) h(user) g(alik) o(e.) 396 +3661 y(Michael) g(Dean) g(w) o(as) h(kind) e(enoug) n(h) i(to) f(of) n +(fer) f(up) h(schema_) n(proc) f(to) i(form) e(the) h(core) g(of) g(an) +g(abstracted) f(and) 396 3769 y(database-in) n(depend) n(ent) h(upgr) n +(ade) g(process.) g(This) g(enables) g(de) n(v) o(elo) n(pers) g(to) h +(write) f(a) g(single) h(set) g(of) e(upgrad) n(es) i(and) 396 +3877 y(table) f(de\002nitions,) g(which) f(should) g(then) h(w) o(ork) g +(on) f(MySQL) h(and) g(PostgreSQL,) f(or) h(an) o(y) g(other) f +(database) h(type) f(we) 396 3985 y(might) h(add) f(in) i(the) f(futur) +n(e.) 396 4135 y(Adding) f(to) h(this) h(to) f(control) f(the) i(pro) n +(cess) g(w) o(as) g(a) g(good) e(chun) n(k) h(of) g(the) h(old) e +(setup) h(progr) n(am,) g(written) g(by) g(Dan) 396 4243 +y(K) o(uyk) m(endall) g(\(Seek3r\)) n(.) h(Dan) f(had) f(e) n(v) o(ery) +n(thing) h(to) g(do) g(with) g(the) h(ne) n(w) f(dep) n(endencies) g +(supp) n(ort) g(and) g(with) g(the) h(for) n(mat) 396 +4350 y(of) f(the) g($setup_in) n(fo) g(array) f(in) i(setup3.) 396 +4500 y(Setup3) f(adds) g(multi-lan) n(guag) n(e) h(suppo) n(rt) g(for) e +(the) i(setup) f(applica) n(tion,) g(a) h(long) e(missed) h(feature,) f +(I) i(w) o(ould) e(imagine.) 396 4649 y(Setup3) h(gi) n(v) o(e) n(s) h +(each) f(application) f(de) n(v) o(e) n(loper) h(contr) n(ol) h(o) o(v) +m(er) f(their) g(application) f(install) i(and) e(upgra) n(de) i(pro) n +(cesses,) 396 4757 y(while) f(gi) n(ving) f(them) h(access) h(to) f(w) o +(ork) g(within) g(a) g(realm) g(forme) n(rly) g(o) n(wned) f(by) h +(only) g(the) g(form) n(er) g(core) g(phpg) n(roup) n(w) o(are) p +Black Fe 3842 5348 a(1) p Black 90 rotate dyy eop %%Page: 2 2 -2 1 bop Black Black Fa -600 -417 a(in) 26 b(that) g(array) -7 -b(,) 26 b(for) f(our) g(applicatio) n(n.) h(Please) g(be) g(carefu) n -(l) h(to) e(specify) g(Y) n(OUR) h(application) f(name) g(here.) g(The) -g(v) o(ery) f(last) j(thing) e(we) h(do) f(is) i(to) f(return) e(this) j -(ne) n(w) e(v) o(ersion) -600 -318 y(to) i(the) h(calling) e(function) n -(.) i(The) e(upgra) n(de) i(pro) n(cess) g(relies) g(on) f(the) g(v) n -(alue) g(retur) n(ned,) g(since) g(it) h(uses) g(this) f(directly) g -(to) g(determin) n(e) h(the) f(ne) n(w) g(v) o(ersion) n(.) h(This) f -(may) g(appear) -600 -218 y(illogical) 22 b(on) g(some) g(le) n(v) o -(el,) g(b) n(ut) g(it) h(does) f(w) o(ork.) g(The) g(reason) g(for) f -(returnin) n(g) i(this) f(v) n(alue) g(instead) g(of) g(a) h(T) m(rue) f -(or) g(1,) g(etc.) h(has) f(to) h(do) f(with) g(v) n(ariable) f(scope) h -(and) g(lifetime.) g(In) -600 -118 y(this) e(w) o(ay) -5 -b(,) 20 b(e) n(v) o(e) n(n) g(the) g(globalin) n(g) g(of) g($setup_) n -(info) f(inside) h(the) g(fun) n(ction) g(may) f(ha) n(v) o(e) g -(little) i(ef) n(fect) e(on) h(the) g(upg) n(rade) f(process.) h(But,) g -(there) f(may) g(be) h(v) n(alues) f(in) h(this) h(array) e(you) -600 --19 y(w) o(ould) k(w) o(ant) h(to) f(use) h(within) g(the) f(function) n -(.) h(More) f(on) g(that) h(later) -5 b(.) 48 b(There) 23 -b(is) h(one) f(other) g(v) n(ariable) g(you) f(w) o(ould) h(need) g(if) -h(doing) f(an) o(y) f(database) h(operatio) n(ns) h(here.) f(If) h(you) --600 81 y(globa) n(l) d($ph) n(pgw_setu) n(p,) f(you) e(will) j(then) e -(ha) n(v) o(e) f(access) j(to) e(db) g(and) g(schema_p) n(roc) g -(objects) g(and) g(function) n(s.) h(The) f(objects) h(of) f(interest) g -(here) g(are:) 40 b($ph) n(pgw_setup) n(->oPro) n(c) -600 -180 y($php) n(gw_setup) n(->db) m(.) j(F) o(or) 22 b(most) g(datab) n -(ase) h(w) o(ork) e(you) g(should) g(use) h(the) g(oProc) f(object.) g -(This) h(also) h(has) f(a) g(db) g(objec) n(t) h(that) f(should) f(be) h -(used) f(for) h(most) g(standar) n(d) g(phpg) n(w) -600 -280 y(API) e(db) f(class) h(function) n(s,) g(includin) n(g) g($db) n -(->quer) n(y) -5 b(,) 19 b(ne) o(xt_r) n(ecord,) f(num_r) n(o) n(ws,) i -(and) f(f.) g(The) g(use) h(of) f(these) h(for) f(standard) f(db) h -(operatio) n(ns) h(is) h(critical) e(to) h(the) f(upgra) n(de) h(pro-) --600 380 y(cess.) f(Schema_) n(proc) f(has) h(a) f(\003ag) h(that) f -(can) h(be) f(set) h(to) g(determ) n(ine) g(what) f(mode) g(of) g(upg) n -(rade) g(we) h(are) f(in.) h(This) f(\003ag) h(is) g(set) g(in) g(the) f -(setup) h(class) g(durin) n(g) g(the) f(upgr) n(ade) h(pro) n(cess,) --600 479 y(and) j(should) g(not) h(be) g(altered) f(locally) -5 -b(.) 46 b(This) 23 b(\003ag) g(is) h(a) f(decision) g(on) f(whether) g -(to) h(alter) g(the) g(database) g(or) f(the) h(schema_p) n(roc) g -(array) -5 b(.) 21 b(The) i(tables_baseline) f(\002le) i(abo) m(v) o(e) -f(is) -600 579 y(loaded) 17 b(by) h(setup) g(prior) f(to) h(runn) n -(ing) g(your) f(upgr) n(ade) h(routine) n(s.) h(If) f(the) g(curren) n -(t) h(installed) f(v) o(ersion) f(is) i(greater) e(than) h(the) g -(curren) n(t) h(upgr) n(ade) f(routine) n(,) h(we) f(don') o(t) f(need) -g(to) i(alter) -600 679 y(the) i(database) g(yet.) h(But) g(schema_) n -(proc) f(instead) g(alters) h(the) f($php) n(gw_ba) n(seline) h(array) f -(in) g(memor) n(y) -5 b(.) 21 b(The) g(maintenan) n(ce) h(of) f(this) h -(array) f(is) h(done) f(e) n(v) o(en) f(when) h(we) h(do) f(alter) -600 -778 y(the) f(database.) f(Once) g(our) g(v) o(ersion) g(numb) n(er) h -(in) g(the) g(test) g(array) f(matches) h(the) g(curr) n(ently) g -(installed) f(v) o(ersion) g(of) g(an) h(application) n(,) g(real) g(w) -o(ork) f(on) h(the) g(tables) g(be) o(g) n(ins.) 41 b('Why) -600 -878 y(bothe) n(r) 25 b(modify) n(ing) g(this) g(array) f(at) h(all',) g -(you) e(may) i(ask.) f(The) h(array) e(must) i(be) g(maintain) n(ed) g -(in) g(orde) n(r) g(to) g(k) o(eep) f(curren) n(t) i(table) e -(de\002nition) g(status.) h(This) g(is) h(used) e(in) h(some) -600 -977 y(schema_) n(proc) g(fun) n(ctions) g(when) g(altering) f(column) n -(s) i(and) f(tables.) g(This) g(is) h(especially) f(critical) g(for) g -(pgsq) n(l) h(schema_p) n(roc) f(func) n(tions.) 51 b(By) 26 -b(using) e(the) h($php) n(gw_setup-) -600 1077 y(>oProc) h(objec) n(t) i -(for) d(basic) i(inserts) g(and) f(quer) n(ies,) h(we) g(achei) n(v) o -(e) f(the) g(ability) g(to) h(run) f(all) h(upg) n(rade) f(functio) n -(ns) h(in) g(e) n(v) o(er) n(y) g(upgr) n(ade) f(c) o(ycle) g(without) g -(actually) g(altering) g(the) -600 1177 y(database) 20 -b(until) g(we) h(reach) e(the) i(curr) n(ent) g(v) o(ersion) e(we) i -(actually) f(w) o(ant) g(to) h(upg) n(rade.) f(F) o(or) g(e) o(xam) n -(ple:) h($sql) f(=) h("SELECT) f(*) h(FR) m(OM) f(phpg) n(w_addr) n -(essbook_) n(e) o(xtra) g(WHERE) -600 1276 y(contact_) n(name='n) n -(otes'";) 30 b($php) n(gw_setup) n(->oProc) n(->quer) n(y\($sql,_) n -(_LINE_) n(_,__FI) n(LE__\);) f(while\($p) n(hpgw_) n(setup->oPr) n -(oc->ne) o(x) n(t_reco) n(rd\(\)\)) g({) 61 b(W) -7 b(e) 31 -b(could) e(ha) n(v) o(e) -600 1376 y(used) d($php) n(gw_setup) n(->db) g -(or) g(e) n(v) o(e) n(n) h(a) f(cop) o(y) g(for) f(the) i(abo) o(v) m -(e) f(acti) n(vity) -5 b(.) 25 b(Ho) n(we) n(v) o(er) -5 -b(,) 27 b(using) e(the) h(abo) o(v) o(e) f(method) g(ensures) h(that) g -(an) g(array) g(only) f(upgr) n(ade) h(does) g(just) h(that.) -600 -1476 y(If) i(the) h(\003ag) g(w) o(as) g(set) h(in) f(setup) f(telling) -g(schema_p) n(roc) h(to) f(alter) h(the) g(array) e(only) -5 -b(,) 29 b(we) h(do) f(not) g(w) o(ant) h(to) g(touch) e(the) i(tables) g -(for) f(inserts) h(or) f(selects) i(yet.) e(In) g(this) i(case,) -600 -1575 y($php) n(gw_setup) n(->oProc) n(->ne) o(xt_) n(record) n(\(\)) e -(retur) n(ns) h(F) o(alse,) f(and) f(the) h(loop) f(is) h(skipped) n(.) -h(The) e($ph) n(pgw_b) n(aseline) h(array) f(does) h(not) f(kno) n(w) g -(abou) n(t) h(table) g(content,) f(only) -600 1675 y(table) 21 -b(and) f(\002eld) h(de\002nitions.) 41 b(If) 21 b(the) g(upgr) n(ade) g -(func) n(tion) g(containin) n(g) g(this) g(method) f(is) i(actually) e -(w) o(orkin) n(g) h(on) g(the) g(tables) g(\(curr) n(entv) o(er) f(<=) h -(the) g(upg) n(rade) g(fun) n(ction\),) f(then) -600 -1774 y(ne) o(xt_) n(record) n(\(\)) 25 b(is) g(returned) e(as) j(the) e -(e) o(xpected) g(action) g(of) g(pulling) g(the) g(ne) o(xt) g(ro) n(w) -h(of) f(data.) g(Inside) h(of) f(this) h(while) g(loop,) f(you) f(can) i -(safely) f(use) h($php) n(gw_setup-) n(>db,) f(or) -600 -1874 y(prefer) n(ably) e(a) g(cop) o(y) -7 b(,) 22 b(to) g(do) g(the) g -(insert/delete,) f(etc) h(you) f(w) o(ant) h(to) g(ha) n(v) o(e) f -(happen) g(here) n(.) 45 b($cid) 22 b(=) g($ph) n(pgw_setup) n(->oPro) n -(c->f\('co) n(ntact_id') n(\);) g($cv) n(alu) f(=) h($php) n(gw_setup-) --600 1974 y(>oProc-) n(>f\('co) n(ntact_v) n(a) n(lue'\);) e($upd) n -(ate) h(=) g("UPD) m(A) -9 b(TE) 20 b(php) n(gw_add) n(ressbook) f(set) -j(note=) n('") f(.) g($cv) n(alu) e(.) i("') f(WHERE) i(id=") e(.) h -($cid;) f($db) n(1->qu) n(ery\($u) n(pdate\);) g($dele) n(te) h(=) -600 -2073 y("DELETE) c(FR) m(OM) h(php) n(gw_ad) n(dressbook) n(_e) o(xtr) n -(a) g(WHERE) h(con) n(tact_id=") e(.) h($cid) f(.) h(") g(AND) g -(contac) n(t_name=') n(notes'";) f($db1) n(->quer) n(y\($d) n(elete\);) -h(}) 36 b($db1) 16 b(is) j(a) e(cop) o(y) g(of) -600 -2173 y($php) n(gw_setup) n(->db,) g(to) h(a) n(v) n(oid) g(poten) n -(tial) h(con\003icts) f(with) g(the) g(rest) g(of) g(setup') -5 -b(s) 18 b(db) f(acti) n(vities.) 37 b(In) 18 b(add) n(ition) g(to) g -(the) g(basic) g(API) h(db) e(class) i(functio) n(ns,) f(schema_p) n -(roc) g(intro-) -600 2273 y(duces) 27 b(the) g(follo) n(win) n(g) g -(special) h(fun) n(ctions:) f(function) f(Drop) n(T) -7 -b(able\($sT) g(ableNa) n(me\)) 27 b(functio) n(n) h(Drop) n(Column\($) n -(sT) -7 b(ableName,) 26 b($aT) -7 b(ableDef,) 26 b($sColumn) n(Name\)) h -(func-) -600 2372 y(tion) 33 b(RenameT) -7 b(ab) n(le\($sOldT) g -(ableNa) n(me,) 33 b($sNe) n(wT) -7 b(ableNam) n(e\)) 34 -b(fun) n(ction) f(RenameColu) n(mn\($sT) -7 b(ab) n(leName,) 33 -b($sOldColum) n(nName,) g($sNe) n(wColu) n(mnName\)) f(func-) -600 -2472 y(tion) 19 b(AlterColumn\() n($sT) -7 b(ableName,) 19 -b($sColumn) n(Name,) h($aColu) n(mnDef\)) f(func) n(tion) h(AddColu) n -(mn\($sT) -7 b(ab) n(leName,) 20 b($sColumn) n(Name,) f($aColumn) n -(Def\)) h(fun) n(ction) g(Cre-) -600 2571 y(ateT) -7 -b(able\($) n(sT) g(ableName,) 24 b($aT) -7 b(ableDef\)) 49 -b(Please) 25 b(use) g(these) g(functio) n(ns) g(where) g(app) n -(ropriate) f(in) h(place) f(of) h(standard) e(SQL) i(CREA) -9 -b(TE,) 25 b(DR) m(OP) -9 b(,) 25 b(and) f(AL) -8 b(TER) 25 -b(T) -8 b(ABLE) -600 2671 y(comma) n(nds.) 17 b(This) h(will) g(ensure) -e(that) i(you) n(r) g(upg) n(rade) f(script) g(w) o(orks) g(for) g(all) -h(suppo) n(rted) f(databases.) 35 b(Of) 17 b(these) h(fun) n(ctions,) f -(DropT) -7 b(ab) n(le,) 18 b(RenameT) -7 b(ab) n(le,) 18 -b(and) f(RenameCol-) -600 2771 y(umn) 25 b(are) g(pretty) g(straightfo) -n(rw) o(ard.) g(P) o(ass) i(these) f(the) f(table) h(names) f(you) g -(wish) h(to) g(Drop) n(/Rename,) f(and) h(schema_) n(proc) f(will) h -(handle) f(the) g(rest,) h(includin) n(g) g(inde) o(x) m(es) g(and) -600 -2870 y(sequenc) n(es,) k(where) e(applica) n(ble.) 58 -b(The) 29 b(remain) n(ing) g(fun) n(ctions) g(requ) n(ire) g(some) g(e) -o(xp) n(lanation:) 58 b(CreateT) -7 b(able:) 28 b($php) n(gw_setup) n -(->oProc) n(->CreateT) -7 b(able\() 28 b('cate) o(g) n(ories',) -600 -2970 y(array\() 21 b('fd') g(=>) i(array) n(\() g('cat_id) n(') g(=>) f -(array\() n(') o(typ) n(e') h(=>) f('auto') n(,) -6 b('nullable) n(') 23 -b(=>) f(f) o(alse\),) g('accoun) n(t_id') g(=>) g(array\() n(') o -(type') f(=>) h('int',) -6 b('p) n(recision') 22 b(=>) g(4,) -6 -b('nu) n(llable') 22 b(=>) h(f) o(alse,) -600 3070 y(') l(def) o(au) n -(lt') 18 b(=>) g(0\),) f('app_) n(name') g(=>) h(array) n(\(') o(typ) n -(e') g(=>) g(') l(v) n(ar) n(char',) -6 b(') n(precision') 17 -b(=>) h(25,) -8 b('nullable') 17 b(=>) h(f) o(alse\),) f('cat_na) n -(me') h(=>) g(array) n(\(') o(typ) n(e') g(=>) g(') l(v) n(ar) n -(char',) f('pre) n(cision') h(=>) -600 3169 y(150,) g('nullab) n(le') h -(=>) h(f) o(alse\),) f('cat_d) n(escription) n(') h(=>) f(array\() n(') -o(typ) n(e') h(=>) f(') o(te) o(x) n(t',) g('nullable') f(=>) h(f) o -(alse\)) g(\),) g('pk') f(=>) i(array) n(\('cat_id) n('\),) f('ix') g -(=>) g(array) n(\(\),) g('fk') f(=>) h(array\(\)) n(,) h('uc') -600 -3269 y(=>) i(array) n(\(\)) f(\)) h(\);) 44 b(Does) 21 -b(this) h(look) f(f) o(amiliar?) f(The) h(array) g(passed) g(to) h -(CreateT) -7 b(able) 21 b(is) h(in) g(the) f(form) n(at) h(used) f -(also) h(in) g(tables_b) n(aseline) g(and) f(tables_cu) n(rrent.) g -(Note) g(a) h(slight) -600 3368 y(dif) n(fer) n(ence) e(where) g(the) g -(table) g(name) g(is) h(being) e(passed) h(as) h(a) g(seperate) f(ar) o -(g) n(ument.) f(The) h(second) g(ar) o(g) n(ument) f(to) i(the) f -(functio) n(n) g(is) i(the) e(table) g(de\002nition) f(array) -5 -b(,) 19 b(starting) h(with) -600 3468 y('fd') n(.) 37 -b(Add) n(Column:) 17 b($php) n(gw_setup-) n(>oProc-) n(>AddColum) n -(n\('ph) n(pgw_c) n(ate) o(gories') n(,) -6 b('cat_access',ar) n -(ray\(') o(t) n(ype') 17 b(=>) h(') l(v) n(a) n(rchar',) f('pr) n -(ecision') g(=>) h(25\)\)) n(;) 37 b(Here) 17 b(we) h(pass) -600 -3568 y(the) h(table) g(name) g(of) g(an) g(e) o(xisting) f(table,) h -(the) h(ne) n(w) f(colum) n(n) g(name,) g(and) f(a) i(\002eld) f -(de\002nition.) f(This) i(de\002nitio) n(n) g(is) g(merely) e(a) i -(slice) g(of) f(the) g(table) g(arrays) g(fou) n(nd) g(earlier) g(in) g -(this) -600 3667 y(docu) n(ment.) 49 b(AlterColum) n(n:) 25 -b($ph) n(pgw_setu) n(p->oPro) n(c->AlterColum) n(n\('p) n(hpgw_) n -(sessions',) -6 b(') h(session_action') n(,array) n(\(') o(typ) n(e') 25 -b(=>) f(') l(v) n(ar) n(char',) f('precision) n(') i(=>) f('255) n -('\)\);) -600 3767 y(The) h(forma) n(t) i(of) e(this) h(func) n(tion) g -(matche) n(s) h(AddColu) n(mn.) e(It) h(is) g(also) g(a) g(simple) g -(case) g(of) f(passing) g(the) h(table) f(name,) g(\002eld) g(name,) g -(and) g(\002eld) h(de\002nition) n(.) 52 b(DropCo) n(lumn:) -600 -3867 y($ne) n(wtb) n(ldef) 19 b(=) h(array) n(\() g("fd") f(=>) g -(array\() f('acl_ap) n(pname') g(=>) i(array) n(\(') o(typ) n(e') g(=>) -f(') l(v) n(ar) n(char',) g('pr) n(ecision') g(=>) h(50\)) n(,) g -('acl_lo) n(cation') f(=>) g(array\() n(') o(type) n(') h(=>) f(') l(v) -n(arch) n(ar',) g('preci-) -600 3966 y(sion') e(=>) g(255) n(\),) g -('acl_acco) n(unt') f(=>) h(array\(') m(type') f(=>) h('int',) f -('precision) n(') h(=>) g(4\),) g('acl_r) n(ights') g(=>) g(array) n -(\(') o(typ) n(e') g(=>) g('int',) g('pr) n(ecision') g(=>) g(4\)) f -(\),) h('pk') f(=>) h(array\() n(\),) g('ix') g(=>) -600 -4066 y(array\() n(\),) 23 b('fk') f(=>) h(array) n(\(\),) f('uc') g(=>) -h(array\(\)) e(\);) i($phpg) n(w_setup-) n(>oProc->) n(DropColu) n -(mn\('p) n(hpgw_) n(acl',$ne) l(wtbldef,) -6 b('a) n(cl_accoun) n -(t_type') n(\);) 47 b(This) 22 b(is) i(the) f(most) g(com-) -600 -4165 y(plicated) 18 b(func) n(tion) h(in) f(schema_p) n(roc,) g(from) g -(the) g(user') -5 b(s) 19 b(perspe) n(cti) n(v) o(e.) f(Its) h(comple) o -(x) n(ity) g(is) g(necessitated) f(by) h(the) f(requir) n(ement) g(of) g -(some) h(databa) n(ses) h(to) f(recre) n(ate) g(a) g(table) g(in) -600 -4265 y(the) g(case) h(of) f(drop) n(ping) g(a) g(column) n(.) h(Note) f -(that) h(the) f(table) g(de\002nition) f(array) h(is) h(being) e(used) h -(yet) h(aga) n(in.) g(The) f(array) f(de\002ned) g(here) h(should) f -(match) h(the) g(table) h(de\002nitio) n(n) g(you) -600 -4365 y(w) o(ant) f(after) g(this) h(fun) n(ction) f(has) g(completed) n -(.) h(Here,) e(we) i(are) f(drop) n(ping) f(the) h(column) f('acl_acco) -n(unt_ty) n(pe') h(from) f(the) h(table) g('phpg) n(w_acl',) f(and) h -(the) g(table) g(de\002nition) f(does) -600 4464 y(not) f(ha) n(v) o(e) -g(this) h(colum) n(n) g(de\002ned) n(.) g(Y) -9 b(ou) 17 -b(cou) n(ld) h(cop) o(y) e(inform) n(ation) h(from) g(you) n(r) h -(tables_cu) n(rrent) f(\002le) h(here) f(and) g(edit) g(it) h(to) g -(match) f(the) g(desired) g(ne) n(w) g(table) g(spec,) g(less) i(the) e -(col-) -600 4564 y(umn) h(you) g(wish) h(to) g(dro) n(p.) 38 -b(There) 18 b(are) h(add) n(itional) g(func) n(tions) g(within) g -(schema_) n(proc,) f(the) g(majority) g(of) h(which) f(are) g(not) h -(to) g(be) f(called) h(directly) -7 b(.) 19 b(The) o(y) f(are) g(used) h -(intern) n(ally) -5 b(.) -600 4664 y(If) 26 b(you) g(do) g(wish) h(to) f -(in) m(v) o(estiga) n(te) h(furthe) n(r) m(,) f(use) h(class.schema_p) n -(roc.inc.) n(php) f(as) h(your) e(guide.) g(This) i(master) f(\002le) i -(includ) n(es) f(the) g(class.schema_) n(proc_) n(DBMS.inc.php) -600 -4763 y(and) i(class.schema_pr) n(oc_arr) n(ay) -5 b(.inc) n(.php) 29 -b(\002les.) i(The) f(DBMS) g(\002les) h(should) e(not) h(be) g(used) f -(as) i(a) g(guid) n(e,) f(since) g(their) g(functio) n(ns) h(are) f -(called) f(from) g(the) h(master) g(class,) -600 4863 -y(and) c(the) g(parameter) n(s) i(are) e(dif) n(fer) n(ent) h(from) e -(what) i(you) e(might) h(e) o(xpe) n(ct) h(relati) n(v) o(e) f(to) h -(the) f(master) -5 b(.) 54 b(PLEASE,) 26 b(DO) h(NO) m(T) f(WRITE) h(T) -o(O) f(OR) h(AL) -8 b(TER) 27 b(ANO) m(THER) g(AP-) -600 -4962 y(PLICA) -9 b(TION'S) 29 b(T) -8 b(ABLES) 29 b(OR) h(THE) g(API) f -(T) -8 b(ABLES) 30 b(IN) g(Y) n(OUR) f(APPLICA) -9 b(TION) 29 -b(UPGRADE) h(FUNCTIONS!) 59 b(def) o(ault_) n(record) n(s.inc.php) 28 -b(\(Option) n(al\)) 60 b(An) o(y) -600 5062 y(applicatio) n(n) 24 -b(with) g(tables) g(that) f(w) o(ants) h(to) g(load) f(some) g(def) o -(ault) g(data) g(will) i(need) e(this) h(\002le.) 48 -b(The) 23 b(def) o(au) n(lt_record) n(s) i(\002le) f(consists) g(of) f -(a) h(list) h(of) e(SQL) h(INSER) -5 b(Ts) 24 b(using) f(the) -600 -5162 y($oPro) n(c) e(object) f(directly) n(:) h($oProc-) n(>query) n -(\("INSER) -5 b(T) 20 b(INT) o(O) g(php) n(gw_in) m(v) n(_statuslist) h -(\(status_nam) n(e\)) g(V) -11 b(ALUES) 20 b(\('a) n(v) n(ailab) n -(le'\)"\);) g($oPro) n(c->qu) n(ery\("INSE) n(R) -5 b(T) 21 -b(INT) o(O) -600 5261 y(phpg) n(w_in) m(v) n(_statuslist) e -(\(status_nam) n(e\)) f(V) -11 b(ALUES) 18 b(\('no) f(longer) g(a) n(v) -n(ailable'\)) n("\);) i($oPr) n(oc->qu) n(ery\("IN) n(SER) -5 -b(T) 19 b(INT) o(O) f(php) n(gw_in) m(v) n(_statuslist) h(\(status_n) n -(ame\)) f(V) -11 b(ALUES) -600 5361 y(\('back) 19 b(order') n(\)"\);) 42 -b(In) 21 b(this) g(case,) g(the) g(de) n(v) o(e) n(loper) f(w) o(anted) -h(to) g(insert) f(some) h(status) g(inform) n(ation,) g(which) f(w) o -(as) h(then) g(used) f(in) h(a) h(select) f(box) f(on) g(an) h(html) g -(for) n(m.) g(Using) g(the) -600 5461 y(def) o(ault_) n(record) n(s) c -(\002le,) g(e) n(v) o(ery) e(ne) n(w) h(install) h(will) g(ha) n(v) o -(e) e(this) i(data) f(included) n(.) h(This) f(\002le) h(should) e -(consist) i(of) f(que) n(ries) h(applicab) n(le) g(to) f(the) h(tables) -f(de\002ned) f(in) i(setup.in) n(c.php) e(and) -600 5560 -y(tables_cur) n(rent.inc.) n(php.) 34 b(test_data.inc.) n(php) 17 -b(\(Optio) n(nal\)) 35 b(An) o(y) 17 b(de) n(v) m(eloper) f(w) o -(anting) h(to) g(test) h(the) g(full) f(list) h(of) f(upgr) n(ade) g -(routines) g(can) g(use) g(this) h(\002le.) 35 b(test_data.inc.p) n(hp) -17 b(is) -600 5660 y(similar) f(to) g(def) o(ault_r) n(ecords) g(abo) o -(v) m(e.) g(It) g(is) h(called) f(only) f(by) h(schemato) o(y) -7 -b(.php) 15 b(and) g(is) i(ne) n(v) o(er) e(installed) h(with) g(a) h -(ne) n(w) e(install) i(or) f(upg) n(rade.) g(This) g(is) h(a) f(de) n -(v) o(elo) n(per) n(-on) n(ly) h(\002le.) f(The) -600 -5759 y(INSER) -5 b(Ts) 19 b(here) e(should) h(be) g(applicab) n(le) h -(to) f(the) h(tables_b) n(aseline) g(table) f(de\002nition) n(s.) 38 -b(langu) n(age) 19 b(\002les) g(\(Requir) n(ed\)) 37 -b(All) 19 b(applicatio) n(ns) g(should) e(ha) n(v) o(e) h(at) h(least) g -(a) f(\002le) h(of) f(En-) -600 5859 y(glish) g(translations,) g(used) g -(for) f(their) h(application) f(lang\(\)) g(calls.) 38 -b(F) o(orm) n(at) 19 b(of) f(a) h(lang) e(\002le:) i({phrase}{T) -10 -b(AB}{appname) n(}{T) i(AB}{LANG_CODE}{T) g(AB}{tra) n(nslation}) -600 -5959 y(e.g:) 23 b(\002rst) h(name) e(common) g(en) h(First) h(Name) f -(\002rst) h(name) e(commo) n(n) i(de) f(V) -11 b(ornam) n(e) 48 -b(Filenames:) 23 b(php) n(gw_{LANG_) n(CODE}.lang) f(e.g.) h(English:) f -(phpgw) n(_en.lang) g(Ger) n(-) -600 6058 y(man:) 17 -b(phpgw) n(_de.lang) 35 b(Please) 18 b(see) h(the) f(conten) n(ts) h -(of) e(the) h(API) h(') o(lang) n(uages') e(table) h(for) f(the) h -(correct) f(setting) h(of) g(the) f(LANG_CODE.) 36 b(De) n(v) o(elop) n -(er) 18 b(T) -7 b(ools) 36 b(sqltoarray) -7 b(.php) -600 -6158 y(Displays) 22 b(the) h(curr) n(ent) f(schema_p) n(roc) g(array) g -(de\002nin) n(g) g(an) h(app) n(lication') -5 b(s) 23 -b(tables.) 45 b(This) 22 b(web) g(applicatio) n(n) h(reads) f(the) g -(curre) n(nt) h(table) f(status) h(li) n(v) o(e) f(from) f(the) h -(database.) g(It) -600 6258 y(then) h(parses) h(this) g(inform) n -(ation) g(into) f(a) h(hopef) n(ully) g(corre) n(ct) h(table) e -(de\002nition) g(array) g(for) g(schema_) n(proc.) g(Upon) g(visiting) g -(this) i(app) n(,) g(you) d(are) i(sho) n(wn) f(a) h(list) h(of) f -(curr) n(ently) -600 6357 y(installed) d(application) n(s) i(with) e -(de\002ned) g(tables.) g(Y) -9 b(ou) 21 b(may) g(then) g(select) i(one) -e(app) f(or) i(all) g(apps,) f(and) g(then) g(submit) g(the) g(form.) g -(From) g(this) h(form) e(you) h(may) g(then) g(do) n(wn) n(load) -600 -6457 y(a) g(tables_cu) n(rrent) f(\002le,) g(suitable) g(for) g(comm) n -(ission) h(to) f(cvs.) g(Please) h(do) f(check) f(the) h(format) f(to) i -(mak) o(e) e(sure) h(the) h(de\002nitio) n(ns) g(are) f(correc) n(t.) 42 -b(schemato) m(y) -5 b(.ph) n(p) 41 b(Runs) 21 b(the) f(full) p -Black Black 90 rotate dyy eop +2 1 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(application) n(s.) i +(Y) -8 b(es,) 20 b(this) h(is) g(e) o(xtra) f(w) o(ork) f(for) h(the) g +(de) n(v) o(e) n(loper) -5 b(.) 20 b(But) h(it) g(is) g(hop) n(ed) f +(that) h(setup3) e(is) i(also) g(vie) n(wed) e(as) i(a) g(tool) 396 +687 y(that) g(can) f(truly) f(enhan) n(ce) i(the) f(de) n(v) o(e) n +(lopment) f(process.) 396 836 y(OK.) i(Let') -5 b(s) 20 +b(di) n(v) o(e) g(right) f(in...) p Fh -2 1338 a(2.) 39 +b(Applica) n(tion) g(setup) g(\002les) p Fg 396 1518 +a(The) 20 b(\002les) h(in) g(this) f(section) g(are) g(contained) f +(within) h(each) g(applicatio) n(n/setup) g(directo) n(ry) -5 +b(.) 20 b(Ev) o(e) n(ry) g(app) g(will) h(some) f(of) 396 +1626 y(these) h(\002les) g(in) f(order) f(to) h(operate) f(with) i +(setup3.) p Ff -2 1954 a(2.1.) 34 b(setup.i) r(nc.php) g(\(Required\)) p +Fd 396 2241 a(2.1.1.) 28 b(Basic) h(inf) n(ormation) p +Fg 396 2399 a(The) 20 b(v) n(alues) g(in) g(this) h(section) f(must) g +(be) g(used) g(by) g(all) h(applicatio) n(ns.) 396 2548 +y(The) f(\002rst) h(section) e(of) h(setup.inc.) n(php) f(de\002nes) h +(the) g(v) o(ery) f(basic) h(and) g(yet) g(critical) g(infor) n(mation) +f(about) g(the) h(application) n(.) 396 2656 y(T) -7 +b(ak) o(e) 21 b(a) f(look) f(at) i(the) f(follo) n(wing) f(section:) p +Fc 396 2836 a($setup_info) n(['addressboo) n(k']['name']) 43 +b(=) i('addressbo) n(ok';) 396 2933 y($setup_info) n(['addressboo) n +(k']['title']) e(=) i('Addressb) n(ook';) 396 3030 y($setup_info) n +(['addressboo) n(k']['version) n(']) g(=) g('0.9.13) n(.002';) 396 +3128 y($setup_info) n(['addressboo) n(k']['app_ord) n(er']) g(=) f(4;) +396 3225 y($setup_info) n(['addressboo) n(k']['enable') n(]) h(=) g(1;) +p Fg 396 3513 a('name') 19 b(is) i(used) f(throu) n(ghout) f(phpg) n +(roupw) m(are,) i(typica) n(lly) g(in) f($php) n(gw_inf) n(o) h +(\003ags) f(such) g(as) h('curr) n(entapp') e(or) h(as) h(the) 396 +3621 y('app_) n(name') f(almost) g(e) n(v) o(er) n(ywhere) f(else.) 396 +3770 y(') o(title') h(w) o(ould) f(be) i(used) f(in) g(the) g(na) n +(vbar) -5 b(,) 21 b(adm) n(in,) g(pref) n(erences,) f(as) h(well) f(as) +h(in) g(the) f(applicatio) n(n) g(itself.) 396 3920 y(The) g(') l(v) o +(er) n(sion') g(string) g(de\002nes) g(the) g(v) o(ersion) f(of) h(the) +g(application) f(and) h(table) g(code) n(.) h(This) f(w) o(ould) g(be) g +(increme) n(nted) 396 4028 y(whene) n(v) m(er) g(you) g(create) g(a) g +(ne) n(w) g(upgr) n(ade) g(function) n(,) h(and) e(typically) h(only) f +(for) h(table) g(mod) n(i\002cations.) g(If) g(the) g(change) f(is) 396 +4135 y(signi\002cant) h(from) f(the) h(last) h(code) f(upd) n(ate,) g +(you) g(could) f(increm) n(ent) i(this) f(here) g(also.) g(Increm) n +(enting) g(this) g(v) o(ersion) f(string) 396 4243 y(is) i(not) f(tri) n +(vial,) g(so) h(please) f(do) g(read) f(the) h(rest) h(of) f(this) h +(docu) n(ment) f(for) f(more) h(infor) n(mation) g(abo) n(ut) h(that.) +396 4393 y('app_) n(order) n(') g(determ) n(ines) g(the) f(order) f(of) +h(applicatio) n(ns) h(in) f(the) h(na) n(vb) n(ar) -5 +b(.) 21 b(If) f(the) g(numb) n(er) g(you) g(set) h(here) e(is) i(the) g +(same) f(as) 396 4501 y(is) h(set) g(for) f(anoth) n(er) h(app,) e(the) +h(app) g(whose) g('nam) n(e') h(is) g(\002rst) g(in) f(the) g(English) g +(alphab) n(et) h(w) o(ould) e(appear) g(\002rst.) i(Smaller) 396 +4609 y(numb) n(ers) g(sho) n(w) f(closer) g(to) g(the) g(top) g(or) g +(left) h(end) e(of) h(the) g(na) n(vbar) m(,) f(depen) n(ding) g(upon) g +(the) h(layout.) 396 4758 y(The) g('enable) n(') h(string) f(is) h +(used) f(by) g(the) g(php) n(grou) n(pw) o(are) g(API) h(to) f +(determin) n(e) h(whether) e(an) h(application) f(is) i(disabled,) 396 +4866 y(enabled) n(,) g(or) f(enabled) f(b) n(ut) h(hidden) f(from) g +(the) h(na) n(vbar) -7 b(.) 21 b(Most) g(applicatio) n(ns) g(will) g(w) +o(ant) f(this) h(set) g(to) f(a) h(v) n(alue) e(of) h(1) p +Black Fe 3842 5278 a(2) p Black 90 rotate dyy eop %%Page: 3 3 -3 2 bop Black Black Fa -600 -417 a(c) o(ycle) 24 b(of) g(upgra) n(des,) -h(includin) n(g) g(option) n(al) g(test_data.) 49 b(This) 25 -b(app) f(is) i(not) e(beautifu) n(l,) h(may) f(bomb) g(on) g(you) n(,) h -(and) f(will) i(de\002nitely) d(drop) h(you) n(r) h(applicatio) n(n') -5 -b(s) 26 b(tables.) e(The) -600 -318 y(display) f(is) i(similar) f(to) g -(the) g(user/admin) f(tool,) g(application) n(s.php.) g(Y) -9 -b(ou) 23 b(are) h(sho) n(wn) f(a) i(list) g(of) e(apps) h(with) g -(tables.) g(Select) h(one) e(app,) g(and) g(enter) h(a) g(tar) o(get) f -(v) o(ersion.) g(Upon) -600 -218 y(submission) h(of) g(the) h(for) n -(m:) 50 b(All) 25 b(application) e(tables) i(are) g(dro) n(pped.) 49 -b(tables_b) n(aseline.inc.p) n(hp) 24 b(is) i(loaded) n(.) 50 -b(test_data.inc) n(.php) 24 b(is) h(loaded) 49 b(tables_u) n -(pdate.inc.) n(php) 24 b(is) -600 -118 y(loaded) n(.) 51 -b(a) 25 b(full) g(application) f(upg) n(rade) g(test) i(be) o(gin) n -(s.) 51 b(This) 26 b(will) f(gi) n(v) o(e) f(a) i(LO) m(T) e(of) h(deb) -n(u) n(gging) f(outpu) n(t.) h(Dependin) n(g) g(on) g(you) n(r) g -(database,) f(the) h(process) g(may) f(tak) o(e) h(quite) -600 --19 y(a) o(while.) 18 b(This) g(tool) g(should) f(be) h(consider) n(ed) -h(as) f(a) h(destructi) n(v) m(e) g(test) g(of) f(the) g(full) g(upg) n -(rade) g(c) o(ycle.) g(If) g(the) g(upg) n(rade) g(proc) n(ess) i(is) f -(successful,) e(you) h(can) g(then) f(check) h(the) g(loaded) -600 -81 y(test_data) j(to) g(see) h(that) f(it) h(is) g(still) g(in) f -(place) g(as) h(e) o(xp) n(ected) f(after) g(all) h(the) f(table) g -(mod) n(i\002cations,) g(etc.) h(If) e(not,) h(it) h(should) e(be) h -(clear) g(where) f(the) h(error) f(has) i(occu) n(rred.) f(Loo) n(k) g -(for) -600 180 y(the) j(usual) f(INV) -11 b(ALID) 23 -b(SQL) i(w) o(arnin) n(gs,) f(among) f(other) n(s.) 49 -b(tools) 24 b(subdir) n(ectory) 48 b(some) 23 b(utilities) i(for) e -(sql) h(\002le) h(con) m(v) m(ersion,) e(etc.) 48 b(In) 24 -b(the) f(tools) h(director) n(y) g(under) f(setup3) n(,) -600 -280 y(there) 18 b(should) g(be) g(at) h(least) h(a) f(coup) n(le) g(of) -f(hopef) n(ully) h(hand) n(y) g(perl) f(or) g(shell) h(scripts.) g -(These) f(are) h(for) f(runn) n(ing) g(on) h(the) f(comman) n(dline) g -(only) -5 b(,) 17 b(and) h(might) g(apply) g(to) h(con) m(v) m(erting) --600 380 y(SQL) g(\002les) h(into) e(lang) g(\002les,) i(etc.) e(The) o -(y) g(are) h(not) f(e) o(xpec) n(ted) h(to) g(be) g(perf) n(ect,) g(b) n -(ut) g(migh) n(t) h(of) n(f) n(er) f(some) g(assistance) g(or) f(ideas) -h(for) f(addition) n(al) h(utilities.) h(Use) f(these) g(at) g(you) n -(r) g(o) n(wn) -600 479 y(risk) 24 b(or) g(ben) n(e\002t.) 49 -b(The) 24 b(install/upg) n(rade) g(pro) n(cess) 49 b(Ov) o(ervie) n(w) e -(Setup) 24 b(internal) f(upgr) n(ade) h(func) n(tions) 49 -b(Setup) 23 b(uses) i(a) f(commo) n(n) g(set) h(of) e(functio) n(ns) i -(for) e(ne) n(w) h(installs) g(and) -600 579 y(upgr) n(ades.) 19 -b(These) f(are) h(implemen) n(ted) g(as) g(multi-pass) g(loop) n(s.) h -(F) o(or) e(a) h(single) g(application) e(install) j(or) e(upgr) n -(ade,) h(a) g(single) g(pass) g(is) h(don) n(e.) f(F) o(or) g(multip) n -(le) h(applica) n(tion) f(installs) -600 679 y(or) k(upg) n(rades,) f -(multiple) h(passes) g(are) g(don) n(e) h(auto) n(matically) -5 -b(.) 22 b(The) h(ord) n(er) g(of) g(install) g(in) g(a) g(mass) h -(install) f(or) g(upg) n(rade) f(is) i(determin) n(ed) f(by) f -(application) g(depen) n(dencies.) g(The) -600 778 y(other) f(determin) -n(ing) h(f) o(actor) g(is) h(the) f(ord) n(er) h(in) f(which) f(the) h -(application) f(director) n(ies) i(and) f(setup.in) n(c.php) f(\002les) -i(are) f(read) g(fro) n(m) h(the) f(\002lesystem.) 45 -b(Ne) n(w) 22 b(installs) 45 b(Detection) -600 878 y(Each) 19 -b(run) g(of) g(inde) o(x) n(.php) g(or) g(application) n(s.php) g(in) g -(setup3) g(\002rst) i(run) n(s) g(a) f(set) g(of) f(detection) g -(routin) n(es.) h(These) g(read) f(the) g(data) h(fro) n(m) g(each) f -(setup.inc.p) n(hp) g(\002le,) h(and) f(from) g(the) -600 -977 y('applica) n(tions') h(or) f('phpg) n(w_applica) n(tions') h -(table) g(as) g(appro) n(priate,) g(and) f(only) g(if) h(one) f(of) h -(these) g(tables) g(e) o(xists.) g(This) g(data) g(is) g(parsed) g -(into) f(the) h($setup_) n(info) f(array) -5 b(.) 19 -b(In) g(this) -600 1077 y(case,) j(this) h(array) e(contains) h(infor) n -(mation) g(abou) n(t) h(all) g(applica) n(tions.) f(Based) h(on) f(the) -g(infor) n(mation) g(gath) n(ered,) g(a) g(status) h(\003ag) g(is) g -(set) g(to) f(one) g(of) g(the) g(follo) n(w) n(ing) g(v) n(alues:) 45 -b(U) 23 b(-) -600 1177 y(Upgra) n(de) h(requir) n(ed/a) n(v) n(ailable) -47 b(R) 25 b(-) e(upgr) n(ade) h(in) g(pRogr) n(ess) 49 -b(C) 24 b(-) g(upgr) n(ade) g(Completed) e(successfully) 48 -b(D) 24 b(-) f(Depende) n(nc) o(y) g(f) o(ailure) 47 -b(F) 25 b(-) f(upg) n(rade) f(F) o(ailed) 48 b(V) 24 -b(-) g(V) -9 b(ersion) -600 1276 y(mismatch) 27 b(at) h(end) f(of) g -(upg) n(rade) 55 b(M) 28 b(-) f(Missing) h(\002les) g(at) g(start) g -(of) f(upg) n(rade) g(\(Not) g(used,) g(prop) n(osed) h(only) n(\)) 56 -b(Using) 27 b(this) h(infor) n(mation,) f(the) g(setup) g(logic) g(in) h -(inde) o(x) n(.php) -600 1376 y(determin) n(es) h(what) e(mode) g(we) h -(are) g(in.) f(inde) o(x.) n(php) g(is) i(not) e(capable) g(of) g -(being) g(selecti) n(v) o(e) h(abou) n(t) g(which) g(app) n(lication) g -(it) g(foun) n(d) g(as) h(being) d(out) i(of) f(sync.) g(It) h(is) h -(designed) -600 1476 y(only) 23 b(for) g('Simple) g(Application) g -(Manag) n(ement',) g(which) g(is) i(Step) f(1) g(of) f(the) h(setup) f -(process.) h(F) o(or) f(more) g(selecti) n(v) o(e) g(application) g -(manip) n(ulation,) g(use) h(applicatio) n(ns.php) n(.) -600 -1575 y(inde) o(x) n(.php) f(then) g(tells) i(the) f(user) g(that) g -(1\)) f(their) h(applica) n(tions) g(are) g(curren) n(t) h(2\)) e(some) -h(of) f(their) h(applicatio) n(ns) g(are) g(out) g(of) f(sync) h(3\)) f -(no) h(db) f(e) o(xists,) h(etc.) g(F) o(or) g(a) g(ne) n(w) g -(install,) -600 1675 y(all) f(applicatio) n(ns) g(will) g(be) f(out) g -(of) g(sync,) f(since) i(there) e(is) j(not) d(e) n(v) o(en) h(an) g -('ph) n(pgw_ap) n(plications') g(table) g(in) g(the) g(database) g(to) g -(tell) h(setup) f(what) g(the) h(status) f(is) i(for) d(an) o(y) h(app) -n(li-) -600 1774 y(cation.) 47 b(Selection) g(There) 23 -b(is) i(no) e(selection) g(for) g(application) f(installs) j(in) f('ne) -n(w) f(install') g(mode.) g(All) h(phy) n(sically) g(present) f -(applicatio) n(ns) h(will) h(be) e(installed,) h(or) f(at) h(least) -600 -1874 y(attempted) n(.) 43 b(Installation) f(Once) 20 -b(the) h(setup) g(user) g(clicks) g(the) g(magic) g(b) n(utton) f(to) h -(install) g(all) h(applicatio) n(ns,) f(the) g(follo) n(win) n(g) h -(occu) n(rs:) 43 b(The) 21 b(setup_in) n(fo) g(array) f(is) i(passed) f -(to) -600 1974 y(the) e(proce) n(ss_pass\(\)) g(functio) n(n,) g(using) -g(a) g(method) n(='ne) n(w') 38 b(Applica) n(tions) 19 -b(whose) g(status) h(\003ag='U') e(\(API) h(on) f(\002rst) i(pass\)) f -(are) g(then) g(hand) n(ed) g(of) n(f) f(to) h(the) g(process_cu) n -(rrent\(\)) -600 2073 y(functio) n(n.) 28 b(This) g(handle) n(s) h -(inclusion) e(and) h(installation) f(of) h(the) g(applicatio) n(n') -5 -b(s) 29 b(tables_cu) n(rrent.in) n(c.php) e(\002le.) 57 -b(The) 28 b(app) n(lication) g(is) h(re) o(gistere) n(d) f(as) h(a) g -(ne) n(w) e(application) -600 2173 y(in) f(the) g('php) n(gw_app) n -(lications') g(table.) f(If) h(for) g(some) f(reason) h(there) f(is) i -(old) f(data) g(in) g(this) g(table) g(for) g(this) g(application) n(,) -g(it) h(will) g(be) f(upd) n(ated) g(instead.) g(Its) g(hook) n(s,) h -(if) f(an) o(y) -5 b(,) -600 2273 y(are) 27 b(re) o(gistered) f(in) h -(the) g('php) n(gw_ho) n(oks') g(table.) 55 b(Ne) o(xt,) 26 -b(this) i(array) e(is) i(passed) f(to) g(the) h(pro) n(cess_def) o -(ault_) n(record) n(s\(\)) g(fun) n(ction.) f(If) g(this) g(\002le) h -(is) g(present) f(in) g(the) g(curren) n(t) -600 2372 -y(applicatio) n(n') -5 b(s) 23 b(setup) g(direc) n(tory) -5 -b(,) 22 b(the) g(querie) n(s) i(here) e(are) g(run) g(to) g(install) h -(the) f(data) h(to) f(the) h(applica) n(tion') -5 b(s) 23 -b(table\(s\).) 45 b(The) 22 b(abo) o(v) m(e) g(is) i(repeated) d(until) -h(all) h(application) e(status) -600 2472 y(\003ags) k(equal) f('C'.) g -(Ho) n(we) n(v) o(er) -5 b(,) 25 b(if) f(an) h(applicatio) n(n) g -(install) g(f) o(ailed) f(for) g(some) g(reason,) g(it) h(will) g(then) -f(be) h(skipped) e(on) h(the) h(ne) o(x) n(t) h(pass.) e(This) h(k) o -(eeps) f(the) h(loop) f(fro) n(m) h(runn) n(ing) -600 -2571 y(a) o(w) o(ay) -5 b(.) 54 b(Upgr) n(ades) h(Detection) f(Only) 27 -b(an) g(API) g(v) o(ersion) f(mismatch) g(will) i(trigger) e(an) h -(automated) f(requ) n(est) i(for) f(the) g(user) g(to) g(upg) n(rade) g -(their) g(install.) g(Once) g(the) g(api) g(is) -600 -2671 y(curren) n(t,) e(the) o(y) g(can) f(mo) o(v) o(e) g(on) g(to) h -(application) n(s.php) f(for) h(mor) n(e) h('Adv) l(anced) e -(Application) g(Manag) n(ement',) g(which) g(is) i(Step) f(4) g(of) g -(the) g(setup) g(pro) n(cess.) h(Ho) n(we) n(v) m(er) m(,) f(if) g(the) --600 2771 y(API) 19 b(is) h(out) e(of) h(sync,) f(clicking) g('Upgr) n -(ade') h(in) g(inde) m(x.php) e(will) j(also) f(attempt) g(to) g(upg) n -(rade) f(other) g(application) n(s) i(which) e(may) h(be) f(out) h(of) f -(sync,) h(as) g(well.) g(As) h(the) f(php) n(gw) o(api) -600 -2870 y(continu) n(es) 26 b(to) f(stabilize,) g(it) h(is) g(felt) f -(that) g(this) h(method) e(of) g(upgrad) n(ing) h(will) h(beco) n(me) f -(less) i(and) d(less) i(commo) n(n.) 51 b(Selection) f(W) m(ithin) 25 -b(applicatio) n(ns.php,) f(a) h(color) n(-co) n(ded) -600 -2970 y(matrix) 18 b(of) g(applicatio) n(n) h(status) g(and) e(actions) i -(is) g(displayed) n(.) g(Depen) n(ding) f(on) g(the) g(status) h -(\003ag) g(of) f(each) g(applicatio) n(n,) g(certain) g(actions) g -(will) h(be) g(either) f(enab) n(led) h(or) f(disabled) n(.) -600 -3070 y(These) 25 b(actions) g(include) f('install',) h('upg) n(rade',) f -(') l(remo) o(v) m(e'.) h(If) g(somethin) n(g) h(is) g(v) o(ery) e -(wron) n(g) i(with) f(pre) n(vio) n(us) h(attempts) f(to) h(install) f -(or) g(upgr) n(ade) h(an) f(applicatio) n(n,) g(another) -600 -3169 y(column) 17 b(called) h(') l(resolution) n(') h(will) g(then) f -(display) g(a) h(link.) f(This) h(link) f(will) h(display) f(addition) n -(al) h(inform) n(ation) f(which) g(w) o(ould) g(be) h(helpf) n(ul) g -(for) f(determ) n(ining) g(ho) n(w) g(to) h(resolv) o(e) -600 -3269 y(the) i(prob) n(lem.) g(Assuming) g(all) g(is) h(well,) g(the) f -(user) g(can) f(select) i(application) n(s) g(requ) n(iring) f(upg) n -(rade) g(from) f(this) i(list.) f(Once) g(selected,) g(the) o(y) f -(submit) h(the) g(form.) f(This) h(runs) g(the) -600 -3368 y(follo) n(w) g(three) g(routines) g(in) h(order) n(:) 45 -b(remo) o(v) m(e) f(install) h(upg) n(rade) f(Upgrad) n(e) h(The) 21 -b(idea) h(here) f(is) i(that) e(multiple) h(actions) f(can) h(be) f -(selected) h(and) f(run) g(in) h(order) f(in) h(one) f(click.) -600 -3468 y(In) i(an) o(y) g(case,) h(onc) n(e) g(the) o(y) f(select) h(an) g -(applica) n(tion) g(for) f(upg) n(rade,) g(the) g(follo) n(wing) f -(occur) n(s:) 49 b(A) 24 b(stripped) e(do) n(wn) h(v) o(ersion) f(of) h -(the) h(setup_in) n(fo) f(array) g(is) h(passed) g(to) f(the) h(pro-) --600 3568 y(cess_upg) n(rade\(\)) e(functio) n(n.) h(This) g(array) f -(contains) g(only) h(the) g(info) n(rmation) f(for) g(the) h(selected) g -(application) 45 b(W) m(ithin) 23 b(proce) n(ss_upgrad) n(e\(\),) g -(the) f(tables_baseline.in) n(c.php) -600 3667 y(\002le) k(for) e(the) i -(applica) n(tion) f(is) i(load) n(ed.) 51 b(The) 25 b(tables_up) n -(date.inc.p) n(hp) g(\002le) h(for) e(the) i(app) n(lication) f(is) h -(loaded) 50 b(The) 25 b(conten) n(ts) i(of) e(the) g(test) h(array) e -(is) i(used) f(to) h(loop) e(throu) n(gh) -600 3767 y(the) e(entire) g -(list) i(of) e(upg) n(rade) g(fun) n(ctions) h(for) e(the) i(applica) n -(tion.) f(The) g(application) n(') -5 b(s) 23 b(uniqu) n(e) g(functio) n -(n) g(name) n(s) h(are) e(reb) n(uilt,) g(then) f(run.) 44 -b(When) 23 b(the) f(curre) n(ntv) o(er) g(\(installed\)) -600 -3867 y(matches) h(the) h(v) o(ersion) f(\(a) n(v) n(ailab) n(le\),) h -(proc) n(ess_upgra) n(de\(\)) f(e) o(xits,) h(setting) g(the) f(status) -i(\003ag) f(for) f(the) g(app) h(to) g('C'.) 48 b(Just) 24 -b(prior) f(to) h(e) o(xitin) n(g,) g(the) g(applicatio) n(n) g(and) f -(its) i(hoo) n(ks) -600 3966 y(are) c(upd) n(ated) g(into) g(the) g -('ph) n(pgw_ap) n(plications') f(and) h('ph) n(pgw_h) n(ooks') f -(tables.) 43 b(Uninstallation) n(/Remo) o(v) n(a) n(l) g(Selection) f -(Selecti) n(v) o(e) 21 b(remo) o(v) l(al) g(of) g(an) g(app) n -(lication) g(is) h(don) n(e) -600 4066 y(via) h(application) n(s.php,) g -(in) g(a) h(mann) n(er) g(similar) f(to) h(the) f(method) f(abo) o(v) m -(e) i(for) f(upg) n(rades.) 47 b(Uninstallation) f(Once) 24 -b(an) f(applicatio) n(n) h(is) g(selected) f(for) g(remo) o(v) l(al:) 48 -b(A) 24 b(stripped) -600 4165 y(do) n(wn) e(v) o(ersio) n(n) h(of) g -(the) g(setup_) n(info) g(array) e(is) j(passed) f(to) g(the) g(pro) n -(cess_drop) n(tables\(\)) g(fun) n(ction.) g(This) g(fun) n(ction) g -(remo) m(v) o(es) g(all) g(of) g(the) g(app) n(lication') -5 -b(s) 23 b(de\002ned) f(tables,) h(b) n(ut) -600 4265 -y(only) 18 b(after) g(\002rst) i(check) n(ing) f(to) g(see) g(if) g -(the) g(tables) g(are) g(there) n(.) h(In) e(this) h(w) o(ay) -5 -b(,) 18 b(we) i(attempt) e(to) h(cut) g(do) n(w) n(n) g(on) g(the) f -(numb) n(er) h(of) g(erro) n(rs) h(sent) f(to) g(the) f(bro) n(wser) -5 -b(.) 38 b(The) 18 b(applicatio) n(n') -5 b(s) -600 4365 -y(hook) n(s) 24 b(are) f(dere) o(gistere) n(d) h(\(remo) m(v) o(ed) e -(from) h('ph) n(pgw_h) n(ooks'\)) n(.) 48 b(The) 23 b(applica) n(tion) h -(itself) f(is) i(dere) o(g) n(istered) e(\(remo) m(v) o(ed) g(fro) n(m) -h('ph) n(pgw_ap) n(plications'\)) n(.) 48 b(Ca) n(v) o(eats) g(Must) --600 4464 y(see) 20 b(info) 40 b(Auto) 19 b(\002elds) 41 -b(F) o(or) 20 b(auto) f(type) g(\002elds,) h(schema_p) n(roc) g -(creates) g(a) g(sequenc) n(e) h(autom) n(atically) f(based) f(on) h -(the) g(table) g(nam) n(e) h(for) e(databases) g(that) h(require) f -(sequen) n(ces.) -600 4564 y(In) i(the) g(case) h(of) f(postgresql,) f -(the) i(limit) g(for) e(this) i(name) f(based) g(on) g(our) f(tests) j -(is) f(31) f(character) n(s.) h(The) f(schema_p) n(roc) g(forma) n(t) i -(is:) f($sSequen) n(ceSQL) g(=) f(sprintf\("CREA) -9 -b(TE) -600 4664 y(SEQ) o(UENCE) 22 b(seq_\045s",) g($sT) -7 -b(ableName\)) n(;) 46 b(This) 22 b(limits) h(the) f(maximu) n(m) g -(length) f(for) h(a) g(tablename) f(to) h(27) g(character) n(s.) h -(Based) g(on) e(the) h(tablename) f(standard) g(in) h(phpg) n(w) -600 -4763 y(of) e('ph) n(pgw_tab) n(lename',) f(you) g(are) h(furth) n(er) g -(limited) g(to) g(21) g(char) n(acters) g(in) h(which) e(to) h -(describe) f(your) g(table.) g(Y) -9 b(ou) 20 b(will) g(need) g(to) g -(be) g(less) h(descrip) n(ti) n(v) o(e) f(in) g(some) g(cases,) g(e.g.) --600 4863 y(use) 25 b('php) n(gw_widg) n(et_cats') g(instead) f(of) h -('ph) n(pgw_wid) n(get_inf) n(o_cate) o(g) n(ories'.) 50 -b(Def) o(ault) 24 b(0) 50 b(F) o(or) 25 b(int) g(\002elds,) g(a) g(def) -o(au) n(lt) h(of) e(0) h(is) h(not) e(assumed.) g(Only) h(some) f -(databases) -600 4962 y(will) e(set) g(this) f(def) o(ault) g(for) f -(you,) g(MySQL) h(being) f(one.) g(Y) -9 b(ou) 21 b(will) h(need) e(to) -h(e) o(xplicitly) f(de\002ne) h(this) h(def) o(au) n(lt) g(in) f(the) g -(table) g(de\002nition.) f(Also,) h(for) g(auto) g(\002elds,) g(do) g -(not) f(enter) -600 5062 y(a) h(def) o(au) n(lt,) g(since) f(the) g -(resulting) g(SQL) g(query) f(w) o(ould) h(f) o(ail) g(on) g(man) o(y) f -(RDBMS.) p Black Black 90 rotate dyy eop +3 2 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(\(enabled) n(\).) h +(The) g(notify) n(windo) n(w) g(app) f(sets) j(this) e(to) h(2,) f +(which) f(k) o(eeps) h(it) h(of) n(f) f(the) g(na) n(vba) n(r) -5 +b(.) 21 b(An) f(enable) g(of) g(0) g(w) o(ould) 396 687 +y(disable) g(the) g(app) g(by) g(def) o(au) n(lt.) h(There) e(is) j +(one) d(other) h(special) g(case,) g(3,) g(which) g(is) h(used) f +(primar) n(ily) h(by) f(the) g(API) g(itself.) 396 795 +y(From) g(the) g(perspecti) n(v) m(e) h(of) f(setup3) n(,) h(the) f +(API) h(is) g(an) f(applicatio) n(n) h(just) f(lik) o(e) h(an) o(y) e +(other) g(application) n(.) i(By) g(setting) f(the) 396 +903 y('enable') f(\003ag) h(to) h(3,) f(the) g(API) g(is) h(still) h +(enabled) n(,) f(b) n(ut) f(will) h(not) f(be) g(assignable) f(to) i(a) +f(user) g(as) h(a) g(real) f(applicatio) n(n.) h(It) f(will) 396 +1011 y(thereby) f(be) h(hidden) f(from) g(the) h(admin) g(for) f +(application) g(and) g(user/gro) n(up) h(editing.) p +Fd 396 1348 a(2.1.2.) 28 b(T) -8 b(ab) o(le) 28 b(inf) n(o) p +Fb 396 1601 a(2.1.2.1.) c(Onl) o(y) f(applications) f(with) g(database) +h(tab) o(les) g(will) g(use) h(entries) f(in) g(this) f(section.) p +Fg 396 1750 a(The) e(ne) o(xt) g(section) g(of) f($setup_in) n(fo) h(v) +n(alues) g(is) h(an) f(array) g(de\002nin) n(g) g(all) h(of) f(the) g +(application) n(') -5 b(s) 21 b(database) f(tables:) p +Fc 396 1931 a($setup_info) n(['addressboo) n(k']['tables') n(]) 45 +b(=) g(array\() 576 2028 y('phpgw_) n(addressbook') n(,) 576 +2125 y('phpgw_) n(addressbook_) n(extra') 396 2222 y(\);) p +Fg 396 2510 a(This) 21 b(is) g(a) f(simple) h(array) -7 +b(,) 20 b(and) g(must) g(list) h(accurately) e(the) h(curren) n(t) h +(table) f(names) g(you) g(are) g(using) f(in) i(you) n(r) g(applica) n +(tion.) 396 2618 y(This) g(list) g(will) g(match) f(a) g(much) f(more) h +(comp) n(le) o(x) g(array) f(of) h(table) g(speci\002cations,) g(as) h +(you) e(will) i(see) g(belo) n(w) -5 b(.) p Fd 396 3038 +a(2.1.3.) 28 b(Hooks) p Fb 396 3291 a(2.1.3.1.) c(Some) f(applications) +g(will) g(use) g(this) g(section.) p Fg 396 3441 a(The) d(hook) n(s) h +(array) e(part) h(of) g($setup_in) n(fo) g(contain) n(s) i(a) e(simple) +g(list) i(of) d(hooks) h(the) g(applicatio) n(n) g(will) h(use:) p +Fc 396 3621 a($setup_info) n(['addressboo) n(k']['hooks']) n([]) 45 +b(=) g('prefer) n(ences';) 396 3718 y($setup_info) n(['addressboo) n +(k']['hooks']) n([]) g(=) g('admin') n(;) p Fg 396 4006 +a(Here) 20 b(we) g(also) g(note) f(a) h(dif) n(fer) n(ent) g(method) e +(of) i(') -5 b(stuf) n(\002ng) 19 b(the) g(array) -5 +b(.) d(') 20 b(In) g(an) o(y) f(case,) h(this) g(list) h(of) e(hoo) n +(ks) i(will) f(be) g(requ) n(ired) 396 4114 y(soon) g(in) g(order) f +(for) g(your) g(hook) n(_admin) n(.inc.ph) n(p) i(and) e(other) g +(\002les) i(to) g(w) o(ork.) e(This) h(is) h(being) e(done) h(to) g +(cut) g(do) n(wn) f(on) h(the) 396 4222 y(manual) f(directory) g +(listing) h(and) g(\002le_e) o(xists) g(loops) g(don) n(e) h(curren) n +(tly) f(to) h(disco) o(v) m(er) f(hook) f(\002les.) i(Other) f(than) 396 +4330 y('prefe) n(rences') g(and) g('adm) n(in',) g('hom) n(e',) g +('manu) n(al',) g('after_n) n(a) n(vbar') f(and) h('na) n(vb) n(ar_end) +n(') h(are) f(all) g(v) n(alid) g(hook) f(entries.) p +Black Fe 3842 5278 a(3) p Black 90 rotate dyy eop +%%Page: 4 4 +4 3 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fd 396 579 a(2.1.4.) 28 +b(Dependencies) p Fb 396 832 a(2.1.4.1.) c(All) f(applications) g(will) +g(ha) o(ve) g(at) g(least) g(one) g(entr) q(y) g(here) r(.) p +Fg 396 982 a(The) d(\002nal) g(section,) g(or) g(array) f(of) h(data,) g +(is) h(a) g(listing) f(of) g(the) g(other) g(applicatio) n(ns) h(you) n +(r) g(applica) n(tion) f(require) n(s) i(in) e(orde) n(r) 396 +1089 y(to) h(fun) n(ction:) p Fc 396 1270 a($setup_info) n +(['addressboo) n(k']['depends) n('][]) 45 b(=) f(array\() 576 +1367 y('appnam) n(e') h(=>) f('phpgwapi',) 576 1464 y('versio) n(ns') h +(=>) f(Array\() 755 1561 y('0.9.10',) 755 1658 y('0.9.11',) 755 +1755 y('0.9.12',) 755 1852 y('0.9.13') 576 1950 y(\)) 396 +2047 y(\);) p Fg 396 2335 a(This) 21 b(is) g(the) f(standard) f(depen) n +(denc) o(y) g(array) g(for) h(all) h(php) n(grou) n(pw) o(are) f +(application) n(s.) h(It) f(states) i(that) e(this) h(app) n(lication) +396 2443 y(require) n(s) g(the) g(php) n(gw) o(api,) f(and) f(lists) j +(the) e(v) o(ersion) n(s) h(with) g(which) e(v) o(ersions) h(this) g +(app) g(is) h(compa) n(tible.) g(This) f(list) h(w) o(ould) 396 +2551 y(need) f(to) g(be) g(appen) n(ded) g(upon) f(each) h(ne) n(w) g +(API) g(release,) g(assuming) g(you) n(r) h(app) n(lication) f(is) h +(compatib) n(le) g(with) f(this) h(ne) n(w) 396 2659 +y(API) g(v) o(ersio) n(n.) f(Y) -9 b(ou) 20 b(may) g(list) h(other) e +(application) n(s) i(here,) f(e.g.) f(your) g(app) h(might) g(dep) n +(end) g(upon) f('email') g(in) i(ord) n(er) g(to) 396 +2767 y(w) o(ork) f(pro) n(perly) -5 b(.) 396 2916 y(Do) 20 +b(NO) m(T) h(list) g(applicatio) n(ns) g(here) e(without) h(consider) n +(ing) g(this:) h(If) f(you) f(do) h(list) h(an) f(application) f(here,) +g(and) h(your) f(app) 396 3024 y(does) h(not) g(really) g(requ) n(ire) h +(it,) f(your) f(application) g(will) i(not) f(install) h(unless) f +(that) g(other) g(app) n(lication) g(is) h(already) 396 +3132 y(installed.) f(This) g(is) i(hand) n(led) e(norm) n(ally) h +(within) f(the) g(install/upgr) n(ade) g(process) g(loops,) f(which) h +(will) h(install) g(only) 396 3240 y(application) n(s) g(whose) f +(depen) n(dencies) g(are) g(satis\002ed.) h(Using) f(a) h(multip) n +(ass) h(fun) n(ction,) e(the) g(application) n(s) h(are) f(installed) +396 3348 y(in) h(the) f(corr) n(ect) h(order) e(to) h(ensure) g(that) g +(depen) n(dencies) g(are) g(resolv) o(ed) n(.) h(In) f(all) g(cases,) h +(the) f(API) h(w) o(ould) e(be) h(installed) g(\002rst) 396 +3456 y(in) h(e) n(v) o(er) n(y) f(ne) n(w) g(install) h(or) f(upgr) n +(ade,) g(since) g(all) h(application) n(s) g(depen) n(d) g(on) e(the) i +(API.) p Ff -2 3991 a(2.2.) 34 b(tab) o(les) r(_base) r(line) r(.in) r +(c.php) g(\(Recomme) r(nded\)) p Fd 396 4279 a(2.2.1.) 28 +b(An) n(y) g(application) g(that) g(has) g(at) h(least) f(one) g +(upgrade) g(r) n(outine) f(will) g(ha) o(ve) h(this) 396 +4408 y(\002le) r(.) p Fg 396 4566 a(The) 20 b(tables_baseline) f +(\002le) i(represen) n(ts) g(the) g(earliest) f(suppo) n(rted) g(v) o +(ersion) f(of) h(an) g(application) n(') -5 b(s) 21 b(tables.) f(This) h +(\002le) g(is) 396 4674 y(used) f(only) g(in) g(the) g(upgr) n(ade) g +(process,) g(and) f(is) j(critical) e(to) g(its) h(success.) g(It) f +(contains) g(an) g(array) f(of) 396 4782 y(database-in) n(depend) n +(ent) h(table,) g(\002eld,) g(k) o(e) o(y) g(and) g(inde) o(x) f +(de\002nitio) n(ns.) p Black Fe 3842 5278 a(4) p Black +90 rotate dyy eop +%%Page: 5 5 +5 4 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(This) i(array) e(is) +i(form) n(atted) g(for) e(use) i(by) e(the) i(class.schema_) n(proc_) n +(array) -5 b(.) n(inc.ph) n(p) 21 b(\002le) f(in) h(setup3.) e(See) i +(the) 396 687 y(tables_up) n(date) g(section) f(belo) l(w) h(for) f +(mor) n(e) h(detail) f(about) f(schema_p) n(roc,) h(b) n(ut) g(for) g +(no) n(w) -5 b(,) 19 b(here) g(is) j(a) e(simple) g(table) 396 +795 y(de\002nition) f(in) i(this) f(format:) p Fc 396 +975 a($phpgw_base) n(line) 45 b(=) f(array\() 576 1072 +y('skel') f(=>) i(array\() 755 1169 y('fd') f(=>) h(array\() 934 +1266 y('skel_id') f(=>) g(array\('typ) n(e') h(=>) f('auto','null) n +(able') g(=>) h(false\),) 934 1363 y('skel_owner) n(') g(=>) g +(array\(') n(type') f(=>) h('varchar') n(,'precision') e(=>) i(25\),) +934 1461 y('skel_acces) n(s') g(=>) f(array\('type') f(=>) i('varchar) n +(','precision) n(') g(=>) f(10\),) 934 1558 y('skel_cat') f(=>) i +(array\('ty) n(pe') g(=>) f('int','prec) n(ision') g(=>) h(4\),) 934 +1655 y('skel_des') e(=>) i(array\('ty) n(pe') g(=>) f('text'\),) 934 +1752 y('skel_pri') f(=>) i(array\('ty) n(pe') g(=>) f('int','prec) n +(ision') g(=>) h(4\)) 755 1849 y(\),) 755 1946 y('pk') f(=>) h +(array\(') n(skel_id'\),) 755 2043 y('fk') f(=>) h(array\(\)) n(,) 755 +2141 y('ix') f(=>) h(array\(\)) n(,) 755 2238 y('uc') f(=>) h +(array\(\)) 576 2335 y(\)) 396 2432 y(\);) p Fg 396 2720 +a(This) 21 b(multi-d) n(imensiona) n(l) g(array) f(con) n(tains) h(1) f +(subarray) f(with) h(5) h(subs) f(of) g(its) h(o) n(wn.) e(The) h +(\002rst) h(array) e(\(') -5 b(sk) o(el') 21 b(abo) m(v) o(e\)) 396 +2828 y(de\002nes) f(the) g(table) h(name) n(.) g(Belo) n(w) f(that) h +(are) f(5) g(sections,) g('fd') f(for) h(\002eld) g(de\002nition) n(s,) +h('pk') e(to) i(de\002ne) e(primary) g(k) o(e) o(ys,) 396 +2936 y('fk') g(to) i(de\002ne) e(foreign) g(k) o(e) o(ys,) h('ix') f +(to) i(de\002ne) e(inde) o(x) m(ed) h(\002elds,) h(and) e('uc') h(to) g +(de\002ne) g(colum) n(ns) h(that) f(requir) n(e) h(uniqu) n(e) 396 +3044 y(v) n(alues.) f(In) g(the) g(abo) o(v) m(e) g(e) o(xample) n(,) h +(the) f(table) g(') -5 b(sk) o(el') 21 b(has) f(6) g(\002elds) h(\(sk) o +(el_id,) e(sk) o(el_o) n(wne) n(r) m(,) h(sk) o(el_access,) g(sk) o +(el_cat,) 396 3152 y(sk) o(el_des,) g(sk) o(el_pr) n(i\),) h(and) e(') +-5 b(sk) o(el_id') 20 b(is) h(de\002ned) e(also) i(as) g(the) f(prima) n +(ry) g(k) o(e) o(y) g(for) f(this) i(table.) f(More) g(info) n(rmation) +f(on) 396 3260 y(this) i(array) e(is) i(belo) n(w) -5 +b(.) 19 b(But,) i(this) g(for) n(mat) g(w) o(as) g(chosen) e(as) i(an) f +(a) n(v) n(ailable) g(solution) f(for) h(de\002nin) n(g) h(tables) f +(and) g(\002elds) 396 3368 y(without) g(ha) n(ving) f(to) h(maintain) f +(seperate) h(\002les) h(for) f(dif) n(fer) n(ent) g(databases.) p +Ff -2 3820 a(2.3.) 34 b(tab) o(les) r(_current.inc.php) h(\(Recomme) r +(nded\)) p Fd 396 4108 a(2.3.1.) 28 b(All) f(applications) h(with) f +(tab) o(les) i(will) d(need) i(this) g(\002le) r(.) p +Fg 396 4265 a(The) 20 b(tables_cur) n(rent) g(\002le) h(de\002nes) f +(the) g(curren) n(t) h(table) f(de\002nition) f(that) i(match) n(es) g +(the) g(') l(v) o(e) n(rsion') f(string) g(in) g($setup_) n(info) 396 +4373 y(as) h(well) g(as) f(the) g(curren) n(t) h(code.) e(This) h +(\002le) h(is) g(used) f(only) f(for) g(ne) n(w) h(installs,) h(or) f +(when) n(e) n(v) o(er) g(the) g(applica) n(tion) g(is) h(remo) o(v) m +(ed) 396 4481 y(and) f(reinstalled.) f(The) h(forma) n(t) h(and) f +(name) f(of) h(the) h(array) e(in) h(this) h(\002le) g(is) g(the) f +(same) g(as) h(for) f(the) g(tables_baseline) f(\002le) 396 +4589 y(listed) i(abo) o(v) m(e.) f(In) g(f) o(act,) g(whene) n(v) m(er) +g(it) h(is) g(required) e(to) h(chang) n(e) h(your) e(table) h +(de\002nition) n(s,) h(you) f(w) o(ould) f(start) i(by) e(cop) o(ying) +396 4697 y(the) h(current) f(\002le) i(o) o(v) o(er) e(to) h(become) f +(the) h(tables_baseline) g(\002le.) g(After) g(ha) n(ving) f(created) h +(you) n(r) h(upg) n(rade) f(rou) n(tines,) h(you) 396 +4805 y(w) o(ould) f(then) f(recreate) h(the) g(curren) n(t) h(\002le) g +(to) f(match) g(the) g(ne) n(w) g(table) g(de\002nition) n(s.) p +Black Fe 3842 5278 a(5) p Black 90 rotate dyy eop +%%Page: 6 6 +6 5 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Ff -2 583 a(2.4.) 34 +b(tab) o(les) r(_update) r(.) r(inc.php) g(\(Recomm) r(ended\)) p +Fd 396 870 a(2.4.1.) 28 b(An) n(y) g(application) g(whic) o(h) f +(requires) h(an) g(upgrade) f(to) h(a) g(pre) o(vious) g(ver) o(sion') +-6 b(s) 396 1000 y(tab) o(les) 29 b(will) d(need) i(this) g(\002le) r +(.) p Fg 396 1158 a(This) 21 b(\002le) f(will) h(be) g(the) f(most) g +(comp) n(le) o(x) g(of) g(all) h(setup-or) n(iented) f(\002les) h(with) +f(which) g(you) f(will) i(be) f(w) o(orking) n(.) h(It) f(will) 396 +1266 y(contain) f(all) i(upgr) n(ade) f(function) n(s) h(capable) e(of) +h(upgra) n(ding) g(an) o(y) f(possible) h(v) o(ersion) f(of) h(you) n +(r) h(php) n(group) n(w) o(are) f(app.) 396 1373 y(These) g(upgr) n +(ade) g(routines) g(rou) n(ghly) g(match) f(the) i(old) e(setup) h +(progr) n(am') -5 b(s) 21 b(upg) n(rade) f(functio) n(ns,) h(b) n(ut) f +(the) g(use) g(of) g(objects) 396 1481 y(and) g(the) g(method) n(s) h +(ha) n(v) o(e) f(chang) n(ed) g(dramatically) -7 b(.) 20 +b(The) g(simplest) h(v) o(ersio) n(n) g(upg) n(rade) f(rou) n(tine) h +(w) o(ould) e(look) h(lik) o(e:) p Fc 396 1662 a($test[]) 44 +b(=) h("0.9.3p) n(re10";) 396 1759 y(function) f(addressb) n +(ook_upgrade0) n(_9_3pre10\(\)) 396 1856 y({) 576 1953 +y(global) f($setup_info;) 576 2050 y($setup_) n(info['addres) n +(sbook']['cur) n(rentver']) h(=) g('0.9.3';) 576 2147 +y(return) f($setup_info[) n('addressbook) n(']['currentv) n(er'];) 396 +2244 y(}) p Fg 396 2532 a(This) 21 b(upg) n(rade) f(fun) n(ction) g +(merely) g(upd) n(ates) h(the) f(curren) n(t) h(v) o(ersion) e(numb) n +(er) -5 b(.) 21 b(Note) f(that) g(there) g(is) h(not) f(only) f(an) h +(upgr) n(ade) 396 2640 y(functio) n(n,) g(b) n(ut) g(also) g(the) g +(setting) g(of) f(a) i(v) n(alue) e(in) h(the) g($test) g(array) -5 +b(.) 18 b(The) i(name) f(') o(test') h(is) g(a) h(hold) n(o) o(v) o(er) +e(from) g(the) g(old) h(setup) 396 2748 y(prog) n(ram,) g(and) g(is) h +(an) f(arbitrar) n(y) h(cho) n(ice.) g(Ho) n(we) n(v) m(er) m(,) f +(this) h(nam) n(e) g(must) f(be) g(used) g(for) g(the) g(upgr) n(ade) g +(process) g(to) g(w) o(ork.) 396 2856 y(Prior) g(to) g(each) g(of) g +(your) f(upgr) n(ade) h(functio) n(ns,) h(add) e(the) i(v) n(alue) e +(of) h(the) g(pre) n(vio) n(us) h(v) o(ersion) e(to) h($test.) 396 +3006 y(No) n(w) g(look) g(at) g(the) h(fun) n(ction) f(name.) f(The) h +(name) g(is) h(impor) n(tant) g(and) e(should) g(be) i(structur) n(ed) f +(as) h(the) f(application) f(name) 396 3114 y(and) h(the) g(v) o +(ersion) f(from) g(which) h(you) f(are) h(intendin) n(g) h(to) f(upgr) n +(ade.) g(The) g('.) -6 b(') h(s) 21 b(in) f(the) g(v) o(ersion) f +(string) h(are) g(replaced) f(with) 396 3222 y('_'.) 396 +3371 y(Inside) h(the) g(functio) n(n,) g(we) h(globa) n(l) g(the) f +($setup_in) n(fo) g(array) -5 b(.) 19 b(Ne) o(xt,) h(we) g(alter) g +(the) h(v) o(er) n(sion) f(numbe) n(r) h(in) f(that) g(array) -5 +b(,) 19 b(for) 396 3479 y(our) h(applica) n(tion.) g(Please) h(be) f +(careful) f(to) i(specify) e(Y) n(OUR) i(applica) n(tion) f(name) g +(here.) f(The) h(v) o(ery) f(last) i(thing) f(we) g(do) g(is) 396 +3587 y(to) h(retur) n(n) g(this) f(ne) n(w) g(v) o(ersion) f(to) i(the) +f(calling) g(fun) n(ction.) g(The) g(upg) n(rade) g(pro) n(cess) i +(relies) e(on) g(the) g(v) n(alue) g(retur) n(ned,) g(since) 396 +3695 y(it) h(uses) g(this) g(directly) e(to) h(determin) n(e) h(the) f +(ne) n(w) g(v) o(ersion) n(.) h(This) f(may) g(appear) f(illogical) h +(on) g(some) g(le) n(v) o(el,) f(b) n(ut) i(it) f(does) 396 +3803 y(w) o(ork.) g(The) f(reason) h(for) f(returnin) n(g) i(this) f(v) +n(alue) g(instead) g(of) g(a) g(T) m(rue) g(or) g(1,) g(etc.) g(has) g +(to) h(do) f(with) g(v) n(ariab) n(le) h(scope) f(and) 396 +3911 y(lifetime.) g(In) g(this) h(w) o(ay) -5 b(,) 19 +b(e) n(v) o(en) g(the) i(glob) n(aling) f(of) g($setup_) n(info) g +(inside) g(the) g(functio) n(n) h(may) e(ha) n(v) o(e) h(little) h(ef) n +(fect) e(on) h(the) 396 4019 y(upgr) n(ade) g(process.) g(But,) g +(there) g(may) g(be) g(v) n(alues) g(in) g(this) h(array) e(you) g(w) o +(ould) h(w) o(ant) g(to) h(use) f(within) g(the) g(functio) n(n.) g +(More) 396 4126 y(on) g(that) g(later) -5 b(.) 396 4276 +y(There) 20 b(is) h(one) e(other) h(v) n(ariab) n(le) h(you) e(w) o +(ould) h(need) f(if) i(doin) n(g) f(an) o(y) g(database) f(operation) n +(s) i(here.) e(If) i(you) e(glob) n(al) 396 4384 y($php) n(gw_setup,) g +(you) g(will) i(then) f(ha) n(v) o(e) g(access) g(to) h(db) e(and) h +(schema_p) n(roc) g(objects) g(and) f(function) n(s.) i(The) f(objects) +g(of) 396 4492 y(interest) g(here) g(are:) p Black Fa +396 4724 a(\225) p Black Fg 81 w($php) n(gw_setup) n(->oProc) p +Black Fa 396 4874 a(\225) p Black Fg 81 w($php) n(gw_setup) n(->db) m +(.) p Black Fe 3840 5278 a(6) p Black 90 rotate dyy eop +%%Page: 7 7 +7 6 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(F) o(or) h(most) g +(database) g(w) o(ork) f(you) h(should) f(use) h(the) h(oPro) n(c) g +(object.) e(This) i(also) f(has) h(a) f(db) g(object) g(that) g(should) +f(be) h(used) 396 687 y(for) g(most) g(standard) f(phpg) n(w) i(API) f +(db) g(class) h(functio) n(ns,) g(includ) n(ing) f($db-) n(>query) -7 +b(,) 20 b(ne) o(xt_r) n(ecord,) f(num_) n(ro) n(ws,) h(and) g(f.) 396 +795 y(The) g(use) f(of) h(these) f(for) g(standard) g(db) g(opera) n +(tions) h(is) h(critical) e(to) h(the) g(upg) n(rade) f(process.) g +(Schema_) n(proc) g(has) h(a) g(\003ag) g(that) 396 903 +y(can) g(be) g(set) h(to) g(determ) n(ine) f(what) h(mod) n(e) g(of) f +(upg) n(rade) g(we) g(are) h(in.) f(This) g(\003ag) g(is) h(set) g(in) g +(the) f(setup) g(class) h(durin) n(g) g(the) 396 1011 +y(upgr) n(ade) f(process,) g(and) g(shou) n(ld) h(not) f(be) g(altered) +f(locally) -5 b(.) 396 1160 y(This) 21 b(\003ag) f(is) h(a) g(decision) +e(on) h(whether) f(to) h(alter) h(the) f(database) g(or) f(the) i +(schema_) n(proc) e(array) -5 b(.) 19 b(The) h(tables_ba) n(seline) h +(\002le) 396 1268 y(abo) o(v) m(e) g(is) g(loaded) e(by) h(setup) g +(prior) f(to) h(runn) n(ing) g(your) f(upgr) n(ade) h(routines.) f(If) h +(the) h(curr) n(ent) g(installed) f(v) o(er) n(sion) h(is) g(greater) +396 1376 y(than) f(the) g(curren) n(t) h(upgr) n(ade) f(routine) n(,) h +(we) f(don') o(t) f(need) h(to) g(alter) g(the) g(database) g(yet.) g +(But) h(schema_) n(proc) e(instead) h(alters) 396 1484 +y(the) g($phpg) n(w_baseline) f(array) h(in) g(memo) n(ry) -5 +b(.) 20 b(The) g(mainten) n(ance) g(of) g(this) h(array) e(is) i(done) e +(e) n(v) o(en) g(when) h(we) g(do) g(alter) h(the) 396 +1592 y(database.) f(Once) g(our) f(v) o(ersion) g(numb) n(er) h(in) h +(the) f(test) h(array) e(matches) h(the) g(curren) n(tly) h(installed) f +(v) o(ersio) n(n) h(of) f(an) 396 1700 y(application) n(,) h(real) f(w) +o(ork) f(on) h(the) g(tables) h(be) o(gin) n(s.) 396 +1849 y('Why) f(both) n(er) h(mod) n(ifying) e(this) i(array) e(at) i +(all',) f(you) f(may) h(ask.) g(The) g(array) f(must) i(be) f(maintain) +n(ed) g(in) h(ord) n(er) g(to) f(k) o(eep) 396 1957 y(curren) n(t) h +(table) f(de\002nition) f(status.) i(This) f(is) h(used) f(in) h(some) f +(schema_) n(proc) g(fun) n(ctions) g(when) g(altering) f(column) n(s) i +(and) 396 2065 y(tables.) f(This) h(is) g(especially) f(critical) g +(for) g(pgsq) n(l) h(schema_p) n(roc) f(functio) n(ns.) 396 +2214 y(By) h(using) f(the) g($ph) n(pgw_setup) n(->oPro) n(c) h(object) +f(for) f(basic) i(inserts) f(and) g(quer) n(ies,) h(we) g(achei) n(v) m +(e) g(the) f(ability) g(to) g(run) f(all) 396 2322 y(upgr) n(ade) h +(fun) n(ctions) g(in) f(e) n(v) o(ery) g(upg) n(rade) g(c) o(ycle) g +(without) g(actually) g(altering) f(the) i(databa) n(se) h(until) e(we) +h(reach) f(the) g(curren) n(t) 396 2430 y(v) o(ersion) g(we) i +(actually) e(w) o(ant) i(to) f(upgr) n(ade.) g(F) o(or) g(e) o(xam) n +(ple:) p Fc 396 2610 a($sql) 44 b(=) h("SELECT) f(*) g(FROM) h(phpgw_a) +n(ddressbook_e) n(xtra) g(WHERE) f(contact) n(_name='note) n(s'";) 396 +2708 y($phpgw_setu) n(p->oProc->qu) n(ery\($sql,__L) n(INE__,__FILE) n +(__\);) 396 2805 y(while\($phpg) n(w_setup->oPr) n(oc->next_rec) n +(ord\(\)\)) g({) p Fg 396 3093 a(W) -7 b(e) 22 b(cou) n(ld) f(ha) n(v) o +(e) e(used) h($php) n(gw_setup-) n(>db) g(or) g(e) n(v) o(en) f(a) i +(cop) m(y) g(for) e(the) i(abo) o(v) m(e) f(acti) n(vity) -5 +b(.) 19 b(Ho) n(we) n(v) o(er) -5 b(,) 20 b(using) g(the) g(abo) o(v) m +(e) 396 3201 y(method) f(ensures) h(that) g(an) g(array) g(only) f(upg) +n(rade) h(does) g(just) h(that.) f(If) g(the) g(\003ag) g(w) o(as) h +(set) g(in) g(setup) f(telling) g(schema_) n(proc) 396 +3309 y(to) h(alter) f(the) g(array) f(only) -5 b(,) 19 +b(we) i(do) e(not) h(w) o(ant) h(to) f(touch) f(the) h(tables) h(for) e +(inserts) i(or) f(selects) h(yet.) f(In) g(this) h(case,) 396 +3417 y($php) n(gw_setup-) n(>oProc-) n(>ne) o(xt_) n(record) n(\(\)) f +(retur) n(ns) g(F) o(alse,) g(and) f(the) g(loop) g(is) h(skipped.) e +(The) i($ph) n(pgw_b) n(aseline) g(array) 396 3525 y(does) g(not) g +(kno) n(w) f(about) g(table) i(con) n(tent,) g(only) e(table) h(and) g +(\002eld) g(de\002nition) n(s.) 396 3674 y(If) g(the) h(upg) n(rade) f +(fun) n(ction) g(containin) n(g) g(this) h(method) e(is) i(actually) f +(w) o(ork) n(ing) g(on) g(the) g(tables) h(\(cur) n(rentv) o(er) e(<=) h +(the) 396 3782 y(upgr) n(ade) g(function) n(\),) g(then) g(ne) o(xt_) n +(record) n(\(\)) g(is) h(returned) e(as) i(the) f(e) o(xpe) n(cted) h +(action) e(of) h(pulling) f(the) h(ne) o(xt) g(ro) n(w) g(of) g(data.) +396 3890 y(Inside) g(of) g(this) h(while) f(loop) n(,) h(you) e(can) h +(safely) g(use) h($ph) n(pgw_setu) n(p->db) n(,) g(or) f(pref) n +(erably) g(a) g(cop) o(y) -5 b(,) 19 b(to) h(do) g(the) 396 +3998 y(insert/delete,) g(etc) g(you) f(w) o(ant) i(to) f(ha) n(v) o(e) g +(happ) n(en) g(here.) p Fc 576 4178 a($cid) 44 b(=) g($phpgw_setup) n +(->oProc->f\(') n(contact_id'\)) n(;) 576 4275 y($cvalu) f(=) i +($phpgw_set) n(up->oProc->f) n(\('contact_va) n(lue'\);) 576 +4372 y($update) e(=) i("UPDATE) f(phpgw_a) n(ddressbook) g(set) g +(note='") g(.) g($cvalu) g(.) h("') f(WHERE) g(id=") g(.) h($cid;) 576 +4469 y($db1->q) n(uery\($update) n(\);) 576 4566 y($delete) e(=) i +("DELETE) f(FROM) g(phpgw_ad) n(dressbook_ex) n(tra) h(WHERE) f +(contact_) n(id=") g(.) h($cid) f(.) h(") g(AND) f(contact_n) n +(ame='notes'") n(;) 576 4664 y($db1->q) n(uery\($delete) n(\);) 396 +4761 y(}) p Black Fe 3839 5278 a(7) p Black 90 rotate +dyy eop +%%Page: 8 8 +8 7 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a($db1) g(is) i(a) g +(cop) o(y) e(of) h($php) n(gw_setup) n(->db,) f(to) i(a) n(v) n(oid) f +(poten) n(tial) h(con\003icts) f(with) g(the) h(rest) f(of) g(setup') -5 +b(s) 21 b(db) e(acti) n(vities.) 396 728 y(In) h(addition) f(to) h(the) +h(basic) f(API) g(db) g(class) h(function) n(s,) g(schema_) n(proc) f +(introd) n(uces) g(the) h(follo) l(wing) f(special) g(function) n(s:) p +Fc 396 909 a(function) 44 b(DropTabl) n(e\($sTableNam) n(e\)) 396 +1006 y(function) g(DropColu) n(mn\($sTableNa) n(me,) h($aTableD) n(ef,) +g($sColumn) n(Name\)) 396 1103 y(function) f(RenameTa) n(ble\($sOldTab) +n(leName,) g($sNewTable) n(Name\)) 396 1200 y(function) g(RenameCo) n +(lumn\($sTable) n(Name,) g($sOldColumnN) n(ame,) h($sNewCo) n +(lumnName\)) 396 1297 y(function) f(AlterCol) n(umn\($sTableN) n(ame,) h +($sColum) n(nName,) f($aColumnDef) n(\)) 396 1394 y(function) g +(AddColum) n(n\($sTableNam) n(e,) h($sColumnN) n(ame,) g($aColum) n +(nDef\)) 396 1491 y(function) f(CreateTa) n(ble\($sTableN) n(ame,) h +($aTable) n(Def\)) p Fg 396 1779 a(Please) 21 b(use) g(these) f(func) n +(tions) h(where) e(appro) n(priate) h(in) g(place) g(of) g(standard) f +(SQL) i(CREA) -9 b(TE,) 20 b(DR) m(OP) -9 b(,) 20 b(and) g(AL) -8 +b(TER) 396 1887 y(T) g(ABLE) 21 b(comm) n(ands.) f(This) g(will) h +(ensure) f(that) g(your) f(upgr) n(ade) h(script) g(w) o(orks) g(for) g +(all) h(supp) n(orted) f(databa) n(ses.) 396 2037 y(Of) h(these) f +(func) n(tions,) g(DropT) -7 b(able) n(,) 21 b(RenameT) -7 +b(able) n(,) 21 b(and) f(RenameColu) n(mn) g(are) g(pretty) g +(straightf) n(orw) o(ard.) f(P) o(ass) i(these) 396 2145 +y(the) f(table) h(name) n(s) g(you) f(wish) g(to) h(Drop) n(/Rename,) f +(and) g(schema_) n(proc) f(will) i(handle) e(the) i(rest,) f(includin) n +(g) g(inde) o(x) o(e) n(s) h(and) 396 2253 y(sequences,) e(where) h +(applicab) n(le.) 396 2402 y(The) g(remainin) n(g) h(fun) n(ctions) f +(require) f(some) h(e) o(xplan) n(ation:) p Black Fa +396 2635 a(\225) p Black Fg 81 w(CreateT) -7 b(able:) p +Fc 396 2815 a($phpgw_setu) n(p->oProc->Cr) n(eateTable\() 576 +2912 y('catego) n(ries',) 44 b(array\() 755 3009 y('fd') g(=>) h +(array\() 934 3106 y('cat_id') f(=>) g(array\('type) n(') h(=>) g +('auto',) n('nullable') f(=>) g(false\),) 934 3203 y('account_id) n(') h +(=>) g(array\(') n(type') f(=>) h('int','pr) n(ecision') f(=>) g +(4,'nullable) n(') h(=>) g(false,) e('de-) 396 3300 y(fault') h(=>) h +(0\),) 934 3398 y('app_name') e(=>) i(array\('ty) n(pe') g(=>) f +('varchar',') n(precision') g(=>) g(25,'nulla) n(ble') h(=>) f +(false\),) 934 3495 y('cat_name') f(=>) i(array\('ty) n(pe') g(=>) f +('varchar',) f('precision') g(=>) i(150,) f('nul-) 396 +3592 y(lable') g(=>) h(false\),) 934 3689 y('cat_descri) n(ption') f +(=>) h(array\('t) n(ype') g(=>) f('text',) g('nullabl) n(e') h(=>) f +(false\)) 755 3786 y(\),) 755 3883 y('pk') g(=>) h(array\(') n +(cat_id'\),) 755 3980 y('ix') f(=>) h(array\(\)) n(,) 755 +4077 y('fk') f(=>) h(array\(\)) n(,) 755 4175 y('uc') f(=>) h +(array\(\)) 576 4272 y(\)) 396 4369 y(\);) p Fg 396 4657 +a(Does) 20 b(this) g(look) f(f) o(amiliar?) g(The) h(array) f(passed) g +(to) h(CreateT) -7 b(able) 20 b(is) g(in) g(the) g(form) n(at) g(used) g +(also) g(in) g(tables_b) n(aseline) g(and) 396 4765 y(tables_cur) n +(rent.) g(Note) g(a) h(slight) f(dif) n(fer) n(ence) g(where) g(the) g +(table) g(name) g(is) h(being) e(passed) h(as) h(a) g(seperate) f(ar) o +(g) n(ument.) f(The) 396 4873 y(second) h(ar) o(g) n(ument) f(to) i +(the) f(func) n(tion) g(is) i(the) e(table) g(de\002nition) f(array) -7 +b(,) 21 b(starting) e(with) i('fd') n(.) p Black Fe 3842 +5278 a(8) p Black 90 rotate dyy eop +%%Page: 9 9 +9 8 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Black Fa 396 579 +a(\225) p Black Fg 81 w(AddColu) n(mn:) p Fc 396 759 +a($phpgw_setu) n(p->oProc->Ad) n(dColumn\('php) n(gw_categorie) n +(s','cat_acce) n(ss',array\(') n(type') 44 b(=>) h('var-) 396 +856 y(char',) f('precision) n(') h(=>) g(25\)\);) p Fg +396 1144 a(Here) 20 b(we) h(pass) g(the) f(table) g(name) g(of) f(an) i +(e) o(xisting) e(table,) h(the) g(ne) n(w) g(column) f(name,) g(and) h +(a) h(\002eld) f(de\002nition) n(.) h(This) 396 1252 +y(de\002nition) e(is) i(merely) f(a) g(slice) h(of) f(the) g(table) h +(array) n(s) g(foun) n(d) g(earlier) e(in) i(this) f(docum) n(ent.) p +Black Fa 396 1485 a(\225) p Black Fg 81 w(AlterColumn) n(:) p +Fc 396 1665 a($phpgw_setu) n(p->oProc->Al) n(terColumn\('p) n +(hpgw_session) n(s','session_) n(action',arr) n(ay\('type') 44 +b(=>) g('var-) 396 1762 y(char',) g('precision) n(') h(=>) g('255'\)\)) +n(;) p Fg 396 2050 a(The) 20 b(forma) n(t) h(of) f(this) h(func) n +(tion) f(matches) g(AddColum) n(n.) g(It) h(is) g(also) f(a) h(simple) f +(case) h(of) f(passing) f(the) i(table) f(name,) f(\002eld) 396 +2158 y(name,) h(and) f(\002eld) i(de\002nitio) n(n.) p +Black Fa 396 2390 a(\225) p Black Fg 81 w(DropColu) n(mn:) p +Fc 396 2571 a($newtbldef) 43 b(=) i(array\() 576 2668 +y("fd") f(=>) g(array\() 755 2765 y('acl_appn) n(ame') h(=>) f +(array\('typ) n(e') h(=>) f('varchar',) g('precis) n(ion') h(=>) f +(50\),) 755 2862 y('acl_loca) n(tion') g(=>) h(array\('ty) n(pe') g(=>) +f('varchar',) f('precision') g(=>) i(255\),) 755 2959 +y('acl_acco) n(unt') g(=>) f(array\('typ) n(e') h(=>) f('int',) g +('precision') f(=>) i(4\),) 755 3056 y('acl_righ) n(ts') g(=>) f +(array\('type) n(') h(=>) g('int',) e('precision') g(=>) i(4\)) 576 +3153 y(\),) 576 3251 y('pk') f(=>) g(array\(\),) 576 +3348 y('ix') g(=>) g(array\(\),) 576 3445 y('fk') g(=>) g(array\(\),) +576 3542 y('uc') g(=>) g(array\(\)) 396 3639 y(\);) 396 +3736 y($phpgw_setu) n(p->oProc->Dr) n(opColumn\('ph) n(pgw_acl',$ne) n +(wtbldef,'acl) n(_account_ty) n(pe'\);) p Fg 396 4024 +a(This) 21 b(is) g(the) f(most) g(complicate) n(d) h(fun) n(ction) f +(in) h(schema_) n(proc,) e(from) g(the) h(user') -5 b(s) 21 +b(perspec) n(ti) n(v) o(e.) f(Its) h(comp) n(le) o(xity) f(is) 396 +4132 y(necessitated) g(by) g(the) g(requir) n(ement) g(of) g(some) g +(databases) g(to) g(recreate) g(a) g(table) g(in) h(the) f(case) h(of) f +(dro) n(pping) f(a) i(colum) n(n.) 396 4240 y(Note) f(that) h(the) f +(table) g(de\002nition) f(array) g(is) j(bein) n(g) f(used) f(yet) g +(again) n(.) h(The) f(array) f(de\002ned) g(here) h(should) f(match) h +(the) g(table) 396 4348 y(de\002nition) f(you) h(w) o(ant) g(after) g +(this) g(function) f(has) h(completed) n(.) h(Here,) f(we) g(are) g +(drop) n(ping) g(the) g(column) 396 4456 y('acl_acco) n(unt_typ) n(e') g +(from) f(the) i(table) f('ph) n(pgw_acl') n(,) h(and) f(the) g(table) g +(de\002nition) f(does) h(not) g(ha) n(v) o(e) f(this) i(column) 396 +4564 y(de\002ned.) e(Y) -9 b(ou) 20 b(could) f(cop) o(y) g(inform) n +(ation) h(from) f(your) g(tables_cur) n(rent) h(\002le) h(here) f(and) f +(edit) i(it) g(to) f(match) g(the) g(desired) 396 4672 +y(ne) n(w) g(table) g(spec,) g(less) i(the) e(colum) n(n) h(you) e +(wish) i(to) f(drop) n(.) p Black Fe 3842 5278 a(9) p +Black 90 rotate dyy eop +%%Page: 10 10 +10 9 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(There) h(are) g +(additio) n(nal) h(fun) n(ctions) f(within) g(schema_p) n(roc,) g(the) g +(majority) f(of) h(which) g(are) g(not) g(to) g(be) g(called) g +(directly) -5 b(.) 396 687 y(The) o(y) 19 b(are) i(used) e(internally) +-5 b(.) 19 b(If) h(you) f(do) h(wish) g(to) h(in) m(v) o(e) n(stigate) f +(further) -5 b(,) 20 b(use) h(class.schema_) n(proc.in) n(c.php) e(as) i +(your) 396 795 y(guide.) e(This) i(master) f(\002le) h(includ) n(es) g +(the) f(class.schema_p) n(roc_DBMS.inc) n(.php) f(and) 396 +903 y(class.schema_p) n(roc_ar) n(ray) -5 b(.in) n(c.php) 19 +b(\002les.) i(The) f(DBMS) h(\002les) g(should) e(not) h(be) g(used) g +(as) h(a) g(guide) n(,) g(since) f(their) 396 1011 y(functio) n(ns) h +(are) f(called) g(from) f(the) i(master) f(class,) h(and) e(the) h +(parameter) n(s) h(are) f(dif) n(feren) n(t) h(from) e(what) h(you) g +(migh) n(t) h(e) o(xpec) n(t) 396 1119 y(relati) n(v) o(e) f(to) g(the) +g(master) -5 b(.) 396 1268 y(PLEASE,) 20 b(DO) h(NO) m(T) f(WRITE) h(T) +o(O) e(OR) j(AL) -8 b(TER) 20 b(ANO) m(THER) g(APPLICA) -9 +b(TION'S) 20 b(T) -8 b(ABLES) 20 b(OR) h(THE) g(API) 396 +1376 y(T) -8 b(ABLES) 21 b(IN) f(Y) n(OUR) h(APPLICA) -9 +b(TION) 20 b(UPGRADE) g(FUNCTIONS!) p Ff -2 1829 a(2.5.) 34 +b(default_) r(recor) n(ds.inc.php) g(\(Optional\)) p +Fd 396 2116 a(2.5.1.) 27 b(An) n(y) h(application) e(with) h(tab) o +(les) h(that) f(wants) g(to) g(load) g(some) g(default) h(data) g(wil) n +(l) 396 2245 y(need) g(this) g(\002le) r(.) p Fg 396 +2403 a(The) 20 b(def) o(ault_) n(record) n(s) h(\002le) g(consists) g +(of) f(a) h(list) g(of) f(SQL) g(INSER) -5 b(Ts) 21 b(using) f(the) g +($oPro) n(c) h(object) e(directly:) p Fc 396 2583 a($oProc->que) n +(ry\("INSERT) 44 b(INTO) g(phpgw_in) n(v_statuslist) f(\(status_nam) n +(e\)) i(VALUES) f(\('avail) n(able'\)"\);) 396 2680 y($oProc->que) n +(ry\("INSERT) g(INTO) g(phpgw_in) n(v_statuslist) f(\(status_nam) n +(e\)) i(VALUES) f(\('no) g(longer) g(availab) n(le'\)"\);) 396 +2778 y($oProc->que) n(ry\("INSERT) g(INTO) g(phpgw_in) n(v_statuslist) f +(\(status_nam) n(e\)) i(VALUES) f(\('back) f(order'\)"\);) p +Fg 396 3066 a(In) 20 b(this) h(case,) f(the) g(de) n(v) o(elop) n(er) g +(w) o(anted) g(to) g(insert) h(some) f(status) g(inform) n(ation,) g +(which) g(w) o(as) h(then) e(used) h(in) h(a) f(select) h(box) 396 +3174 y(on) f(an) g(html) g(form.) f(Using) h(the) g(def) o(ault_r) n +(ecords) g(\002le,) g(e) n(v) o(ery) f(ne) n(w) h(install) h(will) g +(ha) n(v) o(e) e(this) i(data) f(included) n(.) h(This) f(\002le) 396 +3281 y(should) f(consist) i(of) f(quer) n(ies) h(applicable) e(to) i +(the) f(tables) g(de\002ned) f(in) i(setup.in) n(c.php) e(and) h +(tables_cu) n(rrent.inc) n(.php.) p Ff -2 3734 a(2.6.) 34 +b(test_da) r(ta.inc.ph) r(p) f(\(Optional\)) p Fd 396 +4021 a(2.6.1.) 28 b(An) n(y) g(de) o(veloper) g(wanting) f(to) h(test) h +(the) f(full) f(list) h(of) f(upgrade) h(r) n(outines) g(can) 396 +4151 y(use) h(this) e(\002le) r(.) p Fg 396 4309 a(test_data.inc.) n +(php) 20 b(is) h(similar) f(to) h(def) o(au) n(lt_recor) n(ds) g(abo) o +(v) m(e.) f(It) h(is) g(called) f(only) f(by) h(schemato) m(y) -5 +b(.php) 19 b(and) g(is) j(ne) n(v) m(er) 396 4417 y(installed) e(with) h +(a) f(ne) n(w) g(install) h(or) f(upgr) n(ade.) g(This) g(is) h(a) g +(de) n(v) o(e) n(loper) n(-on) n(ly) f(\002le.) h(The) f(INSER) -5 +b(Ts) 21 b(here) e(should) g(be) 396 4524 y(applicable) g(to) i(the) f +(tables_b) n(aseline) h(table) f(de\002nition) n(s.) p +Black Fe 3800 5278 a(10) p Black 90 rotate dyy eop +%%Page: 11 11 +11 10 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Ff -2 583 a(2.7.) 34 +b(langua) q(g) q(e) f(\002les) i(\(Required\)) p Fd 396 +870 a(2.7.1.) 28 b(All) f(applications) h(should) g(ha) o(ve) g(at) g +(least) h(a) f(\002le) g(of) f(English) h(translations,) 396 +1000 y(used) g(f) n(or) g(their) g(application) f(lang\(\)) h(calls.) p +Black Fa 396 1257 a(\225) p Black Fg 81 w(F) o(ormat) 19 +b(of) h(a) h(lang) f(\002le:) p Fc 396 1437 a({phrase}{TA) n +(B}{appname}{) n(TAB}{LANG_CO) n(DE}{TAB}{tra) n(nslation}) 576 +1535 y(e.g:) 396 1632 y(first) 44 b(name) 179 b(common) f(en) h(First) +44 b(Name) 396 1729 y(first) g(name) 179 b(common) f(de) h(Vorname) p +Black Fa 396 2183 a(\225) p Black Fg 81 w(Filenames:) p +Fc 396 2363 a(phpgw_{LANG) n(_CODE}.lang) 486 2460 y(e.g.) 396 +2557 y(English:) 44 b(phpgw_en) n(.lang) 396 2655 y(German:) g +(phpgw_de.) n(lang) p Fg 396 2943 a(Please) 21 b(see) g(the) f(conten) n +(ts) i(of) d(the) i(API) f(') o(langu) n(ages') g(table) h(for) e(the) h +(correct) g(setting) g(of) g(the) g(LANG_CODE.) p Fh +-2 3527 a(3.) 39 b(De) n(velop) n(er) h(T) -11 b(o) n(ols) p +Ff -2 3855 a(3.1.) 34 b(sqltoarra) n(y) -10 b(.) r(php) p +Fd 396 4143 a(3.1.1.) 28 b(Displa) n(ys) h(the) f(current) g(sc) o +(hema_pr) n(oc) h(arra) n(y) f(de\002ning) f(an) h(application') -6 +b(s) 396 4272 y(tab) o(les.) p Fg 396 4430 a(This) 21 +b(web) f(applica) n(tion) g(reads) g(the) h(curr) n(ent) f(table) h +(status) f(li) n(v) o(e) g(from) g(the) g(databa) n(se.) h(It) g(then) e +(parses) i(this) f(inform) n(ation) 396 4538 y(into) g(a) h(hop) n +(efully) f(corr) n(ect) h(table) f(de\002nition) f(array) h(for) f +(schema_p) n(roc.) h(Upon) f(visiting) h(this) g(app,) g(you) f(are) h +(sho) n(wn) g(a) 396 4646 y(list) i(of) d(currently) g(installed) h +(applicatio) n(ns) h(with) f(de\002ned) g(tables.) g(Y) -9 +b(ou) 19 b(may) h(then) g(select) h(one) e(app) h(or) g(all) h(app) n +(s,) g(and) 396 4754 y(then) f(submit) g(the) g(form) n(.) h(From) f +(this) g(form) f(you) h(may) f(then) h(do) n(wnlo) n(ad) g(a) h +(tables_cu) n(rrent) f(\002le,) h(suitable) f(for) 396 +4862 y(commission) f(to) i(cvs.) f(Please) h(do) f(check) f(the) h +(form) n(at) h(to) g(mak) m(e) g(sure) f(the) h(de\002nitio) n(ns) g +(are) f(correc) n(t.) p Black Fe 3800 5278 a(11) p Black +90 rotate dyy eop +%%Page: 12 12 +12 11 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Ff -2 581 a(3.2.) 34 +b(sc) o(he) r(mato) n(y) -10 b(.php) p Fd 396 868 a(3.2.1.) 28 +b(Runs) g(the) g(full) f(c) o(yc) n(le) i(of) f(upgrades,) g(inc) n +(luding) e(optional) h(test) r(_data.) p Fg 396 1026 +a(This) 21 b(app) e(is) i(not) f(beautifu) n(l,) h(may) f(bom) n(b) h +(on) e(you,) g(and) h(will) h(de\002nitely) e(drop) g(your) g +(application) n(') -5 b(s) 21 b(tables.) f(The) 396 1133 +y(display) g(is) h(similar) f(to) h(the) f(user/adm) n(in) h(tool,) e +(application) n(s.php.) g(Y) -9 b(ou) 20 b(are) g(sho) n(wn) g(a) g +(list) h(of) f(apps) g(with) h(tables.) 396 1241 y(Select) g(one) f +(app) n(,) h(and) f(enter) f(a) i(tar) o(ge) n(t) g(v) o(ersion) n(.) g +(Upon) e(submission) h(of) f(the) i(for) n(m:) p Black +Fa 396 1474 a(\225) p Black Fg 81 w(All) g(applicatio) n(n) g(tables) f +(are) g(drop) n(ped.) p Black Fa 396 1623 a(\225) p Black +Fg 81 w(tables_baselin) n(e.inc.ph) n(p) h(is) g(loaded) n(.) p +Black Fa 396 1773 a(\225) p Black Fg 81 w(test_data.inc) n(.php) e(is) j +(loade) n(d) p Black Fa 396 1922 a(\225) p Black Fg 81 +w(tables_up) n(date.inc.p) n(hp) e(is) h(loaded) n(.) p +Black Fa 396 2072 a(\225) p Black Fg 81 w(a) g(full) f(applica) n(tion) +g(upgra) n(de) h(test) g(be) o(g) n(ins.) 396 2221 y(This) g(will) g +(gi) n(v) o(e) e(a) i(LO) m(T) e(of) h(deb) n(ugg) n(ing) g(outpu) n +(t.) h(Depen) n(ding) f(on) f(your) g(database,) h(the) g(proce) n(ss) i +(may) d(tak) o(e) i(quite) 396 2329 y(a) o(while.) f(This) g(tool) g +(should) f(be) h(considered) f(as) i(a) f(destructi) n(v) o(e) f(test) i +(of) f(the) g(full) g(upgra) n(de) h(c) o(ycle) n(.) g(If) f(the) g +(upgr) n(ade) 396 2437 y(process) g(is) h(successful,) f(you) f(can) h +(then) g(check) f(the) h(loaded) g(test_data) f(to) i(see) g(that) f +(it) h(is) g(still) g(in) g(place) e(as) i(e) o(xpected) 396 +2545 y(after) f(all) h(the) f(table) g(modi\002catio) n(ns,) h(etc.) f +(If) g(not,) g(it) h(should) e(be) h(clear) g(where) g(the) g(error) f +(has) h(occurr) n(ed.) g(Look) f(for) h(the) 396 2653 +y(usual) g(INV) -11 b(ALID) 20 b(SQL) g(w) o(arning) n(s,) h(among) e +(others.) p Ff -2 3105 a(3.3.) 34 b(tools) g(subdirec) r(tor) q(y) p +Fd 396 3393 a(3.3.1.) 28 b(some) g(utilities) g(f) n(or) f(sql) h +(\002le) f(con) l(ver) o(sion,) h(etc.) p Fg 396 3550 +a(In) 20 b(the) g(tools) h(directo) n(ry) f(unde) n(r) h(setup3,) e +(there) h(should) f(be) h(at) h(least) g(a) f(couple) g(of) f(hopef) n +(ully) h(handy) f(perl) h(or) g(shell) 396 3658 y(scripts.) h(These) f +(are) g(for) f(runn) n(ing) h(on) g(the) g(comman) n(dline) g(only) -5 +b(,) 19 b(and) g(might) h(apply) f(to) h(con) m(v) o(e) n(rting) g(SQL) +g(\002les) h(into) 396 3766 y(lang) f(\002les,) g(etc.) g(The) o(y) f +(are) h(not) g(e) o(xp) n(ected) g(to) g(be) g(perfec) n(t,) h(b) n(ut) +f(migh) n(t) h(of) n(fer) e(some) h(assistance) g(or) g(ideas) g(for) f +(addition) n(al) 396 3874 y(utilities.) i(Use) g(these) f(at) h(you) n +(r) g(o) n(wn) e(risk) i(or) f(ben) n(e\002t.) p Black +Fe 3800 5278 a(12) p Black 90 rotate dyy eop +%%Page: 13 13 +13 12 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fh -2 601 a(4.) 39 +b(The) g(install/u) n(pgrade) g(pr) m(oce) n(ss) p Ff +-2 929 a(4.1.) 34 b(Over) q(v) r(ie) n(w) p Fd 396 1216 +a(4.1.1.) 28 b(Setup) h(internal) e(upgrade) h(functions) p +Fg 396 1374 a(Setup) 20 b(uses) h(a) f(common) f(set) i(of) f(fun) n +(ctions) g(for) g(ne) n(w) g(installs) h(and) f(upg) n(rades.) g(These) +g(are) g(implemen) n(ted) g(as) 396 1482 y(multi-pass) g(loops.) f(F) o +(or) h(a) h(single) f(applicatio) n(n) h(install) f(or) g(upgr) n(ade,) +g(a) h(single) f(pass) h(is) g(don) n(e.) g(F) o(or) e(multiple) 396 +1590 y(application) g(installs) i(or) f(upg) n(rades,) g(multiple) g +(passes) h(are) f(don) n(e) h(autom) n(atically) -5 b(.) 20 +b(The) g(ord) n(er) h(of) f(install) g(in) h(a) f(mass) 396 +1697 y(install) h(or) f(upg) n(rade) f(is) i(determine) n(d) f(by) g +(applicatio) n(n) h(dep) n(endencie) n(s.) g(The) f(other) f(determ) n +(ining) h(f) o(actor) f(is) i(the) f(orde) n(r) h(in) 396 +1805 y(which) f(the) g(application) f(directo) n(ries) i(and) f +(setup.in) n(c.php) f(\002les) i(are) f(read) g(from) f(the) h +(\002lesystem.) p Ff -2 2258 a(4.2.) 34 b(Ne) n(w) h(installs) p +Fd 396 2545 a(4.2.1.) 28 b(Detect) r(ion) p Fg 396 2703 +a(Each) 20 b(run) f(of) h(inde) o(x.) n(php) g(or) g(app) n +(lications.php) f(in) h(setup3) g(\002rst) h(run) n(s) g(a) g(set) g +(of) f(detection) f(routin) n(es.) i(These) f(read) g(the) 396 +2811 y(data) g(from) f(each) h(setup.inc.p) n(hp) g(\002le,) g(and) g +(from) f(the) h('application) n(s') h(or) f('ph) n(pgw_ap) n +(plications') f(table) i(as) 396 2919 y(appro) n(priate,) f(and) f +(only) h(if) g(one) g(of) g(these) g(tables) h(e) o(xists.) f(This) g +(data) h(is) g(parsed) e(into) h(the) g($setup_in) n(fo) g(array) -5 +b(.) 19 b(In) h(this) 396 3027 y(case,) h(this) f(array) g(conta) n +(ins) h(inform) n(ation) f(abou) n(t) h(all) g(applicatio) n(ns.) g +(Based) f(on) g(the) g(inform) n(ation) g(gathe) n(red,) g(a) h(status) +396 3135 y(\003ag) g(is) g(set) g(to) f(one) g(of) g(the) g(follo) n(w) +n(ing) g(v) n(alues:) p Black Fa 396 3367 a(\225) p Black +Fg 81 w(U) h(-) f(Upgrad) n(e) h(requ) n(ired/a) n(v) n(ailab) n(le) p +Black Fa 396 3517 a(\225) p Black Fg 81 w(R) g(-) g(upg) n(rade) f(in) g +(pRogress) p Black Fa 396 3666 a(\225) p Black Fg 81 +w(C) h(-) g(upg) n(rade) f(Completed) f(successfully) p +Black Fa 396 3815 a(\225) p Black Fg 81 w(D) i(-) f(Depend) n(enc) o(y) +g(f) o(ailure) p Black Fa 396 3965 a(\225) p Black Fg +81 w(F) h(-) f(upgra) n(de) h(F) o(ailed) p Black Fa +396 4114 a(\225) p Black Fg 81 w(V) g(-) f(V) -9 b(ersion) 20 +b(mismatch) f(at) i(end) e(of) h(upgra) n(de) p Black +Fa 396 4264 a(\225) p Black Fg 81 w(M) h(-) f(Missing) g(\002les) h(at) +g(start) g(of) f(upg) n(rade) g(\(Not) g(used,) g(pro) n(posed) g(only) +n(\)) 396 4413 y(Using) g(this) h(infor) n(mation,) f(the) g(setup) g +(logic) g(in) g(inde) o(x) n(.php) f(determin) n(es) i(what) f(mode) g +(we) g(are) g(in.) g(inde) o(x.) n(php) g(is) h(not) 396 +4521 y(capable) f(of) f(being) h(selecti) n(v) o(e) g(abou) n(t) h +(which) f(app) n(lication) g(it) h(foun) n(d) g(as) f(being) g(out) g +(of) f(sync.) h(It) h(is) g(designe) n(d) g(only) e(for) 396 +4629 y('Simple) h(Applicatio) n(n) h(Manag) n(ement',) e(which) h(is) h +(Step) f(1) h(of) f(the) g(setup) g(proc) n(ess.) h(F) o(or) f(more) g +(selecti) n(v) o(e) f(application) 396 4737 y(manipu) n(lation,) h(use) +g(application) n(s.php.) f(inde) o(x.) n(php) h(then) f(tells) j(the) e +(user) g(that) g(1\)) g(their) g(applicatio) n(ns) h(are) f(curren) n +(t) h(2\)) 396 4845 y(some) f(of) g(their) g(application) n(s) h(are) f +(out) g(of) g(sync) g(3\)) g(no) g(db) f(e) o(xists,) i(etc.) f(F) o +(or) g(a) h(ne) n(w) f(install,) g(all) h(applicatio) n(ns) g(will) g +(be) p Black Fe 3800 5278 a(13) p Black 90 rotate dyy +eop +%%Page: 14 14 +14 13 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(out) h(of) g(sync,) g +(since) g(there) g(is) h(not) f(e) n(v) o(en) f(an) h('php) n(gw_app) n +(lications') g(table) g(in) g(the) h(datab) n(ase) g(to) g(tell) f +(setup) g(what) h(the) 396 687 y(status) g(is) g(for) f(an) o(y) f +(application) n(.) p Fd 396 1024 a(4.2.2.) 28 b(Selec) r(tion) p +Fg 396 1182 a(There) 20 b(is) h(no) f(selection) f(for) h(applicatio) n +(n) h(installs) g(in) f('ne) n(w) g(install') g(mode.) f(All) i(phy) n +(sically) g(presen) n(t) g(application) n(s) 396 1290 +y(will) g(be) f(installed,) g(or) g(at) h(least) g(attempted) n(.) p +Fd 396 1627 a(4.2.3.) 28 b(Installation) p Fg 396 1784 +a(Once) 20 b(the) g(setup) g(user) g(clicks) h(the) f(magic) g(b) n +(utton) f(to) h(install) h(all) g(applicatio) n(ns,) g(the) f(follo) n +(win) n(g) g(occurs:) p Black Fa 396 2017 a(\225) p Black +Fg 81 w(The) g(setup_in) n(fo) g(array) f(is) j(passed) e(to) g(the) g +(process_p) n(ass\(\)) h(fun) n(ction,) f(using) g(a) g(method) n(='ne) +n(w') p Black Fa 396 2166 a(\225) p Black Fg 81 w(Application) n(s) h +(whose) f(status) h(\003ag='U') e(\(API) h(on) g(\002rst) h(pass\)) f +(are) h(then) e(handed) g(of) n(f) g(to) i(the) f(proc) n(ess_curren) n +(t\(\)) 479 2274 y(functio) n(n.) h(This) f(hand) n(les) h(inclusion) e +(and) h(installation) g(of) g(the) g(applicatio) n(n') -5 +b(s) 21 b(tables_cur) n(rent.inc.) n(php) f(\002le.) p +Black Fa 396 2424 a(\225) p Black Fg 81 w(The) g(applicatio) n(n) h(is) +g(re) o(g) n(istered) g(as) f(a) h(ne) n(w) f(application) f(in) h(the) +g('phpg) n(w_app) n(lications') g(table.) g(If) g(for) g(some) 479 +2532 y(reason) f(there) h(is) h(old) e(data) h(in) g(this) g(table) g +(for) f(this) i(app) n(lication,) f(it) g(will) h(be) f(upd) n(ated) g +(instead.) f(Its) i(hoo) n(ks,) f(if) g(an) o(y) -5 b(,) 19 +b(are) 479 2640 y(re) o(gistered) g(in) h(the) h('ph) n(pgw_h) n(ooks') +f(table.) p Black Fa 396 2789 a(\225) p Black Fg 81 w(Ne) o(xt,) g +(this) g(array) g(is) h(passed) f(to) g(the) g(process_d) n(ef) o +(ault_reco) n(rds\(\)) g(fun) n(ction.) g(If) g(this) h(\002le) f(is) i +(presen) n(t) f(in) f(the) h(curr) n(ent) 479 2897 y(application) n(') +-5 b(s) 21 b(setup) f(directory) -7 b(,) 20 b(the) g(queries) g(here) g +(are) g(run) f(to) h(install) h(the) f(data) g(to) h(the) f(applicatio) +n(n') -5 b(s) 21 b(table\(s\).) p Black Fa 396 3046 a(\225) p +Black Fg 81 w(The) f(abo) o(v) m(e) g(is) i(repe) n(ated) e(until) h +(all) f(application) f(status) i(\003ags) f(equal) g('C'.) g(Ho) n(we) n +(v) o(e) n(r) m(,) g(if) h(an) f(applicatio) n(n) h(install) 479 +3154 y(f) o(ailed) e(for) f(some) h(reason) n(,) h(it) f(will) h(then) e +(be) h(skipped) e(on) i(the) g(ne) o(x) n(t) h(pass.) f(This) g(k) o +(eeps) f(the) h(loop) f(from) g(runn) n(ing) h(a) o(w) o(ay) -5 +b(.) p Ff -2 3607 a(4.3.) 34 b(Upgrades) p Fd 396 3894 +a(4.3.1.) 28 b(Detect) r(ion) p Fg 396 4052 a(Only) 20 +b(an) g(API) h(v) o(er) n(sion) g(mismatch) e(will) i(trigger) e(an) h +(automated) f(reque) n(st) j(for) d(the) h(user) g(to) h(upg) n(rade) f +(their) g(install.) 396 4160 y(Once) g(the) g(api) h(is) g(curr) n +(ent,) f(the) o(y) g(can) g(mo) o(v) m(e) h(on) e(to) i(applica) n +(tions.php) e(for) h(mor) n(e) h('Adv) n(a) n(nced) f(Applicatio) n(n) +396 4268 y(Managem) n(ent',) g(which) g(is) h(Step) f(4) g(of) g(the) g +(setup) g(process.) g(Ho) n(we) n(v) o(e) n(r) m(,) g(if) g(the) h(API) +f(is) h(out) f(of) g(sync,) g(clicking) 396 4376 y('Upgra) n(de') g(in) +h(inde) m(x.php) e(will) i(also) f(attempt) g(to) g(upgra) n(de) h +(other) e(applicatio) n(ns) i(which) f(may) f(be) h(out) g(of) g(sync,) +g(as) 396 4484 y(well.) h(As) g(the) f(php) n(gw) o(api) g(continu) n +(es) h(to) g(stabilize,) f(it) h(is) g(felt) f(that) h(this) f(method) f +(of) h(upgr) n(ading) f(will) i(become) e(less) j(and) 396 +4592 y(less) g(comm) n(on.) p Black Fe 3800 5278 a(14) p +Black 90 rotate dyy eop +%%Page: 15 15 +15 14 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fd 396 579 a(4.3.2.) 28 +b(Selec) r(tion) p Fg 396 737 a(W) m(ithin) 20 b(application) n(s.php,) +f(a) i(color) n(-c) n(oded) f(matrix) f(of) h(applicatio) n(n) h +(status) g(and) e(actions) h(is) h(displayed.) e(Depend) n(ing) 396 +845 y(on) h(the) g(status) h(\003ag) f(of) g(each) g(application) n(,) h +(certain) e(actions) h(will) h(be) f(either) g(enabled) f(or) h +(disabled.) f(These) h(actions) 396 953 y(include) f('install',) h +('upg) n(rade',) f(') l(remo) o(v) m(e'.) h(If) g(someth) n(ing) g(is) h +(v) o(ery) f(wron) n(g) g(with) h(pre) n(v) n(ious) f(attempts) g(to) h +(install) g(or) 396 1060 y(upgr) n(ade) f(an) h(app) n(lication,) f +(anoth) n(er) h(colum) n(n) g(called) f(') l(reso) n(lution') g(will) g +(then) g(display) g(a) g(link.) g(This) g(link) g(will) h(display) 396 +1168 y(addition) n(al) f(inform) n(ation) f(which) g(w) o(ould) g(be) g +(helpfu) n(l) h(for) f(determ) n(ining) g(ho) n(w) g(to) g(resolv) o(e) +g(the) g(prob) n(lem.) h(Assuming) e(all) 396 1276 y(is) j(well,) g +(the) f(user) g(can) g(select) h(applicatio) n(ns) g(requ) n(iring) f +(upgr) n(ade) g(from) f(this) i(list.) g(Once) f(selected,) g(the) o(y) +f(submit) h(the) 396 1384 y(form.) f(This) i(run) n(s) g(the) f(follo) n +(w) g(three) g(rou) n(tines) h(in) f(order) n(:) p Black +Fa 396 1617 a(\225) p Black Fg 81 w(remo) o(v) m(e) p +Black Fa 396 1766 a(\225) p Black Fg 81 w(install) p +Black Fa 396 1916 a(\225) p Black Fg 81 w(upgr) n(ade) p +Fd 396 2253 a(4.3.3.) 28 b(Upgrade) p Fg 396 2410 a(The) 20 +b(idea) g(here) g(is) h(that) f(multiple) g(actions) g(can) g(be) g +(selected) g(and) g(run) f(in) h(order) f(in) i(one) e(click.) h(In) g +(an) o(y) g(case,) g(once) f(the) o(y) 396 2518 y(select) i(an) f +(application) f(for) g(upgra) n(de,) h(the) h(follo) l(wing) f(occurs:) +p Black Fa 396 2751 a(\225) p Black Fg 81 w(A) h(stripped) e(do) n(wn) g +(v) o(ersion) g(of) h(the) g(setup_inf) n(o) g(array) g(is) h(passed) f +(to) g(the) h(pro) n(cess_upgr) n(ade\(\)) e(function) n(.) i(This) 479 +2859 y(array) f(con) n(tains) h(only) e(the) i(info) n(rmation) e(for) h +(the) g(selected) g(application) p Black Fa 396 3008 +a(\225) p Black Fg 81 w(W) m(ithin) g(proce) n(ss_upgrad) n(e\(\),) g +(the) g(tables_baselin) n(e.inc.ph) n(p) h(\002le) f(for) g(the) g +(application) f(is) i(loaded) n(.) p Black Fa 396 3158 +a(\225) p Black Fg 81 w(The) f(tables_up) n(date.inc.) n(php) g(\002le) +h(for) e(the) h(application) f(is) i(loaded) p Black +Fa 396 3307 a(\225) p Black Fg 81 w(The) f(conten) n(ts) h(of) f(the) g +(test) i(array) d(is) i(used) f(to) g(loop) g(thro) n(ugh) g(the) g +(entire) g(list) h(of) f(upg) n(rade) g(functio) n(ns) h(for) e(the) 479 +3415 y(application) n(.) i(The) f(app) n(lication') -5 +b(s) 21 b(uniq) n(ue) f(function) f(names) h(are) g(reb) n(uilt,) f +(then) h(run.) p Black Fa 396 3564 a(\225) p Black Fg +81 w(When) g(the) g(curren) n(tv) o(er) g(\(installed\)) f(matches) h +(the) g(v) o(ersion) f(\(a) n(v) n(ailable\),) g(proce) n(ss_upgrad) n +(e\(\)) h(e) o(xits,) g(setting) g(the) 479 3672 y(status) h(\003ag) f +(for) g(the) g(app) g(to) g('C'.) p Black Fa 396 3822 +a(\225) p Black Fg 81 w(Just) h(prior) e(to) h(e) o(xiting,) f(the) i +(app) n(lication) f(and) g(its) h(hook) n(s) g(are) f(updated) f(into) h +(the) g('php) n(gw_app) n(lications') g(and) 479 3930 +y('php) n(gw_ho) n(oks') g(tables.) p Ff -2 4382 a(4.4.) 34 +b(Unins) r(tallation/Re) r(mo) n(v) n(al) p Fd 396 4670 +a(4.4.1.) 28 b(Selec) r(tion) p Fg 396 4827 a(Selecti) n(v) o(e) 20 +b(remo) m(v) n(al) f(of) h(an) f(application) g(is) h(done) f(via) g +(application) n(s.php,) g(in) h(a) g(mann) n(er) g(similar) g(to) g +(the) f(method) f(abo) o(v) o(e) p Black Fe 3800 5278 +a(15) p Black 90 rotate dyy eop +%%Page: 16 16 +16 15 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fg 396 579 a(for) h(upg) n +(rades.) p Fd 396 916 a(4.4.2.) 28 b(Uninstallation) p +Fg 396 1074 a(Once) 20 b(an) g(application) f(is) i(selected) f(for) g +(remo) m(v) n(al:) p Black Fa 396 1306 a(\225) p Black +Fg 81 w(A) h(stripped) e(do) n(wn) g(v) o(ersion) g(of) h(the) g +(setup_inf) n(o) g(array) g(is) h(passed) f(to) g(the) h(pro) n +(cess_drop) n(tables\(\)) f(func) n(tion.) g(This) 479 +1414 y(functio) n(n) h(remo) m(v) o(es) f(all) h(of) f(the) g +(application) n(') -5 b(s) 21 b(de\002ned) e(tables,) i(b) n(ut) f +(only) f(after) h(\002rst) h(checkin) n(g) f(to) h(see) g(if) f(the) g +(tables) 479 1522 y(are) g(there.) g(In) g(this) h(w) o(ay) -5 +b(,) 19 b(we) i(attempt) e(to) i(cut) f(do) n(wn) f(on) h(the) g(numb) n +(er) h(of) e(errors) h(sent) g(to) h(the) f(bro) n(w) n(ser) -5 +b(.) p Black Fa 396 1671 a(\225) p Black Fg 81 w(The) 20 +b(applicatio) n(n') -5 b(s) 21 b(hook) n(s) g(are) f(dere) o(g) n +(istered) g(\(remo) o(v) m(ed) g(from) f('php) n(gw_ho) n(oks'\).) p +Black Fa 396 1821 a(\225) p Black Fg 81 w(The) h(applicatio) n(n) h +(itself) f(is) i(dere) m(gistered) e(\(rem) n(o) o(v) o(ed) f(from) g +('php) n(gw_app) n(lications'\).) p Fh -2 2406 a(5.) 39 +b(Ca) n(veats) p Ff -2 2734 a(5.1.) 34 b(Must) g(see) g(inf) n(o) p +Fd 396 3021 a(5.1.1.) 28 b(A) m(uto) g(\002elds) p Fg +396 3179 a(F) o(or) 20 b(auto) g(type) g(\002elds,) g(schema_) n(proc) g +(creates) g(a) h(sequen) n(ce) g(autom) n(atically) f(based) g(on) g +(the) g(table) g(name) g(for) 396 3287 y(databases) g(that) f(require) g +(sequen) n(ces.) h(In) f(the) h(case) g(of) f(postgresql,) g(the) g +(limit) h(for) f(this) i(name) e(based) g(on) g(our) g(tests) i(is) f +(31) 396 3395 y(character) n(s.) h(The) f(schema_p) n(roc) g(form) n +(at) h(is:) p Fc 396 3575 a($sSequenceS) n(QL) 45 b(=) g(sprintf) n +(\("CREATE) f(SEQUENCE) f(seq_\045s",) h($sTableNa) n(me\);) p +Fg 396 3863 a(This) 21 b(limits) g(the) f(maxim) n(um) g(length) g(for) +f(a) i(tablenam) n(e) g(to) f(27) g(charac) n(ters.) h(Based) g(on) e +(the) h(tablename) f(standard) h(in) 396 3971 y(phpg) n(w) h(of) f +('php) n(gw_table) n(name',) f(you) h(are) g(furth) n(er) h(limited) f +(to) g(21) g(chara) n(cters) h(in) f(which) g(to) g(describe) g(you) n +(r) h(table.) 396 4079 y(Y) -9 b(ou) 20 b(will) h(need) e(to) i(be) f +(less) h(descripti) n(v) m(e) g(in) f(some) g(cases,) h(e.g.) e(use) i +('php) n(gw_widg) n(et_cats') f(instead) g(of) 396 4187 +y('php) n(gw_widg) n(et_info_) n(cate) o(gor) n(ies'.) 396 +4336 y(T) -7 b(o) 21 b(maintain) e(comp) n(atibility) i(with) f(MySQL) g +(3.22) n(.X,) g(please) h(al) o(w) o(ays) f(add) g(\223'nu) n(llable') g +(=>) h(F) o(alse\224) f(to) h(you) n(r) g(\002eld) 396 +4444 y(spec) g(for) e(an) h(auto) g(\002eld.) g(This) g(and) g(prob) n +(ably) g(older) f(v) o(ersions) h(of) f(MySQL) h(require) f(that) i +(speci\002cation) e(within) h(the) 396 4552 y(SQL) h(for) e(a) i +(\002eld) f(that) h(will) g(also) f(be) g(an) g(inde) o(x) f(or) h +(uniqu) n(e) h(\002eld,) f(which) g(for) f(our) h(uses) g(should) g +(typically) f(be) h(true) g(for) 396 4660 y(an) g(auto) g(\002eld.) g +(MySQL) g(3.23) n(.X) h(and) f(PostgreSQL) f(do) h(not) g(ha) n(v) o(e) +f(this) i(issue.) p Black Fe 3798 5278 a(16) p Black +90 rotate dyy eop +%%Page: 17 17 +17 16 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Fd 396 579 a(5.1.2.) 28 +b(Default) h(0) p Fg 396 737 a(F) o(or) 20 b(int) h(\002elds,) f(a) h +(def) o(au) n(lt) g(of) f(0) g(is) h(not) f(assumed.) g(Only) f(some) h +(databases) g(will) h(set) g(this) g(def) o(ault) e(for) h(you,) f +(MySQL) 396 845 y(being) g(one.) h(Y) -9 b(ou) 19 b(will) i(need) f(to) +g(e) o(xplicitly) f(de\002ne) h(this) h(def) o(au) n(lt) g(in) g(the) f +(table) g(de\002nition) n(.) h(Also,) f(for) g(auto) f(\002elds,) i(do) +396 953 y(not) f(enter) g(a) g(def) o(ault,) g(since) g(the) g +(resulting) g(SQL) g(query) f(w) o(ould) g(f) o(ail) i(on) f(man) o(y) f +(RDBMS.) p Black Fe 3797 5278 a(17) p Black 90 rotate +dyy eop +%%Page: 18 18 +18 17 bop Black 0 TeXcolorgray Black Fe 3063 67 a(phpGr) l(ou) n(pW) -8 +b(ar) m(e) 21 b(Setup) e(III) p Black Black 3800 5278 +a(18) p Black 90 rotate dyy eop %%Trailer end userdict /end-hook known{end-hook}if diff --git a/setup/doc/setup3.sgml b/setup/doc/setup3.sgml index 84dbb02a35..9790059e35 100644 --- a/setup/doc/setup3.sgml +++ b/setup/doc/setup3.sgml @@ -807,6 +807,9 @@ This limits the maximum length for a tablename to 27 characters. Based on the tablename standard in phpgw of 'phpgw_tablename', you are further limited to 21 characters in which to describe your table. You will need to be less descriptive in some cases, e.g. use 'phpgw_widget_cats' instead of 'phpgw_widget_info_categories'. + + To maintain compatibility with MySQL 3.22.X, please always add “'nullable' => False” to your field spec for an auto field. This and probably older versions of MySQL require that specification within the SQL for a field that will also be an index or unique field, which for our uses should typically be true for an auto field. MySQL 3.23.X and PostgreSQL do not have this issue. + diff --git a/setup/doc/setup3.txt b/setup/doc/setup3.txt index 13a18af9f0..ca2f9f22ba 100644 --- a/setup/doc/setup3.txt +++ b/setup/doc/setup3.txt @@ -882,6 +882,14 @@ you are further limited to 21 characters in which to describe your table. You will need to be less descriptive in some cases, e.g. use 'phpgw_widget_cats' instead of 'phpgw_widget_info_categories'. +To maintain compatibility with MySQL 3.22.X, please always +add "'nullable' => False" to +your field spec for an auto field. This and probably older +versions of MySQL require that specification within the +SQL for a field that will also be an index or unique field, +which for our uses should typically be true for an auto +field. MySQL 3.23.X and PostgreSQL do not have this issue. + 5.1.2 Default 0 For int fields, a default of 0 is not assumed. Only some