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
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)
Create an app template
/path/to/git-tools/bin/horde-git-tools dev new --app-name foo --author "My Name <my.name@mycompany.com>"
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:
<?php
$this->applications['newmodulename'] = array(
'name' => _("New Module"),
// This is sufficient. More options possible if needed
);
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
git clone --depth 1 https://github.com/horde/skeleton.git cd skelton
./bin/skeleton-generate-module newmodulename "Me Myself <me@myselfandi.com>"
The new module will end up in skeleton's parent directory and have the name "newmodulename".
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.
This is a "registry.d" example for Horde 5:
<?php
$this->applications['newmodulename'] = array(
'name' => _("New Module"),
// This is sufficient. More options possible if needed
);
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
It is not recommended to use the Horde 4 Skeleton any longer.
git clone --depth 1 git://github.com/horde/horde.git cd horde cp -R skeleton/ /your/install/path/to/horde/
#!/usr/bin/php -q
<?php
function analysedir( $path_, $list_ )
{
// Read dir
$handle = opendir($path_);
while (false !== ($file = readdir($handle)))
{
if( $file!='.' && $file!='..')
{
$file = $path_ . DIRECTORY_SEPARATOR . $file;
//echo "$filen";
if( !is_dir( $file ) ) // If File: Append
{
$list_[count($list_)]=$file;
}
else // If Folder: scan recursively
{
$list_ += analysedir($file, $list_ );
}
}
} // While END
return $list_;
}
function substitute_skeleton( $filename, $modulname )
{
$prjUC=strtoupper(trim($modulname));
$prjLC=strtolower($prjUC);
$prjMC=substr($prjUC, 0, 1) . substr($prjLC, 1, strlen($prjLC)-1);
$filehandle=fopen(trim($filename), 'r');
$file=fread($filehandle, filesize($filename));
fclose($filehandle);
$newfile=str_replace(array('SKELETON', 'Skeleton', 'skeleton'), array($prjUC, $prjMC, $prjLC), $file);
$filehandle=fopen(trim($filename), 'w');
fwrite($filehandle, $newfile);
fclose($filehandle);
}
function help()
{
echo "projectrename.php </path/to/skeleton-folder/> <modulname>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();
?>
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 <you@example.com>/Me Myself <me@myselfandi.com>/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
mkdir /path/to/modulename/themes/default/graphics
https://github.com/horde/horde/blob/master/horde/themes/default/graphics/horde.png
This is a registry.d example for Horde 4:
<?php
$this->applications['tickplug'] = array(
'name' => _("Tickplug"),
'provides' => array(
'Tickets/Import'
)
// This is sufficient. More options possible if needed
);
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:
<?php
$this->applications['modulename'] = array(
'fileroot' => dirname(__FILE__) . '/../../modulename',
'webroot' => $this->applications['horde']['webroot'] . '/modulename',
'name' => _("A description of your module"),
'status' => 'active',
'menu_parent' => 'horde'
);