Creating a Horde Module (App) Horde 5 (current) Horde 5 (pre git split) Horde 4 Horde 3 Creating a Horde Module (App) Please follow the instructions below and choose the version for which you'd like to start a new module. Once you have your first module you need to populate it with content. This will be the subject of the next section: PopulatingYourFirstModule Horde 5 (current) 1. Prerequisites: Generate a horde checkout or get one using the Horde Developer Container (configure git-tools/config/conf.php first) /path/to/git-tools/bin/horde-git-tools git clone Setup an environment /path/to/git-tools/bin/horde-git-tools dev install Do basic horde initialization for dev (registry.local.php, conf.php) 2. Create an app template /path/to/git-tools/bin/horde-git-tools dev new --app-name foo --author "My Name " 3. In /path/to/horde/config/registry.d/ create a file called newmodulename.php. Please note the documentation for available module entry options in horde/config/registry.php, especially the menu parent. If you want your module to go anywhere else in the menue, you will need to change this! This is a "registry.d" example for Horde 5: applications['newmodulename'] = array( 'name' => _("New Module"), // This is sufficient. More options possible if needed ); 4. If you wish you can provide your new module with a PNG icon at 20x20. This needs to be placed in the "themes" subdirectory: mkdir newmodulename/themes/default/graphics cp newmodulename.png newmodulename/themes/default/graphics/ This one is an example PNG from the basic horde application https://github.com/horde/horde/raw/master/horde/themes/default/graphics/horde.png 5. To actually run your app boilerplate, you need to re-run the git-tools dev install procedure to create appropriate symlinks Horde 5 (pre git split) 1. Check out the skeleton module: git clone --depth 1 https://github.com/horde/skeleton.git cd skelton 2. Start a new module - based on the Skeleton module - by running the following helper script: ./bin/skeleton-generate-module newmodulename "Me Myself " The new module will end up in skeleton's parent directory and have the name "newmodulename". 3. Link or copy the new module into your horde installation. ln -s `pwd`/../newmodulename /your/install/path/to/horde/ Linking is the preferred variant as this allows you to work within the git repository and commit any code you write to a local branch. At the same time you have the installation ready for immediate testing of any changes. 4. In /path/to/horde/config/registry.d/ create a file called newmodulename.php. Please note the documentation for available module entry options in horde/config/registry.php, especially the menu parent. If you want your module to go anywhere else in the menue, you will need to change this! This is a "registry.d" example for Horde 5: applications['newmodulename'] = array( 'name' => _("New Module"), // This is sufficient. More options possible if needed ); 5. If you wish you can provide your new module with a PNG icon at 20x20. This needs to be placed in the "themes" subdirectory: mkdir newmodulename/themes/default/graphics cp newmodulename.png newmodulename/themes/default/graphics/ This one is an example PNG from the basic horde application https://github.com/horde/horde/raw/master/horde/themes/default/graphics/horde.png Horde 4 It is not recommended to use the Horde 4 Skeleton any longer. 1. Check out the skeleton module from horde git git clone --depth 1 git://github.com/horde/horde.git cd horde cp -R skeleton/ /your/install/path/to/horde/ 2. Create the following script as projectrename.php - save it somewhere sensible, like your home directory: #!/usr/bin/php -q n"; } // // ------------------- Main-Code -------------------- // if (count($_SERVER['argv'])==3) { // Preparation $list = array(); $path = trim($_SERVER['argv'][1]); $modul = trim($_SERVER['argv'][2]); // Fetch Filelist $list = analysedir( $path, $list ); // Modify each File foreach( $list as $file ) { //echo $modul.": ".$file."n"; substitute_skeleton( $file, $modul ); } } else help(); ?> 3. On a unix system, use the following command to replace all skeleton strings with your project name (Not tested on Windows, but should work): projectrename.php /path/to/skeleton modulname 3.1: Edit your Name into all files, for example with this snippet under bash (Unix, Linux or Windows with cygwin): find ./ -type f -exec sed -i 's/Your Name /Me Myself /g' {} \; 3.2 Rename mv horde/appname/test/Skeleton horde/appname/test/Appname and mv horde/appname/locale/skeleton.pot horde/appname/locale/appname.pot and mv horde/appname/migration/1_skeleton_base_tables.php horde/appname/migration/1_appname_base_tables.php 4. Perform some file modifications: mkdir /path/to/modulename/themes/default/graphics 5. Upload a PNG icon at 16x16 named appname.png for the module to the path created above. This one is an example from the basic horde application: https://github.com/horde/horde/blob/master/horde/themes/default/graphics/horde.png 6. In /path/to/horde/config/registry.d/ create a file called modulename.php. Please note the lack of ?> at the end of the php block, and also the menu parent. If you want your object to go *ANYWHERE ELSE* you will need to change this! This is a registry.d example for Horde 4: applications['tickplug'] = array( 'name' => _("Tickplug"), 'provides' => array( 'Tickets/Import' ) // This is sufficient. More options possible if needed ); 7. On the administration - configuration page, configure your app. (It won't display in the sidebar until you do.) Horde 3 It is not recommended to use the Horde 3 Skeleton from CVS any longer. There is currently no usable version of Skeleton which is tagged FRAMEWORK_3. An older revision of the CVS HEAD version may work though. This is a registry.d example for Horde 3: applications['modulename'] = array( 'fileroot' => dirname(__FILE__) . '/../../modulename', 'webroot' => $this->applications['horde']['webroot'] . '/modulename', 'name' => _("A description of your module"), 'status' => 'active', 'menu_parent' => 'horde' );