From 7b6d5e7a6e421a79cc182b48fe8297f0fa60c350 Mon Sep 17 00:00:00 2001 From: Miles Lott Date: Wed, 20 Mar 2002 00:42:52 +0000 Subject: [PATCH] Update docs to include description of new checkbox/radio capability --- admin/doc/adminconfig.dvi | Bin 11588 -> 8304 bytes admin/doc/adminconfig.lyx | 34 +++- admin/doc/adminconfig.pdf | Bin 19265 -> 10473 bytes admin/doc/adminconfig.ps | 391 +++++++++++++++++-------------------- admin/doc/adminconfig.sgml | 14 +- admin/doc/adminconfig.txt | 150 ++++++++++++-- 6 files changed, 363 insertions(+), 226 deletions(-) diff --git a/admin/doc/adminconfig.dvi b/admin/doc/adminconfig.dvi index 53c4225c7e9832dec4b655957345a38a0d491d53..35dbcc1a7d9d8403d00fab62a02a234732330f9b 100644 GIT binary patch literal 8304 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 ae&UkP;d}H8*8f)hy`G-ooxOkIfByp~!-d`e literal 11588 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 XTc_Et_GZ7S`|Dh;@Xtg4NuS>VdtRTY diff --git a/admin/doc/adminconfig.lyx b/admin/doc/adminconfig.lyx index b442d4f0ca..889ad7c6ae 100644 --- a/admin/doc/adminconfig.lyx +++ b/admin/doc/adminconfig.lyx @@ -69,6 +69,10 @@ and the following special types: \layout Enumerate {hook_XXX} - Calls a function named XXX (will be discussed later). +\layout Enumerate + +{checked_XXX+YYY} - Handles checkbox/radio values set to YYY or '' (will + be discussed later). \layout Standard Following is an example from the addressbook application: @@ -175,7 +179,35 @@ Let's take a look at part of the preferences/default/config.tpl: \layout Standard Here, we are adding a new element, {hook_country_set}. - This brings up the next file we will need to parse this value... + This brings up the next file we will need to parse this value, hook_config.inc.ph +p. + But first, let's look at the last template type, 'checked': +\layout Code + +{lang_no} +\layout Code + +{lang_yes} +\layout Standard + +We want to check the value of the setting 'enable_remote_addressbook'. + The value could be '' or 'True'. + We use the '+' character to isolate the config name from the check value. + If the value is empty or unset in the phpgw_config table, {checked_enable_remot +e_addressbook+} is replaced with ' checked'. + If the value is 'True',{checked_enable_remote_addressbook+True} is replaced + with ' checked'. + Note that the part after the '+' character matches what is in the value= +\begin_inset Quotes erd +\end_inset + +XXX +\begin_inset Quotes erd +\end_inset + + part in the html for this form element. \layout Subsection hook_config.inc.php (optional) diff --git a/admin/doc/adminconfig.pdf b/admin/doc/adminconfig.pdf index 34dd19a17f904392e850bfade665641ae2ed5c9c..7658da426ec3ca2d19d1d9ec995f017665072713 100644 GIT binary patch delta 8897 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�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 B=+*!L diff --git a/admin/doc/adminconfig.ps b/admin/doc/adminconfig.ps index 3ff9c89b06..531a8497fd 100644 --- a/admin/doc/adminconfig.ps +++ b/admin/doc/adminconfig.ps @@ -1,15 +1,15 @@ %!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: adminconfig.dvi -%%Pages: 6 +%%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 -%%DocumentFonts: Helvetica-Bold Times-Roman Courier Times-Italic +%%DocumentFonts: Times-Roman %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -t letter -o adminconfig.ps adminconfig.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2001.12.22:1805 +%DVIPSSource: TeX output 2002.03.19:1838 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -314,28 +314,13 @@ setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin 40258431 52099146 1000 600 600 (adminconfig.dvi) -@start /Fa 138[42 2[32 1[42 42 42 60 3[23 42 42 1[37 -42 37 1[42 9[69 15[60 16[42 42 42 42 42 42 1[23 21 43[42 -2[{TeXBase1Encoding ReEncodeFont}24 83.022 /Times-Italic -rf /Fb 107[45 22[45 1[45 1[45 45 45 45 45 45 45 45 1[45 -45 45 45 45 45 1[45 45 45 45 45 45 45 45 45 1[45 1[45 -45 45 5[45 45 45 2[45 45 45 1[45 2[45 1[45 45 45 45 45 -45 45 2[45 45 45 45 45 7[45 1[45 45 45 45 45 1[45 45 -45 45 45 1[45 1[45 45 33[{TeXBase1Encoding ReEncodeFont}64 -74.7198 /Courier rf /Fc 137[66 73 40 1[47 73 73 73 73 -1[33 66 1[33 73 73 1[66 73 66 1[66 1[66 43[66 66 66 2[33 -4[40 40 37[73 2[{TeXBase1Encoding ReEncodeFont}25 119.552 -/Helvetica-Bold rf /Fd 140[80 6[40 2[40 3[80 30[88 20[80 -2[40 46[{TeXBase1Encoding ReEncodeFont}7 143.462 /Helvetica-Bold -rf /Fe 107[37 22[40 1[40 1[42 42 60 42 42 23 32 28 1[42 -42 42 65 23 42 1[23 42 42 28 37 42 37 42 37 1[42 1[28 -1[28 2[60 78 2[51 46 55 1[46 60 60 74 51 2[28 60 60 46 -1[60 55 55 60 76 1[47 1[47 1[23 5[42 42 42 42 42 23 21 -28 21 2[28 28 28 2[42 32[46 46 2[{TeXBase1Encoding ReEncodeFont}66 -83.022 /Times-Roman rf /Ff 138[126 2[80 1[126 126 126 -184 3[57 126 126 1[115 126 115 1[115 9[195 15[161 23[57 -57 43[126 2[{TeXBase1Encoding ReEncodeFont}18 206.584 -/Helvetica-Bold rf end +@start /Fa 107[37 22[40 1[40 1[42 42 60 42 42 23 32 28 +42 42 42 42 65 23 42 1[23 42 42 28 37 42 37 42 37 1[42 +1[28 23 28 1[60 60 78 1[60 51 46 55 1[46 60 60 74 51 +2[28 60 60 46 51 60 55 55 60 76 1[47 47 47 23 23 7[42 +42 42 23 21 28 21 47 42 28 28 28 65 1[42 1[34 28 29[46 +46 2[{TeXBase1Encoding ReEncodeFont}76 83.022 /Times-Roman +rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi @@ -346,188 +331,180 @@ letter %%EndSetup %%Page: 1 1 -1 0 bop Black 0 TeXcolorgray Black Black 505 647 a Ff(phpGr)l(oupW)-8 -b(are)58 b(admin/con\002g.php)695 879 y Fe(A)21 b(brief)e(introduction) -f(to)i(writing)g(hooks)f(and)h(templates)g(for)f(an)o(y)h(application)e -(to)j(use)f(this)695 987 y(admin)f(interf)o(ace,)h(by)695 -1136 y(Miles)h(Lott)f()15 -b(Dec)20 b(22,)g(2001.)-2 1854 y Fd(1.)39 b(Files)-2 -2182 y Fc(1.1.)34 b(con\002g.tpl)h(\(required\))396 2350 -y Fe(In)20 b(your)f(application/templates/def)o(ault)e(directory)-5 -b(,)18 b(create)i(a)g(ne)n(w)g(template)g(\002le)h(named)e -('con\002g.tpl'.)f(This)i(will)396 2458 y(be)g(included)f(by)h -(con\002g.php)d(and)j(used)g(to)g(dra)o(w)g(the)g(page.)f(This)i -(template)e(should)h(include)f(a)h(POST)h(method)396 -2566 y(form.)e(The)h(follo)n(wing)f(template)g(tags)i(may)e(be)i(used:) -p Black 463 2798 a(1.)p Black 40 w({action_url})e(-)h(A)h(phpgw->link)c -(to)j(con\002g.php)e(will)j(be)f(inserted.)p Black 463 -2947 a(2.)p Black 40 w({title})h(-)f(This)h(will)g(be)f(parsed)f(to)i -(display)e('Site)i(Con\002guration'.)p Black 463 3097 -a(3.)p Black 40 w({th_bg},{th_te)o(xt},{ro)n(w_on)o(},{r)o(o)n(w_)o(of) -m(f})15 b(-)20 b(Replaced)g(with)g(the)g(current)f(theme)h(colors.)396 -3246 y(and)g(the)g(follo)n(wing)f(special)h(types:)p -Black 463 3479 a(1.)p Black 40 w({lang_XXX})f(-)i(Filled)f(with)h -(lang\('XXX'\).)p Black 463 3628 a(2.)p Black 40 w({v)n(alue_XXX})e(-)h -(Filled)h(with)f(the)g(current)f(v)n(alue)h(of)g(con\002g)f(item)h -('XXX'.)p Black 463 3778 a(3.)p Black 40 w({selected_XXX})g(-)g(set)h -(to)f(\224,)h(or)f(')g(selected')g(if)g(an)h(option)d(v)n(alue)i(is)h -(current.)p Black 463 3927 a(4.)p Black 40 w({hook_XXX})d(-)j(Calls)g -(a)g(function)d(named)h(XXX)i(\(will)f(be)h(discussed)f(later\).)396 -4077 y(F)o(ollo)n(wing)f(is)i(an)f(e)o(xample)f(from)g(the)h -(addressbook)e(application:)396 4257 y Fb()396 4354 y()441 4451 y()486 -4548 y( {title}<)o(/td>)441 -4645 y()i()486 4742 y( {error})441 -4840 y()p Black 3842 5278 a Fa(1)p Black eop -%%Page: 2 2 -2 1 bop Black 0 TeXcolorgray Black 2778 67 a Fa(phpGr)l(oupW)-8 -b(ar)m(e)19 b(admin/con\002g)o(.php)p Black 396 579 a -Fb()396 676 y()441 -773 y()486 870 y( )441 967 y()441 1065 y()486 1162 y( {lang_Addressbook}/{)o(lang_C)o(ontact)o(_Setti)o -(ngs}<)o(/b>)396 1259 y()441 1356 y()441 -1453 y()486 1550 y -({lang_Contact_application}:)486 1647 y()441 1745 y()396 -1842 y(...)396 2130 y Fe(Note)20 b(the)h(\002eldname,)e(ne)n -(wsettings[contact_application].)c(This)20 b(array)f(name)h(must)g(be)g -(used)g(for)g(the)g(form)f(v)n(alues.)396 2238 y(Ne)o(xt,)h(note)g(the) -g(v)n(alue)f(setting)i(for)e(this)i(form)e(element,)g({v)n -(alue_contact_application}.)c(This)20 b(indicates)g(that)h(we)396 -2346 y(w)o(ant)g(the)f(current)f(v)n(alue)g(of)h(the)g(con\002g)g -(setting,)g('contact_application',)c(to)k(be)g(set)h(and)f(displayed)f -(on)g(the)i(form.)396 2454 y(Lastly)-5 b(,)20 b(look)f(at)i(the)f -(template)g(element,)f({lang_Contact_application}.)d(Here,)j(the)i(v)n -(alue)e(from)g(the)i(lang)e(db)h(table)396 2561 y(will)h(be)f(inserted) -g(if)g(a)n(v)n(ailable.)396 2711 y(Let')-5 b(s)21 b(tak)o(e)f(a)h(look) -e(at)i(part)f(of)g(the)g(preferences/def)o(ault/con\002g.tpl:)441 -2891 y Fb()486 2988 y -({lang_Country_Selection})c -(\({lang_Text_Entry}/{lang_SelectBox}\):)486 -3085 y()531 3182 y()396 -3280 y({hook_country_set})531 3377 y()486 3474 -y()441 3571 y()396 3859 y Fe(Here,)20 b(we)h(are)f(adding)f -(a)h(ne)n(w)g(element,)f({hook_country_set}.)d(This)k(brings)f(up)h -(the)g(ne)o(xt)g(\002le)h(we)f(will)h(need)f(to)396 3967 -y(parse)g(this)h(v)n(alue...)-2 4337 y Fc(1.2.)34 b -(hook_con\002g.inc.php)j(\(optional\))396 4504 y Fe(At)21 -b(each)f(in)m(v)n(ocation)e(of)i(con\002g.php,)d(a)k(call)g(to)f(the)g -(common)f(class)i(function)d(hook_single\(\))f(is)k(made.)f(It)g -(attempts)396 4612 y(to)h(include)e(a)h(\002le,)h -(hook_con\002g.inc.php)14 b(as)21 b(a)g(set)g(of)f(code)f(for)h -(con\002g.php)d(to)k(use.)f(In)g(the)g(case)h(of)f(the)g(preferences) -396 4720 y(e)o(xample)f(abo)o(v)o(e,)f(using)i(hook_country_set,)15 -b(here)20 b(is)h(the)f(corresponding)d(function)i(in)396 -4828 y(preferences/inc/hook_con\002g.)o(inc.p)o(hp)o(:)p -Black 3842 5278 a Fa(2)p Black eop -%%Page: 3 3 -3 2 bop Black 0 TeXcolorgray Black 2778 67 a Fa(phpGr)l(oupW)-8 -b(ar)m(e)19 b(admin/con\002g)o(.php)p Black 396 579 a -Fb(function)44 b(country_set\($config\))396 676 y({)576 -773 y($country)f(=)i(array\()f('user_choice')e(=>)j('Users)f(Choice',)f -('force_select')f(=>)j('Force)f(Se-)396 870 y(lectbox')g(\);)576 -967 y(while)g(\(list)g(\($key,)f($value\))h(=)h(each)f(\($country\)\)) -576 1065 y({)755 1162 y(if)g(\($config['countrylist'])d(==)k($key\))755 -1259 y({)934 1356 y($selected)f(=)g(')h(selected';)755 -1453 y(})755 1550 y(else)755 1647 y({)934 1745 y($selected)f(=)g(\224;) -755 1842 y(})755 1939 y($descr)g(=)g(lang\($value\);)755 -2036 y($out)g(.=)h('')f(.)h($descr)f(.)g('')f(.)i("\\n";)576 -2133 y(})576 2230 y(return)e($out;)396 2327 y(})396 2615 -y Fe(Note)20 b(again)g(the)g(template)f(v)n(alue)h(we)h(used)e(earlier) -m(,)h({hook_country_set}.)15 b(This)20 b(causes)h(con\002g.php)c(to)k -(look)e(for)h(a)396 2723 y(function)f(named)g(country_set\(\).)e(Since) -j(we)h(included)d(the)j(\002le)g(with)f(this)h(function)d(via)i(the)g -(hook_single\(\))d(call,)396 2831 y(this)k(function)d(is)k(e)o(x)o -(ecuted.)c(It')-5 b(s)21 b(return)e(is)i(a)f(string,)g(and)g(the)g -(function)e(prints)i(nothing)f(itself.)-2 3201 y Fc(1.3.)34 -b(hook_con\002g_v)n(alidate)r(.inc.php)39 b(\(optional\))396 -3369 y Fe(Once)20 b(the)g(admin)g(clicks)g(the)g(submit)g(b)n(utton)f -(to)i(post)f(the)g(form,)f(we)i(can)f(optionally)e(v)n(alidate)i(their) -g(input)f(using)396 3477 y(one)h(or)g(man)o(y)f(dif)n(ferent)f -(functions.)h(This)h(is)h(done)e(by)h(\002rst)h(making)e(another)g -(call)h(to)h(hook_single\(\))c(in)j(the)g(API)396 3584 -y(common)f(class.)h(This)h(time,)f(the)g(name)g(con\002g_v)n(alidate)d -(is)k(used,)f(so)h(common)d(tries)j(to)f(include)396 -3692 y('application/inc/hook_con\002g_)o(v)n(a)o(lidate.in)o(c.p)o(hp)o -('.)396 3842 y(If)g(this)h(\002le)g(e)o(xists,)f(it)h(sets)g(a)g(v)n -(ar)f(to)g(tell)h(con\002g.php)d(it)i(w)o(as)i(found.)c(F)o(ollo)n -(wing)h(then)g(are)h(functions)f(named)g(after)396 3950 -y(each)h(con\002g)f(we)i(w)o(ant)f(to)h(v)n(alidate.)e(The)h(follo)n -(wing)e(e)o(xample)h(is)i(for)f(addressbook:)576 4130 -y Fb($GLOBALS['phpgw_info']['server']['fou)o(nd_val)o(idatio)o(n_hook)o -('])39 b(=)45 b(True;)576 4227 y(/*)f(Check)g(a)h(specific)e(setting.)h -(Name)g(must)g(match)g(the)g(setting.)g(*/)576 4324 y(function)f -(ldap_contact_context\($value=\224\))576 4421 y({)755 -4518 y(if\($value)g(==)i($GLOBALS['phpgw_info']['server']['ldap)o -(_conte)o(xt']\))755 4616 y({)934 4713 y($GLOBALS['config_error'])c(=)k -('Contact)e(context)h(for)g(ldap)g(must)g(be)h(differ-)396 -4810 y(ent)g(from)f(the)g(context)g(used)g(for)g(accounts';)p -Black 3842 5278 a Fa(3)p Black eop -%%Page: 4 4 -4 3 bop Black 0 TeXcolorgray Black 2778 67 a Fa(phpGr)l(oupW)-8 -b(ar)m(e)19 b(admin/con\002g)o(.php)p Black 755 579 a -Fb(})755 676 y(elseif\($value)43 b(==)h -($GLOBALS['phpgw_info']['server']['ldap_g)o(roup_)o(contex)o(t']\))755 -773 y({)934 870 y($GLOBALS['config_error'])d(=)k('Contact)e(context)h -(for)g(ldap)g(must)g(be)h(differ-)396 967 y(ent)g(from)f(the)g(context) -g(used)g(for)g(groups';)755 1065 y(})755 1162 y(else)755 -1259 y({)934 1356 y($GLOBALS['config_error'])d(=)k(\224;)755 -1453 y(})576 1550 y(})396 1838 y Fe(Here)20 b(we)f(created)g(a)h -(function)e(to)i(check)e(the)i(entered)e(v)n(alue)h(for)g(the)g -(con\002g)g(item,)g(ldap_contact_conte)o(xt.)c(W)-7 b(e)21 -b(w)o(ant)396 1946 y(to)g(mak)o(e)e(sure)h(the)h(admin)e(did)h(not)g -(set)h(this)f(v)n(alue)g(to)g(one)g(which)g(w)o(ould)f(con\003ict)h -(with)g(another)f(con\002g)g(item,)h(used)396 2054 y(for)g(accounts)f -(or)h(groups)f(in)h(phpGroupW)-7 b(are.)396 2204 y(con\002g.php)18 -b(calls)j(this)g(function,)d(sending)h(it)i(the)f(POST)-6 -b(ed)20 b(v)n(alue.)f(con\002g.php)f(continues,)h(adding)g(all)h(other) -g(con\002g)396 2312 y(items)h(from)e(the)h(POST)-6 b(ed)21 -b(v)n(alues.)396 2461 y(The)f(v)n(ariable)f($GLOB)m -(ALS['con\002g_error'])c(is)21 b(parsed)f(through)e(lang\(\),)h(then)g -(appended)f(to)j(the)f(local)g(v)n(ariable,)396 2569 -y($error)-5 b(.)19 b(If)h(this)h(has)f(an)o(y)g(v)n(alue)f(after)h(the) -g(POST)-6 b(ed)20 b(v)n(ariables)g(are)g(check)o(ed,)f(the)h(form)f -(then)h(has)g(its)h({error})e(tag)396 2677 y(\002lled)i(with)f(this)h -(result.)f(The)g(form)f(is)i(displayed)e(again,)g(with)h(the)g(error)-5 -b(.)20 b(If)g($error)e(has)j(no)e(v)n(alue,)h(con\002g.php)396 -2785 y(redirects)g(to)g(admin/inde)o(x.php.)396 2934 -y(Ho)n(we)n(v)o(er)m(,)e(there)i(is)h(one)f(more)f(function)g(that)h -(may)g(be)g(included)e(in)j(hook_con\002g_v)n(alidate.inc)o(.ph)o(p:) -576 3114 y Fb(/*)44 b(Check)g(all)g(settings)g(to)g(validate)g(input.)g -(Name)g(must)g(be)h('final_validation')c(*/)576 3212 -y(function)i(final_validation\($value=\224\))576 3309 -y({)755 3406 y(if\($value['contact_repository'])d(==)k('ldap')g(&&)g -(!$value['ldap_contact_dn']\))755 3503 y({)934 3600 y -($GLOBALS['config_error'])d(=)k('Contact)e(dn)i(must)f(be)g(set';)755 -3697 y(})755 3794 y(elseif\($value['contact_repository'])39 -b(==)44 b('ldap')g(&&)h(!$value['ldap_contact_context']\))755 -3891 y({)934 3989 y($GLOBALS['config_error'])c(=)k('Contact)e(context)h -(must)g(be)h(set';)755 4086 y(})755 4183 y(else)755 4280 -y({)934 4377 y($GLOBALS['config_error'])c(=)k(\224;)755 -4474 y(})576 4571 y(})p Black 3842 5278 a Fa(4)p Black -eop -%%Page: 5 5 -5 4 bop Black 0 TeXcolorgray Black 2778 67 a Fa(phpGr)l(oupW)-8 -b(ar)m(e)19 b(admin/con\002g)o(.php)p Black 396 579 a -Fe(con\002g.php)f(checks)i(for)f(the)h(e)o(xistence)g(of)g(the)g -(function)e('\002nal_v)n(alidation\(\)'.)f(This)j(function)e(can)i(be)g -(used)g(to)396 687 y(check)g(all)g(form)g(v)n(alues)f(at)i(once.)e(It)i -(gets)f(sent)h(the)f(entire)g($ne)n(wsettings)f(array)g(POST)-6 -b(ed)21 b(from)e(the)h(form.)f(As)i(with)396 795 y(the)f(other)g -(functions)f(in)h(this)h(\002le,)f(\002nal_v)n(alidation\(\))d(should)j -(set)h($GLOB)m(ALS['con\002g_error'])15 b(if)20 b(there)g(is)h(a)396 -903 y(problem.)p Black 3842 5278 a Fa(5)p Black eop -%%Page: 6 6 -6 5 bop Black 0 TeXcolorgray Black 2778 67 a Fa(phpGr)l(oupW)-8 -b(ar)m(e)19 b(admin/con\002g)o(.php)p Black Black 3840 -5278 a(6)p Black eop +1 0 bop Black Black -434 -417 a Fa(phpGroupW)-7 b(are)39 +b(admin/con\002g.php)81 b(A)42 b(brief)f(introduction)f(to)i(writing)f +(hooks)g(and)g(templates)h(for)f(an)o(y)g(application)f(to)i(use)h +(this)f(admin)f(interf)o(ace,)-600 -318 y(by)93 b(Miles)47 +b(Lott)g()41 b(Dec)47 +b(22,)f(2001.)91 b(Files)k(con\002g.tpl)45 b(\(required\))91 +b(In)46 b(your)f(application/templates/def)o(ault)e(directory)-5 +b(,)-600 -218 y(create)38 b(a)g(ne)n(w)g(template)g(\002le)h(named)e +('con\002g.tpl'.)e(This)k(will)g(be)f(included)e(by)i(con\002g.php)d +(and)j(used)g(to)g(dra)o(w)g(the)g(page.)f(This)h(template)g(should)f +(include)-600 -118 y(a)45 b(POST)g(method)f(form.)f(The)i(follo)n(wing) +e(template)h(tags)h(may)f(be)h(used:)89 b({action_url})43 +b(-)i(A)g(phpgw->link)d(to)j(con\002g.php)d(will)k(be)e(inserted.)89 +b({title})-600 -19 y(-)50 b(This)g(will)g(be)f(parsed)g(to)h(display)f +('Site)h(Con\002guration'.)97 b({th_bg},{th_te)o(xt},{ro)n(w_)o(on})o +(,{ro)m(w_)o(of)n(f)o(})44 b(-)50 b(Replaced)f(with)h(the)f(current)g +(theme)g(colors.)-600 81 y(and)c(the)g(follo)n(wing)e(special)i(types:) +91 b({lang_XXX})44 b(-)h(Filled)h(with)f(lang\('XXX'\).)89 +b({v)n(alue_XXX})43 b(-)i(Filled)h(with)f(the)g(current)f(v)n(alue)h +(of)f(con\002g)h(item)-600 180 y('XXX'.)95 b({selected_XXX})47 +b(-)h(set)h(to)e(\224,)h(or)g(')g(selected')f(if)h(an)g(option)e(v)n +(alue)h(is)i(current.)94 b({hook_XXX})46 b(-)i(Calls)h(a)f(function)e +(named)g(XXX)i(\(will)-600 280 y(be)54 b(discussed)g(later\).)109 +b({check)o(ed_XXX+YYY})51 b(-)k(Handles)f(checkbox/radio)c(v)n(alues)k +(set)h(to)g(YYY)f(or)g(\224)h(\(will)f(be)h(discussed)f(later\).)108 +b(F)o(ollo)n(wing)-600 380 y(is)70 b(an)f(e)o(xample)e(from)h(the)h +(addressbook)e(application:)g()e()-600 +479 y()c( )o({title})o()e +()96 b()-600 579 y( {erro)o(r})o()56 +b()61 b()i()i +()c( ) +28 b()33 b()27 b( {lang_Ad)o(dre)o(ssbook)o(}/{lan)o(g_)o +(Contact_)o(Setting)o(s})-600 778 y()121 +b()g()116 b +({lang_Contact_application}:)g()25 b()31 +b(...)62 b(Note)30 b(the)h(\002eldname,)e(ne)n +(wsettings[contact_application].)d(This)31 b(array)f(name)g(must)h(be)f +(used)h(for)f(the)-600 977 y(form)e(v)n(alues.)h(Ne)o(xt,)g(note)f(the) +i(v)n(alue)e(setting)h(for)g(this)h(form)e(element,)h({v)n +(alue_contact_application}.)23 b(This)30 b(indicates)f(that)g(we)h(w)o +(ant)f(the)g(current)f(v)n(alue)h(of)g(the)-600 1077 +y(con\002g)21 b(setting,)h('contact_application',)c(to)k(be)g(set)h +(and)e(displayed)g(on)h(the)g(form.)f(Lastly)-5 b(,)21 +b(look)g(at)i(the)f(template)g(element,)f({lang_Contact_application}.)c +(Here,)22 b(the)-600 1177 y(v)n(alue)k(from)g(the)h(lang)f(db)g(table)h +(will)h(be)e(inserted)h(if)g(a)n(v)n(ailable.)53 b(Let')-5 +b(s)28 b(tak)o(e)e(a)i(look)e(at)h(part)f(of)h(the)g(preferences/def)o +(ault/con\002g.tpl:)49 b()-600 +1276 y({lang_Country_Selection})35 b(\({lang_T)-6 +b(e)o(xt_Entry}/{lang_)o(SelectBox}\))o(:)35 b()40 +b()36 b +({hook_country_set})-600 1376 y()f()f()70 +b(Here,)34 b(we)h(are)g(adding)e(a)i(ne)n(w)f(element,)g +({hook_country_set}.)29 b(This)35 b(brings)f(up)g(the)g(ne)o(xt)g +(\002le)i(we)e(will)i(need)e(to)g(parse)h(this)g(v)n(alue,)-600 +1476 y(hook_con\002g.inc.php.)56 b(But)62 b(\002rst,)g(let')-5 +b(s)63 b(look)d(at)j(the)e(last)i(template)e(type,)g('check)o(ed':)f +()o({lang)o(_n)o(o})c({lang)o(_y)o(es})g(W)-7 +b(e)20 b(w)o(ant)f(to)f(check)g(the)h(v)n(alue)e(of)i(the)f(setting)h +('enable_remote_addressboo)o(k')o(.)13 b(The)-600 1774 +y(v)n(alue)18 b(could)h(be)g(\224)g(or)g('T)m(rue'.)f(W)-7 +b(e)20 b(use)g(the)f('+')g(character)f(to)h(isolate)h(the)f(con\002g)f +(name)h(from)f(the)h(check)f(v)n(alue.)h(If)g(the)g(v)n(alue)f(is)i +(empty)f(or)g(unset)g(in)g(the)g(phpgw_con\002g)-600 +1874 y(table,)38 b({check)o(ed_enable_remote_ad)o(dr)o(essboo)o(k+})32 +b(is)40 b(replaced)d(with)h(')h(check)o(ed'.)d(If)j(the)f(v)n(alue)g +(is)h('T)m(rue',{check)o(ed_enable_r)o(emo)o(te_ad)o(dr)o(essboo)o(k+T) +l(rue)o(})-600 1974 y(is)29 b(replaced)d(with)i(')g(check)o(ed'.)e +(Note)h(that)h(the)g(part)f(after)g(the)h('+')f(character)g(matches)g +(what)h(is)g(in)g(the)g(v)n(alue=\224XXX\224)e(part)i(in)g(the)f(html)h +(for)f(this)h(form)f(element.)-600 2073 y(hook_con\002g.inc.php)19 +b(\(optional\))49 b(At)26 b(each)f(in)m(v)n(ocation)e(of)i +(con\002g.php,)e(a)i(call)h(to)f(the)g(common)f(class)i(function)d +(hook_single\(\))f(is)27 b(made.)d(It)h(attempts)g(to)h(include)-600 +2173 y(a)31 b(\002le,)g(hook_con\002g.inc.php)24 b(as)31 +b(a)g(set)g(of)f(code)g(for)g(con\002g.php)d(to)k(use.)f(In)g(the)h +(case)f(of)g(the)h(preferences)d(e)o(xample)h(abo)o(v)o(e,)g(using)g +(hook_country_set,)d(here)k(is)-600 2273 y(the)39 b(corresponding)d +(function)i(in)i(preferences/inc/hook_con)o(\002g.in)o(c.ph)o(p:)34 +b(function)j(country_set\($con\002g\))e({)40 b($country)d(=)j(array\()e +('user_choice')f(=>)j('Users)-600 2372 y(Choice',)30 +b('force_select')e(=>)j('F)o(orce)e(Selectbox')h(\);)g(while)h(\(list)g +(\($k)o(e)o(y)-5 b(,)29 b($v)n(alue\))g(=)h(each)h(\($country\)\))c({)k +(if)f(\($con\002g['countrylist'])c(==)31 b($k)o(e)o(y\))e({)i +($selected)f(=)h(')-600 2472 y(selected';)23 b(})g(else)h({)g +($selected)e(=)i(\224;)f(})h($descr)e(=)i(lang\($v)n(alue\);)c($out)i +(.=)i('')g(.)g($descr)g(.)g('')e(.)i("\\n";)g(})h +(return)-600 2571 y($out;)31 b(})63 b(Note)31 b(again)g(the)g(template) +g(v)n(alue)g(we)g(used)g(earlier)m(,)g({hook_country_set}.)26 +b(This)31 b(causes)h(con\002g.php)d(to)i(look)g(for)f(a)i(function)e +(named)g(country_set\(\).)-600 2671 y(Since)j(we)g(included)e(the)i +(\002le)h(with)f(this)g(function)e(via)i(the)g(hook_single\(\))c(call,) +34 b(this)f(function)e(is)j(e)o(x)o(ecuted.)c(It')-5 +b(s)34 b(return)e(is)h(a)h(string,)e(and)g(the)h(function)e(prints)-600 +2771 y(nothing)25 b(itself.)54 b(hook_con\002g_v)n(alidate.in)o(c.p)o +(hp)20 b(\(optional\))52 b(Once)26 b(the)h(admin)e(clicks)i(the)f +(submit)g(b)n(utton)g(to)g(post)h(the)f(form,)g(we)g(can)h(optionally)d +(v)n(alidate)i(their)-600 2870 y(input)j(using)h(one)g(or)g(man)o(y)f +(dif)n(ferent)f(functions.)h(This)h(is)h(done)e(by)h(\002rst)h(making)e +(another)f(call)j(to)f(hook_single\(\))d(in)k(the)f(API)g(common)e +(class.)j(This)g(time,)f(the)-600 2970 y(name)k(con\002g_v)n(alidate)e +(is)j(used,)f(so)h(common)d(tries)j(to)g(include)e +('application/inc/hook_con\002g_)o(v)n(alid)o(ate.in)o(c.ph)o(p')o(.)64 +b(If)34 b(this)h(\002le)g(e)o(xists,)g(it)g(sets)h(a)f(v)n(ar)f(to)g +(tell)-600 3070 y(con\002g.php)c(it)j(w)o(as)g(found.)e(F)o(ollo)n +(wing)g(then)h(are)h(functions)e(named)g(after)h(each)g(con\002g)g(we)h +(w)o(ant)f(to)h(v)n(alidate.)f(The)g(follo)n(wing)f(e)o(xample)g(is)i +(for)f(addressbook:)-600 3169 y($GLOB)m(ALS['phpgw_info'][')-5 +b(serv)n(er')o(][)o('fo)o(un)o(d_)o(v)n(alid)o(ation)o(_h)o(oo)o(k'])35 +b(=)41 b(T)m(rue;)f(/*)h(Check)g(a)g(speci\002c)g(setting.)f(Name)h +(must)g(match)f(the)h(setting.)g(*/)g(function)-600 3269 +y(ldap_contact_conte)o(xt\($v)n(a)o(lue=\224\))e({)45 +b(if\($v)n(alue)f(==)h($GLOB)m(ALS['phpgw_info'][')-6 +b(serv)o(er)o('][)o(')o(ldap)o(_c)o(on)o(te)o(xt')o(]\))39 +b({)46 b($GLOB)m(ALS['con\002g_error'])40 b(=)45 b('Contact)-600 +3368 y(conte)o(xt)17 b(for)g(ldap)h(must)g(be)g(dif)n(ferent)f(from)g +(the)h(conte)o(xt)f(used)h(for)f(accounts';)g(})h(elseif\($v)n(alue)f +(==)h($GLOB)m(ALS['phpgw_info'][')-5 b(serv)n(er')o(][')n(ldap)o(_g)o +(rou)o(p_)o(con)o(te)o(x)o(t']\))-600 3468 y({)22 b($GLOB)m +(ALS['con\002g_error'])16 b(=)21 b('Contact)g(conte)o(xt)e(for)i(ldap)f +(must)i(be)f(dif)n(ferent)e(from)h(the)h(conte)o(xt)f(used)h(for)f +(groups';)g(})h(else)h({)f($GLOB)m(ALS['con\002g_error'])16 +b(=)-600 3568 y(\224;)24 b(})h(})48 b(Here)24 b(we)g(created)f(a)h +(function)f(to)h(check)f(the)g(entered)g(v)n(alue)g(for)h(the)f +(con\002g)g(item,)h(ldap_contact_conte)o(xt.)19 b(W)-7 +b(e)25 b(w)o(ant)f(to)g(mak)o(e)g(sure)f(the)h(admin)f(did)h(not)f(set) +-600 3667 y(this)d(v)n(alue)f(to)g(one)g(which)g(w)o(ould)g(con\003ict) +g(with)h(another)e(con\002g)g(item,)i(used)f(for)g(accounts)f(or)h +(groups)f(in)i(phpGroupW)-7 b(are.)36 b(con\002g.php)17 +b(calls)k(this)e(function,)f(sending)-600 3767 y(it)j(the)g(POST)-6 +b(ed)21 b(v)n(alue.)f(con\002g.php)e(continues,)h(adding)g(all)j(other) +e(con\002g)f(items)j(from)d(the)i(POST)-6 b(ed)21 b(v)n(alues.)41 +b(The)21 b(v)n(ariable)e($GLOB)m(ALS['con\002g_error'])d(is)22 +b(parsed)-600 3867 y(through)e(lang\(\),)h(then)h(appended)e(to)j(the)f +(local)h(v)n(ariable,)e($error)-5 b(.)21 b(If)h(this)h(has)g(an)o(y)f +(v)n(alue)f(after)h(the)h(POST)-6 b(ed)22 b(v)n(ariables)g(are)g(check) +o(ed,)f(the)i(form)e(then)h(has)h(its)g({error})-600 +3966 y(tag)f(\002lled)g(with)f(this)i(result.)e(The)g(form)g(is)h +(displayed)f(again,)f(with)i(the)g(error)-5 b(.)20 b(If)i($error)e(has) +i(no)f(v)n(alue,)g(con\002g.php)e(redirects)i(to)g(admin/inde)o(x.php.) +40 b(Ho)n(we)n(v)o(er)m(,)19 b(there)-600 4066 y(is)i(one)e(more)g +(function)f(that)i(may)g(be)g(included)e(in)i(hook_con\002g_v)n +(alidate.inc.)o(ph)o(p:)35 b(/*)20 b(Check)g(all)g(settings)g(to)g(v)n +(alidate)f(input.)g(Name)h(must)g(be)g('\002nal_v)n(alidation')d(*/) +-600 4165 y(function)36 b(\002nal_v)n(alidation\($v)n(alue=\224\))c({) +38 b(if\($v)n(alue['contact_repository)o('])32 b(==)38 +b(')o(ldap')e(&&)i(!$v)n(alue[')o(ldap_contact_d)o(n')o(]\))32 +b({)38 b($GLOB)m(ALS['con\002g_error'])32 b(=)-600 4265 +y('Contact)37 b(dn)g(must)h(be)f(set';)h(})g(elseif\($v)n +(alue['contact_repositor)o(y'])31 b(==)38 b(')o(ldap')f(&&)g(!$v)n +(alue[')o(ldap_contact_co)o(nte)n(xt'])o(\))32 b({)38 +b($GLOB)m(ALS['con\002g_error'])32 b(=)-600 4365 y('Contact)24 +b(conte)o(xt)f(must)i(be)f(set';)h(})g(else)h({)f($GLOB)m +(ALS['con\002g_error'])19 b(=)25 b(\224;)g(})g(})50 b(con\002g.php)22 +b(checks)i(for)g(the)g(e)o(xistence)g(of)g(the)h(function)e('\002nal_v) +n(alidation\(\)'.)-600 4464 y(This)31 b(function)e(can)i(be)g(used)g +(to)g(check)f(all)i(form)e(v)n(alues)g(at)i(once.)e(It)h(gets)h(sent)f +(the)g(entire)g($ne)n(wsettings)f(array)g(POST)-6 b(ed)31 +b(from)f(the)h(form.)f(As)h(with)h(the)f(other)-600 4564 +y(functions)19 b(in)h(this)h(\002le,)f(\002nal_v)n(alidation\(\))e +(should)h(set)i($GLOB)m(ALS['con\002g_error'])15 b(if)20 +b(there)g(is)h(a)g(problem.)p Black Black eop %%Trailer end userdict /end-hook known{end-hook}if diff --git a/admin/doc/adminconfig.sgml b/admin/doc/adminconfig.sgml index e1251c01b5..cf4123e770 100644 --- a/admin/doc/adminconfig.sgml +++ b/admin/doc/adminconfig.sgml @@ -67,6 +67,11 @@ {hook_XXX} - Calls a function named XXX (will be discussed later). + + + + {checked_XXX+YYY} - Handles checkbox/radio values set to YYY or '' (will be discussed later). + @@ -112,7 +117,14 @@ ]]> ]]> - Here, we are adding a new element, {hook_country_set}. This brings up the next file we will need to parse this value... + Here, we are adding a new element, {hook_country_set}. This brings up the next file we will need to parse this value, hook_config.inc.php. But first, let's look at the last template type, 'checked': + + +{lang_no} +]]>{lang_yes} +]]> + + We want to check the value of the setting 'enable_remote_addressbook'. The value could be '' or 'True'. We use the '+' character to isolate the config name from the check value. If the value is empty or unset in the phpgw_config table, {checked_enable_remote_addressbook+} is replaced with ' checked'. If the value is 'True',{checked_enable_remote_addressbook+True} is replaced with ' checked'. Note that the part after the '+' character matches what is in the value=”XXX” part in the html for this form element. diff --git a/admin/doc/adminconfig.txt b/admin/doc/adminconfig.txt index 1f1fdaa659..55cc0c8354 100644 --- a/admin/doc/adminconfig.txt +++ b/admin/doc/adminconfig.txt @@ -1,10 +1,15 @@ + phpGroupWare admin/config.php Abstract -A brief introduction to writing hooks and templates for any application to use -this admin interface, by Miles Lott Dec 22, 2001. +A brief introduction to writing hooks and templates for any +application to use this admin interface, by + +Abstract + +Miles Lott Dec 22, 2001. 1 Files @@ -17,39 +22,70 @@ include a POST method form. The following template tags may be used: 1. {action_url} - A phpgw->link to config.php will be inserted. + 2. {title} - This will be parsed to display 'Site Configuration'. -3. {th_bg},{th_text},{row_on},{row_off} - Replaced with the current theme colors. + +3. {th_bg},{th_text},{row_on},{row_off} - Replaced with the + current theme colors. and the following special types: 1. {lang_XXX} - Filled with lang('XXX'). -2. {value_XXX} - Filled with the current value of config item 'XXX'. -3. {selected_XXX} - set to '', or ' selected' if an option value is current. -4. {hook_XXX} - Calls a function named XXX (will be discussed later). + +2. {value_XXX} - Filled with the current value of config item + 'XXX'. + +3. {selected_XXX} - set to '', or ' selected' if an option + value is current. + +4. {hook_XXX} - Calls a function named XXX (will be discussed + later). + +5. {checked_XXX+YYY} - Handles checkbox/radio values set to + YYY or '' (will be discussed later). Following is an example from the addressbook application:
+ + + + + + + + + + + + + + + + + + ... Note the fieldname, newsettings[contact_application]. This @@ -64,16 +100,40 @@ if available. Let's take a look at part of the preferences/default/config.tpl: + + + Here, we are adding a new element, {hook_country_set}. This -brings up the next file we will need to parse this value... +brings up the next file we will need to parse this value, +hook_config.inc.php. But first, let's look at the last template +type, 'checked': + +{lang_no} + +{lang_yes} + +We want to check the value of the setting 'enable_remote_addressbook'. +The value could be '' or 'True'. We use the '+' character +to isolate the config name from the check value. If the +value is empty or unset in the phpgw_config table, {checked_enable_remote_addressbook+} +is replaced with ' checked'. If the value is 'True',{checked_enable_remote_addressbook+True} +is replaced with ' checked'. Note that the part after the +'+' character matches what is in the value="XXX" +part in the html for this form element. 1.2 hook_config.inc.php (optional) @@ -85,22 +145,41 @@ hook_country_set, here is the corresponding function in preferences/inc/hook_config.inc.php: function country_set($config) + { - $country = array( 'user_choice' => 'Users Choice', 'force_select' => 'Force Selectbox' ); + + $country = array( 'user_choice' => 'Users Choice', 'force_select' +=> 'Force Selectbox' ); + while (list ($key, $value) = each ($country)) + { + if ($config['countrylist'] == $key) + { + $selected = ' selected'; + } + else + { + $selected = ''; + } + $descr = lang($value); - $out .= '' . "\n"; + + $out .= '' . "\n"; + } + return $out; + } Note again the template value we used earlier, {hook_country_set}. @@ -123,24 +202,42 @@ was found. Following then are functions named after each config we want to validate. The following example is for addressbook: - $GLOBALS['phpgw_info']['server']['found_validation_hook'] = True; + $GLOBALS['phpgw_info']['server']['found_validation_hook'] += True; - /* Check a specific setting. Name must match the setting. */ + /* Check a specific setting. Name must match the setting. +*/ function ldap_contact_context($value='') + { + if($value == $GLOBALS['phpgw_info']['server']['ldap_context']) + { - $GLOBALS['config_error'] = 'Contact context for ldap must be different from the context used for accounts'; + + $GLOBALS['config_error'] = 'Contact context for +ldap must be different from the context used for accounts'; + } + elseif($value == $GLOBALS['phpgw_info']['server']['ldap_group_context']) + { - $GLOBALS['config_error'] = 'Contact context for ldap must be different from the context used for groups'; + + $GLOBALS['config_error'] = 'Contact context for +ldap must be different from the context used for groups'; + } + else + { + $GLOBALS['config_error'] = ''; + } + } Here we created a function to check the entered value for @@ -163,21 +260,40 @@ config.php redirects to admin/index.php. However, there is one more function that may be included in hook_config_validate.inc.php: - /* Check all settings to validate input. Name must be 'final_validation' */ + /* Check all settings to validate input. Name must be +'final_validation' */ + function final_validation($value='') + { + if($value['contact_repository'] == 'ldap' && !$value['ldap_contact_dn']) + { - $GLOBALS['config_error'] = 'Contact dn must be set'; + + $GLOBALS['config_error'] = 'Contact dn must be +set'; + } - elseif($value['contact_repository'] == 'ldap' && !$value['ldap_contact_context']) + + elseif($value['contact_repository'] == 'ldap' && +!$value['ldap_contact_context']) + { - $GLOBALS['config_error'] = 'Contact context must be set'; + + $GLOBALS['config_error'] = 'Contact context must +be set'; + } + else + { + $GLOBALS['config_error'] = ''; + } + } config.php checks for the existence of the function 'final_validation()'.
 {title}
 {error}
 
 {lang_Addressbook}/{lang_Contact_Settings} +
{lang_Contact_application}:
{lang_Country_Selection} ({lang_Text_Entry}/{lang_SelectBox}): + +