6.0.0-git
2024-04-25

Diff for CreatingYourFirstModule between and 1

+ Creating a Horde Module



1. Check out the skeleton module from horde CVS



<code type="sh">

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

# The following password is horde

cvs login

cvs export -d modulename -r HEAD skeleton

</code>



2. Create the following script as prjrename.php - save it somewhere sensible, like your home directory:



<code type="php">

<?php



if (count($_SERVER['argv'])==3) {



  $prjUC=strtoupper(trim($_SERVER['argv'][2]));

  $prjLC=strtolower($prjUC);

  $prjMC=substr($prjUC, 0, 1) . substr($prjLC, 1, strlen($prjLC)-1);



  $filehandle=fopen(trim($_SERVER['argv'][1]), 'r');

  $file=fread($filehandle, filesize($_SERVER['argv'][1]));

  fclose($filehandle);

  $newfile=str_replace(array('SKELETON', 'Skeleton', 'skeleton'), array($prjUC, $prjMC, $prjLC), $file);

  $filehandle=fopen(trim($_SERVER['argv'][1]), 'w');

  fwrite($filehandle, $newfile);

  fclose($filehandle);

} else {

  help();

}



function help() {

  echo "php prjrename.php [filename] [string]

filename = The file to update

string = the name of the file to replace

";

}



?>

</code>



3. On a unix system, use the following command to replace all skeleton strings with your project name (I don't think there's an appropriate command for windows, unless you've got cygwin):



<code type="sh">

find /path/to/skeleton/export -type f -exec php -q /path/to/prjrename.php '{}' modulename

</code>



4. Perform some file modifications:



<code type="sh">

mv /path/to/modulename/lib/Skeleton.php /path/to/modulename/lib/Modulename.php

mkdir /path/to/modulename/themes/graphics

</code>



5. Upload a PNG icon at 16x16 for the module to the path created above, this one is available if you're stuck:



http://spriggs.org.uk/projects/horde_dev/fitlog/themes/graphics/fitlog.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!



<code type="php">

<?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'

);

</code>



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.