\documentclass{article}
\usepackage{ulem}
\pagestyle{headings}
\begin{document}
\part{conf.xml}
The XML file is layed out using several sections.  These sections relate to variables that are used within horde.  Here is an example XML snippet and the resulting configuration file entries:

\begin{verbatim}

<?xml version="1.0"?>
<!-- $Horde: $ -->
<configuration>
 <configsection name="wicked">
  <configheader>Application Settings</configheader>

  <configstring name="notify_address" desc="The email address to which changes
   on pages should be mailed. Leave empty if you don't want notification
   messages to be sent." required="false" />
  <configenum name="diff_format" desc="The diff format that should be used when
   sending notifications.">unified
   <values>
    <value desc="Unified context">unified</value>
    <value desc="Copied context">context</value>
    <value desc="Side by side">sidebyside</value>
   </values>
  </configenum>
 </configsection>
</configuration>
\end{verbatim}

\texttt{<configuration>} is the start of the config file.

\section{Sections}
\texttt{<configsection name="wicked">} produces first level \texttt{\$conf['wicked']} variables.\newline
Multiple configsection names produces multiple levels.

\begin{verbatim}

<configsection name="level1">
 <configsection name="level2">
...
 </configsection>
<configsection>
\end{verbatim}

produces \texttt{\$conf['level1']['level2']} variables.

\section{Headers}
\texttt{<configheader>} puts text to help organize the screen

\section{Descriptions}
\begin{verbatim}

        <configdescription>
            Standalone informational text which does not affect the generated configuration.
            This might be helpful at the top of a configsection, configswitch or configtab
        </configdescription>
\end{verbatim}

\section{Strings}
\texttt{<configstring \ldots>} for selecting an item from a list

\begin{itemize}
\item{name - Second level \texttt{\$conf['configsection']['configstring']} variables}
\item{desc - This is what shows up near the box for information about the entry}
\item{required - will put a red star and make user enter data (true/false)}
\end{itemize}
\section{Passwords}
\texttt{<configpassword \ldots>} for allowing masked input (show only stars)

\begin{itemize}
\item{name - The Variable Key}
\item{desc - This is what shows up near the box for information about the entry}
\item{required - will put a red star and make user enter data (true/false)}
\end{itemize}
\section{Secrets}
\texttt{<configsecret \ldots>} Autogenerates a random ID if empty and no default provided

\begin{itemize}
\item{name - The Variable Key}
\item{desc - This is what shows up near the box for information about the entry}
\item{required - will put a red star and make user enter data (true/false)}
\end{itemize}
\section{Verbatim PHP}
\texttt{<configphp \ldots>} Allows administrators to convey arbitrary PHP code. Use with care and provide a sane default.

\begin{verbatim}

       <configphp name="custom" quote="false" desc="A custom function to modify the calculated $foo"/>
\end{verbatim}

Supported attributes

\begin{itemize}
\item{name - The variable key \texttt{\$conf['anysections']['custom']} variables}
\item{desc - This is what shows up near the box for information about the entry}
\item{required - will put a red star and make user enter data (true/false)}
\item{default - Predefined value}
\end{itemize}
\section{}
\section{Booleans}
\texttt{<configboolean \ldots>value</configboolean>}

\begin{itemize}
\item{name - Second level \texttt{\$conf['configsection']['configboolean']} variables}
\item{desc - This is what shows up near the box for information about the entry}
\item{required - will put a red star and make user enter data (true/false)}
\item{value - could be false or true}
\end{itemize}
\section{Enums (Select From a List)}
\texttt{<configenum \ldots>default\_entry} to provide a list of choices

\begin{itemize}
\item{name - Second level \texttt{\$conf['configsection']['configenum']} variables}
\item{desc - Descriptive text for list}
\end{itemize}
within configenum section use:\newline
\begin{verbatim}

 <values>
  <value desc="List entry1">list1</value>
  <value desc="List entry2">list2</value>
 </values>
\end{verbatim}

\section{Multi-Enums (Select Any Number From a List)}
\texttt{<configmultienum \ldots>} for selecting multiple items from a list

\begin{itemize}
\item{name - Second level \texttt{\$conf['configsection']['configmultienum']}}
\item{desc - Descriptive text for multienum entries}
\end{itemize}
\section{Special Values}
\texttt{<configspecial application="horde" name="apps" />} - "values" list of active horde apps

\begin{itemize}
\item{name - Refers to case entry in Horde\_Application::configSpecialValues()}
\end{itemize}
See http://www.ralf-lang.de/2012/02/22/horde-config-how-to-fill-dropdowns-with-application-data-with-configspecial/\footnote{http://www.ralf-lang.de/2012/02/22/horde-config-how-to-fill-dropdowns-with-application-data-with-configspecial/} for a detailed explanation.

\section{Predefined Specials}
TODO: More detail on usage. For now, just a heads up so users don't reinvent the wheel

\texttt{<configsql \ldots>} for configuring an SQL backend or using the default defined in the horde base app\newline
\texttt{<confignosql \ldots>} for configuring a NoSQL\footnote{http://example.com/index.php?page=NoSQL} (Mongo etc) backend or using the default defined in the horde base app\newline
\texttt{<configldap \ldots>} for configuring an LDAP backend or using the default defined in the horde base app\newline
\texttt{<configvfs \ldots>} for configuring Virtual Filesystem Storage or using the default defined in the horde base app\newline
\texttt{<configtab \ldots>} Organize your config screen into tabs

\section{Switches}
\texttt{<configswitch \ldots>} - mechanism for grouping sets of options\newline
Use config entries from above to populate option choices.

\begin{itemize}
\item{name - Third level \texttt{\$conf['configsection']['configstring']['configswitch']}}
\item{desc - Descriptive text for configswitch entries}
\end{itemize}
\texttt{<case \ldots>} provides value for configswitch statement\newline
Must reside within \texttt{<configswitch>} section

\begin{itemize}
\item{name - \texttt{\$conf['configsection']['configstring']['configswitch'] = name\_value}}
\item{desc - List value description}
\end{itemize}
\end{document}
