+#!/usr/bin/php
+<?php
+ini_set("include_path", "/etc/diogenes:/usr/share/diogenes/include:/usr/share/php");
+require_once("diogenes.common.inc.php");
+require_once("diogenes.script.inc.php");
+require_once("System.php");
+require_once("Barrel.php");
+
+/** Import a single Perl POD file.
+ *
+ * @param $caller
+ * @param $pod
+ * @param $docdir
+ * @param $docbase
+ * @param $template
+ */
+function importPod(&$caller, $pod, $docdir, $docbase, $template = '')
+{
+ global $globals;
+ $barrel =& $caller->barrel;
+
+ $pid = $barrel->makePath($docdir, $caller);
+ $page = Diogenes_Barrel_Page::fromDb($barrel, $pid);
+ if (!$page->props['PID']) {
+ echo "failed to get Page $pid\n";
+ exit(1);
+ }
+
+ # produce HTML from POD
+ $pod = realpath($pod);
+ if (($tmpdir = System::mktemp('-d')) == false) {
+ $this->kill("Error : could not create temporary directory!");
+ }
+ $content = shell_exec("cd $tmpdir && pod2html --htmlroot=FOODOCBASE --infile=".escapeshellarg($pod));
+ $content = str_replace('<hr />', '', $content);
+ $content = preg_replace('/FOODOCBASE(.*).html/', "/$docbase$1/", $content);
+
+ # extract title
+ if (preg_match("/<title>(.*)<\/title>/si", $content, $matches))
+ {
+ $page->props['title'] = addslashes($matches[1]);
+ if ($template)
+ $page->props['template'] = $template;
+ $page->toDb(0, $caller);
+ }
+
+ # strip un-needed info
+ $rcs = $caller->getRcs();
+ $content = $rcs->importHtmlString($content);
+ if (preg_match("/<h1><a name=\"synopsis\">.*/si", $content, $matches))
+ $content = $matches[0];
+
+ $content = str_replace("h1>", "h2>", $content);
+ $rcs->commit($pid,$globals->htmlfile,$content,"automatic import");
+}
+
+
+/** Import a set of Perl POD files.
+ *
+ * @param $caller
+ * @param $docarray
+ * @param $docbase
+ * @param $template
+ */
+function importPods(&$caller, $docarray, $docbase, $template = '')
+{
+ foreach ($docarray as $pod => $docdir)
+ {
+ importPod($caller, $pod, $docdir, $docbase, $template);
+ }
+}
+
+
+/** Print program usage and exit.
+ */
+function usage()
+{
+ echo "Usage: pod2diogenes [options] barrel podmap\n\n";
+ echo "Options\n\n";
+ echo " -b<docbase> the base URL for Perl docs (default: '')\n";
+ echo " -h display help message\n";
+ echo " -t<template> set page template to <template>\n";
+ echo " -u<user> make commits as <user> (default : current user)\n";
+ exit(1);
+}
+
+
+/** Parse a podmap file.
+ */
+function parsePodmap($mapfile)
+{
+ if (!($fp = fopen($mapfile, "r")))
+ {
+ echo "could not open '$mapfile'\n";
+ return;
+ }
+ $podmap = array();
+ while ($line = fgets($fp))
+ {
+ $bits = preg_split('/\s+/', $line, -1, PREG_SPLIT_NO_EMPTY);
+ $podmap[$bits[0]] = $bits[1];
+
+ }
+ fclose($fp);
+ return $podmap;
+}
+
+
+function main()
+{
+ global $argv;
+
+ // set defaults
+ $docbase = '';
+ $user = get_current_user();
+ $template = '';
+
+ // parse options
+ $opts = Console_GetOpt::getopt($argv, "b:hu:t:");
+ if ( PEAR::isError($opts) ) {
+ echo $opts->getMessage();
+ usage();
+ } else {
+ $argv = $opts[1];
+ $opts = $opts[0];
+ foreach ( $opts as $opt) {
+ switch ($opt[0]) {
+ case "h":
+ usage();
+ break;
+ case "b":
+ $docbase = $opt[1];
+ break;
+ case "u":
+ $user = $opt[1];
+ break;
+ case "t":
+ $template = $opt[1];
+ break;
+ }
+ }
+ }
+ if (sizeof($argv) != 2)
+ usage();
+ list($alias, $mapfile) = $argv;
+
+ // parse the podmap file
+ if (!($podmap = parsePodmap($mapfile)))
+ {
+ echo "failed to parse '$mapfile'\n";
+ exit(1);
+ }
+
+ // perform the actual work
+ $script = new Diogenes_Script($alias, $user);
+ importPods($script, $podmap, $docbase, $template);
+}
+
+main();
+?>