diff --git a/setup/doc/setup3.dvi b/setup/doc/setup3.dvi
index b8c6db0efd..b8c224718e 100644
Binary files a/setup/doc/setup3.dvi and b/setup/doc/setup3.dvi differ
diff --git a/setup/doc/setup3.lyx b/setup/doc/setup3.lyx
index 12de302195..e1cc5353b1 100644
--- a/setup/doc/setup3.lyx
+++ b/setup/doc/setup3.lyx
@@ -1339,6 +1339,21 @@ This limits the maximum length for a tablename to 27 characters.
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'.
+\layout Standard
+
+To maintain compatibility with MySQL 3.22.X, please always add
+\begin_inset Quotes eld
+\end_inset
+
+'nullable' => 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 02c2835b90..0771fd8c8b 100644
Binary files a/setup/doc/setup3.pdf and b/setup/doc/setup3.pdf differ
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