Note:
The HEAD skeleton module will not work with the stable FRAMEWORK_3 or H3 Horde framework and Horde base library. It uses API calls which are not available in FRAMEWORK_3.
There is currently no usable version of skeleton which is tagged FRAMEWORK_3. An older revision of the CVS HEAD version may work though.
export CVSROOT=:pserver:cvsread@anoncvs.horde.org:/repository
The following password is horde
cvs login
cvs export -d modulename -r HEAD skeleton
#!/usr/bin/php -q
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 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/Checkout/ modulname
mv /path/to/modulename/lib/Skeleton.php /path/to/modulename/lib/Modulename.php
mkdir /path/to/modulename/themes/graphics
http://spriggs.org.uk/projects/horde_dev/fitlog/themes/graphics/fitlog.png
applications['modulename'] = array(
'fileroot' => dirname(__FILE__) . '/../../modulename',
'webroot' => $this->applications['horde']['webroot'] . '/modulename',
'name' => _("A description of your module"),
'status' => 'active',
'menu_parent' => 'horde'
);
OK, so you now have your first module. Now, you need to populate it with content. This will be the subject of the next section: PopulatingYourFirstModule