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