Diff for Doc/Dev between 65 and 66


+ Horde Developer Documentation

++ Overviews

* ((Doc/Dev/Filesystem|Filesystem structure))

* ((Doc/Dev/Configuration|Configuration files))

* ((Doc/Dev/Framework|Framework modules))

* ((Doc/Dev/SpecialFiles|Special files))

* ((Doc/Dev/Globals|Global constants and objects))

* ((Doc/Dev/Registry|The Registry))

* ((Doc/Dev/DesignPatterns|Design patterns))

++ Development

* [CreatingYourFirstModule Creating your own module]

* ((Doc/Dev/Themes|Creating new themes))

* ((Doc/Dev/Layout|Understanding and changing the layout))

* ((Doc/Dev/LegacyApps|How to use Horde from custom, non-Horde PHP applications or websites))

* ((Doc/Dev/SOAP|Using Horde as a SOAP server, including complex types))

* ((Doc/Dev/Emacs|Emacs configurations for Horde))

++ Libraries

* ((Doc/Dev/FilePDFPackage|File_PDF::))

* ((Doc/Dev/FeedPackage|Horde_Feed::))

* ((Doc/Dev/FormPackage|Horde_Form::))

* ((Doc/Dev/FrameworkPackage|Horde::, Registry::))

* ((Doc/Dev/MIMEPackage|MIME:: Using the MIME API to create or parse MIME messages))

* ((Doc/Dev/MobilePackage|Horde_Mobile::))

* ((Doc/Dev/PermsPackage|Perms:: Using the extensible permissions API))

* ((Doc/Dev/TemplatePackage|Horde_Template:: - Horde 3.2+))

 * ((Doc/Dev/TemplatePackageOld|Horde_Template:: - pre-Horde 3.2))

* ((Doc/Dev/UtilPackage|Util::))

* [http://dev.horde.org/ API Documentation]

++ Dev Stuff

* ((Doc/Dev/DAV|WebDAV/GroupDAV/CalDAV Documentation))

* ((Doc/Dev/Benchmarks))

* [http://cvs.horde.org/dimp/docs/dev/?sa=1 DIMP Development Documentation]

* ((Doc/Dev/CopyrightLicense|Copyright and license stuff))

* ((Doc/Dev/VimRC|Vim configuration useful for Horde Development))

++ Mini-FAQ for Horde 4 development

**Q:** Are we going to keep the existing development model where we have a "master" server (i.e. cvs.horde.org) where we will build the releases?  For our workflow, that seems to make the most sense - since we don't have a "master" user that checks all commits before integrating.

**A:** Yes. All HEAD commits are pushed to dev.horde.org:/horde/git/horde (or horde-hatchery, etc.), and we'll use branches to do local dev or to coordinate non-mainline work.

**Q:** How do I combine the CVS and Git trees so I can test/develop current Horde 4 code?

**A:** The current suggestion is:

* Update/pull most recent changes into the various repositories

* Use the horde-fw-symlinks.php script to link the various framework libraries to your include directory. 


horde-fw-symlinks.php --src [Location of horde-git]/framework --dest [A PHP include directory]

horde-fw-symlinks.php --src [Location of horde-hatchery]/framework --dest [A PHP include directory]

horde-fw-symlinks.php --src [Location of horde CVS HEAD]/framework --dest [A PHP include directory]


* Note that if your filesystem is NOT case sensitive (i.e. HFS+ on the Mac) then you will need to have two separate include directories - one for the CVS framework libraries and one for the Git framework libraries. You will need to make sure to put the Git include directory first in your include_path.


horde-fw-symlinks.php --src [Location of horde-git]/framework --dest [A PHP include directory]

horde-fw-symlinks.php --src [Location of horde-hatchery]/framework --dest [A PHP include directory]

horde-fw-symlinks.php --src [Location of horde CVS HEAD]/framework --dest [A second PHP include directory]


* For the actual Horde applications that have been moved to Git, there are a few options. You could either copy the application directory back and forth from your /horde directory, you could try to use a joint CVS/Git source tree, or you can symlink the application into your horde/ directory. All methods have drawbacks. Issues with the first are obvious - you need to pull, copy, code, copy, push etc... The issue with second method is that you will either get lots of warnings about files that aren't tracked, or you could try to manage an ignore list for both CVS and Git.

* Using symlinks is the best solution.  From the base horde install, add a symlink to the Git application folder. Then you must create a lib/base.local.php in this application and define HORDE_BASE in that file like this:



define('HORDE_BASE', '[Full filesystem path to horde]');


**Q:** How do I start from scratch with a git/cvs head install

**A:** These steps only work on case sensitive file systems, see above:

Note that if this is the first time you've dealt with our framework libraries, you will need to discover our PEAR server before proceeding with the steps below:


pear channel-discover pear.horde.org



export CVSROOT=:pserver:cvsread@anoncvs.horde.org:/repository

cvs login (password is 'horde')

cvs checkout -dP horde

git clone --depth 1 git://dev.horde.org/horde/git/horde horde-git

git clone --depth 1 git://dev.horde.org/horde/git/horde-hatchery

cd horde

cvs checkout framework

pear install -f framework/devtools/package.xml

mkdir libs

horde-fw-symlinks.php --src ../horde-git/framework

horde-fw-symlinks.php --src ../horde-hatchery/framework


echo "<?php ini_set('include_path', dirname(__FILE__) . '/../libs' . PATH_SEPARATOR . ini_get('include_path'));" > lib/core.local.php


Then continue with the installation steps in docs/INSTALL.

After some time has passed you will want to update your working copy from the Horde servers. These commands will do that. The commands are to be executed from the base of the Horde installation (the directory created by the CVS checkout):


cvs update -dP

cd ../horde-git && git pull --rebase

cd ../horde-hatchery && git pull --rebase

# Now we have to refresh the Framework library symlinks:

cd ../horde

rm -rf libs/*

horde-fw-symlinks.php --src ../horde-git/framework

horde-fw-symlinks.php --src ../horde-hatchery/framework



**Q:** Why does the sidebar not collapse/Why can't I switch tabs on the config screen/Why do certain links not work?

**A:** Make sure your 'jsfs' and 'jsuri' entries in horde/config/registry.php are correct. They are actually no needed anymore at all, unless you really know what you are doing. Applications no longer come shipped with javascript source files in js/src - they all live directly under js/ now.