6.0.0-git
2019-10-19

Diff for Doc/Dev/Framework between 5 and 6

[[toc]]

+ Horde Framework Module

The //Horde Framework// modules, also known as //Horde Libraries//, are an integral part of the //Horde Application Framework//. These modules are managed [http://git.horde.org/framework/?rt=horde-git separately] in our [http://www.horde.org/source/[https://www.horde.org/source/ Git repository] but are included with the [http://www.horde.org/horde/download/ Horde packages] thatrepositories] and can be downloaded either from our [http://www.horde.org/mirrors.php servers].[https://pear.horde.org PEAR server] or from [https://github.com/horde Github] directly. The modules areare general purpose libraries that are being used by several Horde applications or the framework itself, but can also be utilized outside the Framework in custom PHP solutions. They are developed, packaged, and distributed similarly to the [http://pear.php.net/ PEARas [https://pear.php.net/ PEAR] and [http://getcomposer.org Composer packages].

++ Installation

Most of these methods require that you first tell your PEAR installation about the Horde PEAR channel:

<code>pear<code>
pear channel-discover pear.horde.org
</code>

+++ Installing everything from Git

You will need the entire Horde Framework module. You can either get a Git checkout of the {{framework}} module from Horde's Git server (see http://horde.org/source/ for instructions on using Git), or you can download a nightly snapshot from http://snaps.horde.org/. You'll want the latest framework-horde-git snapshot.

[[# InstallInstruct]] Once you have the full framework you have two options: symlinking, or installing with the PEAR installer. If you want to install with the PEAR installer, there is a {{pear_batch_install}} script (or, if using Windows, a {{pear_batch_install.bat}} script) in the framework/bin directory that will automate the process for you. Simply run:

<code>php bin/pear_batch_install
</code>

from the base of the framework directory. The major disadvantage of this method is that if you are using Git, you will need to re-run the script every time you update. If you are doingYou should use the [https://github.com/horde/git-tools Horde development or update from Git frequently, then using symlinks is recommended.

Symlinked directories can be generated using the {{install_framework}} script in the framework/bin directory.  Usage is as follows:

<code>$ install_framework --help
Usage: install_framework [OPTION]

Possible options:
  --copy        Do not create symbolic links, but actually copy the libraries
                (this is done automatically on Windows).
  --src DIR     The source directory for the framework libraries.
  --dest DIR    The destination directory for the framework libraries.
  --pkg DIR     Path to a single package to install.
</code>

The default is to run the script from your main Horde directory, with {{framework/}} as the source directory and a {{libs}} directory as the target (these values are assumed if you don't specify --src or --dest). You will see a processing message for each package, and then all you need to do is to add the {{libs/}} directory to your include_path.

Symlinking is useful for developers who develop on the framework librariesTools] to download and want to see their changes in real-time without having to re-install the affected package. This script is also used to distribute theinstall multiple libraries withor the Horde packages.whole framework at once.

+++ Installing individual libraries from Git

You will still need a fullcan checkout or a snapshot ofand install individual packages directly from [https://github.com/horde GitHub] or with the framework, asHorde Git Tools like above. Then you can install individual packages. For example, toto install thethe Horde_Compress package, in the {{framework/Compress}} directory, youin the {{Compress}} directory, you would run:

<code>pear

<code>
pear install Compress/package.xml
</code>


+++

+++ Installing from http://pear.horde.org/https://pear.horde.org/

Installing from pear.horde.org is simple. Once you have "discovered" the channel as described above, you can installinstall Horde packages just like other PEAR packages. For example to install the Compress package:

<code>pear install horde/Horde_Compress-alpha
</code>

(the -alpha is necessary if you have not configured PEAR to install alpha state packages by default. This will vary depending on the Horde package that you pick; some are stable, some are beta, and some are alpha.)

To view the available packages, their states (alpha, beta, stable), dependencies, and other information about them, visit http://pear.horde.org/index.php?category=framework.


+++ If you already have a Horde release

Horde releases come with all of the framework libraries bundled in the {{horde/lib/}} directory, and also include the necessary code to make everything in the {{horde/lib/}} directory available to Horde without any further installation or PHP configuration:

<code type="php">
ini_set('include_path', dirname(__FILE__) . PATH_SEPARATOR . ini_get('include_path'));horde/Horde_Compress
</code>

This code prependsTo view the {{horde/lib/}} directory to the existing {{include_path}}. For example, if the {{include_path}} is set to {{.:/usr/share/php}} in {{php.ini}}, it will become {{/path/to/horde/lib:.:/usr/share/php}}. This means that library files included with {{include}}, {{include_once}}, {{require}}, or {{require_once}} statements are first looked for in Horde's {{lib/}} directory, then in the local directory ({{.}}), and finally in the PEAR repository. The side effect is that libraries that come with Hordeavailable packages, their states (alpha, beta, stable), dependencies, and other information about them, visit https://pear.horde.org.

+++ If you already have the same name like a PEAR package, e.g. File_CSV, are used in favor of the PEAR package.Horde release

Horde releases come with all of the required framework libraries installed, and also include the necessary code to make everything available to Horde without any further installation or PHP configuration.

++ Use

If PHP has been set up properly, the local PEAR repository should be in PHP's {{[http://www.php.net/manual/en/ini.core.php#ini.include-path{{[https://php.net/manual/en/ini.core.php#ini.include-path include_path]}}. If installing the Horde Libraries either separately with the PEAR installer or using {{install-packages.php}},the Horde Git Tools, they are available alongside PEAR's packages, and can be included in your custom code the same way:

<code type="php">
// Include PEAR's DB package.
require_once 'DB.php';
// Include PEAR's Text_Wiki package.
require_once 'Text/Wiki.php';
// Include Horde's Horde_Tree package.
require_once 'Horde/Tree.php';
// Include Horde's Horde_Text_Flowed package.
require_once 'Horde/Text/Flowed.php';
</code>

If using the Horde environment, these require_once statements are not needed as the libraries will be autoloaded the first time they are used.

++ Development

+++ Git organization

All libraries are managed in [http://git.horde.org/horde-git/-/browse/framework/?ws=1 Git].[https://github.com/horde GitHub]. Each library has its own subdirectory inside the framework directory.  Thesubdirectory. The library package names are ALWAYS {{Horde_<Name>}}, and the directory names are {{<Name>}}.

Each package directory contains a [http://pear.php.net/manual/en/guide.developers.package2.php[https://pear.php.net/manual/en/guide.developers.package2.php package.xml] file with package descriptions, file listings, dependencies, change logs etc. As all Horde Libraries are following the [http://pear.php.net[https://pear.php.net PEAR] standard, they can be installed using the [http://pear.php.net/manual/en/installation.php[https://pear.php.net/manual/en/installation.php PEAR installer] or may be symlinked to a subdirectory of the Horde installation.  For further instructions, see the Installation Instructions located above.

+++ Directory structure

<code>
framework/Name/Name/
    package.xml
    lib/
        Horde/
            Name.php
            Name/
                foo.php
                bar.php
...
</code>

After installation:
<code>
lib/
    Horde/
        Name.php
        Name/
            foo.php
            bar.php
...
</code>

A rule of thumb is that each underscore in a package name is translated to an additional directory after installation.