<?php
libxml_use_internal_errors(true);
$url = 'http://eman-archives.org' . $_GET['url'];

// TODO : sécuriser les variables _GET
$url = explode("/", $_GET['url']);
$instanceDir = $url[1];
$itemId = $url[4];

// Bootstrap Omeka
require_once "../$instanceDir/bootstrap.php";

// Configure, initialize, and run the application.
$application = new Omeka_Application(APPLICATION_ENV);
$application->getBootstrap()->setOptions(array(
    'resources' => array(
        'theme' => array(
            'basePath' => THEME_DIR,
            'webBasePath' => WEB_THEME
        )
    )
));
ob_start();
$application->initialize()->run();
ob_end_clean();

$item = get_record_by_id('Item', $itemId);

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


// Retrieve database info
$params = parse_ini_file("../$instanceDir/db.ini");
$dbUser = $params['username'];
$dbPass = $params['password'];
$dbDbName = $params['dbname'];
$dbPrefix = $params['prefix'];

$mysqli = new mysqli("localhost", $dbUser, $dbPass, $dbDbName);
if ($mysqli->connect_errno) {
  echo "Echec lors de la connexion à MySQL : (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$mysqli->set_charset("utf8");

// Start document creation
$compilation = new DOMDocument();
$compilation->encoding = "utf-8";
$compilation->formatOutput = true;
$compilation->preserveWhiteSpace = false;
// $templateFile = "../$instanceDir/teibp/content/eman-transcription-template.xml";
$templateFile = "eman-transcription-compilation-template.xml";

$compilation->loadXML(file_get_contents("$templateFile"));

$teiTag = $compilation->getElementsByTagName('TEI')->item(0);
$teiHeader = $compilation->getElementsByTagName('teiHeader')->item(0);
$bodyTag = $compilation->createElement('body');

$fileDesc = $compilation->getElementsByTagName('fileDesc')->item(0);

// teiHeader : Informations sur la notice
$titleStmt = $compilation->getElementsByTagName('titleStmt')->item(0);
$title = $compilation->createElement('title');
$title->nodeValue = 'Transcription des fichiers de la notice - ' . metadata($item, array('Dublin Core', 'Title'));
$titleStmt->appendChild($title);
$author = $compilation->createElement('author');
$author->nodeValue = metadata($item, array('Dublin Core', 'Creator'));
$titleStmt->appendChild($author);
$fileDesc->appendChild($titleStmt);

$editionStmt = $compilation->createElement('editionStmt');
$edition = $compilation->createElement('edition');
$date = $compilation->createElement('date');
$date->nodeValue = metadata($item, array('Dublin Core', 'Date'));
$edition->appendChild($date);
$editionStmt->appendChild($edition);
$respStmt = $compilation->createElement('repStmt');
$resp = $compilation->createElement('resp');
$resp->nodeValue = "chargé d'édition/chercheur";
$name = $compilation->createElement('name');
$name->nodeValue = metadata($item, array('Dublin Core', 'Contributor'));
$respStmt->appendChild($resp);
$respStmt->appendChild($name);
$editionStmt->appendChild($respStmt);
$fileDesc->appendChild($editionStmt);

$publicationStmt = $compilation->getElementsByTagName('publicationStmt')->item(0);
$publicationStmt->parentNode->removeChild($publicationStmt);
$publicationStmt = $compilation->createElement('publicationStmt');

$publisher = $compilation->createElement('publisher');
$publisher->nodeValue = metadata($item, array('Dublin Core', 'Publisher'));
$publicationStmt->appendChild($publisher);

$pubPlace = $compilation->createElement('pubPlace');
$pubPlace->nodeValue = 'PARIS';
$publicationStmt->appendChild($pubPlace);
$address = $compilation->createElement('address');
$addressLine = $compilation->createElement('addrLine');
$addressLine->nodeValue = 'http://eman-archives.org';
$address->appendChild($addressLine);
$publicationStmt->appendChild($address);

$idno = $compilation->createElement('idno');
$idno->nodeValue = metadata($item, array('Dublin Core', 'Identifier'));
$publicationStmt->appendChild($idno);
$date = $compilation->createElement('date');
$date->nodeValue = metadata($item, array('Dublin Core', 'Date'));
$publicationStmt->appendChild($date);

$availability = $compilation->createElement('availability');
$license = $compilation->createElement('license');
$license->nodeValue = metadata($item, array('Dublin Core', 'Rights'));
$availability->appendChild($license);
$publicationStmt->appendChild($availability);
$fileDesc->appendChild($publicationStmt);

$sourceDesc = $compilation->createElement('sourceDesc');
$bibl = $compilation->createElement('bibl');
$bibl->nodeValue = metadata($item, array('Dublin Core', 'Source'));
$sourceDesc->appendChild($bibl);
$fileDesc->appendChild($sourceDesc);

$profileDesc = $compilation->createElement('profileDesc');
$abstract = $compilation->createElement('abstract');
$abstract->nodeValue = metadata($item, array('Dublin Core', 'Description'));
$profileDesc->appendChild($abstract);
$textClass = $compilation->createElement('textClass');
$keywords = $compilation->createElement('keywords');
$schemeAttribute = $compilation->createAttribute('scheme');
$schemeAttribute->value = '???';
$keywords->appendChild($schemeAttribute);

$list = $compilation->createElement('list');
$list->nodeValue = '';

$keywords->appendChild($list);
$textClass->appendChild($keywords);
$profileDesc->appendChild($textClass);

$langUsage = $compilation->createElement('langUsage');
$language = $compilation->createElement('language');
$identAttribute = $compilation->createAttribute('ident');
$identAttribute->value = 'fre';
$language->appendChild($identAttribute);
$language->nodeValue = metadata($item, array('Dublin Core', 'Language'));
$langUsage->appendChild($language);
$profileDesc->appendChild($langUsage);

$teiHeader->appendChild($profileDesc);

$encodingDesc = $compilation->createElement('encodingDesc');
$projectDesc = $compilation->createElement('projectDesc');
$projectDesc->nodeValue = metadata($item, array('Dublin Core', 'Description'));
$encodingDesc->appendChild($projectDesc);
$teiHeader->appendChild($encodingDesc);

$textElement = $compilation->createElement('text');

$res = $mysqli->query("SELECT id, filename FROM " . $dbPrefix . "files WHERE item_id = $itemId ORDER BY id")->fetch_all(MYSQLI_ASSOC);

foreach ($res as $i => $fichier) {
  $xmlFileName = "../$instanceDir/teibp/transcriptions/" . str_replace(array('jpeg', 'jpg', 'png'), 'xml', strtolower($fichier['filename']));
  $docTranscription = new DOMDocument();
  if (@$fileContent = file_get_contents($xmlFileName)) {
    $docTranscription->loadXML($fileContent);
  } else {
    continue;
  }
  $transcriptionTags = $docTranscription->getElementsByTagName('body')->item(0)->childNodes;

  // Suppression du div racine inutile si présent
  // TODO : Voir comment gérer au cas par cas la suppression du tag racine ==>
/*
  if ($transcriptionTags->item(0)->tagName == 'div') {
    $transcriptionTags = $transcriptionTags->item(0)->childNodes;
  }
*/

  $transcriptionElement = $compilation->createElement('div');

  $urlAttribute = $compilation->createAttribute('url');
  $urlAttribute->value = 'http://eman-archives.org/' . $instanceDir . '/files/show/' . $fichier['id'];
  $transcriptionElement->appendChild($urlAttribute);

  $fileAttribute = $compilation->createAttribute('xmlid');
  $fileAttribute->value = $fichier['id'];
  $transcriptionElement->appendChild($fileAttribute);

  foreach($transcriptionTags as $transcription) {
    $transcription = $compilation->importNode($transcription, true);
    $transcriptionElement->appendChild($transcription);
  }
  $textElement->appendChild($transcriptionElement);
}
$bodyTag->appendChild($textElement);
$teiTag->appendChild($bodyTag);

// Clear all <i> tags
$lesI = $compilation->getElementsByTagName('i');
for ($x = $lesI->length; $x--; 0) {
  $i = $lesI->item($x);
  $i->parentNode->removeChild($i);
}

/* For some reason, xpath doesn't work here for <i> tags, or any tag. Works in Firefox on the same document though.
$xpath = new DOMXPath($compilation);
$xpath->registerNamespace('org','http://www.tei-c.org/ns/1.0');
$xpath->registerNamespace('org','http://www.w3.org/2001/XInclude');

$lesI = $xpath->query('//i');
// var_dump($xpath->evaluate('//*'));
var_dump($lesI);
foreach ($lesI as $node) {
  echo "<br/>[". $node->nodeName. "]";
  $node->parentNode->removeChild($node);
}
*/

$transcriptions = $compilation->saveXML($compilation->documentElement, LIBXML_NOXMLDECL);
// header('Content-Type: file/xml');
echo $transcriptions;

/*
function add($doc, $parent, $child, $value) {
  $child = $doc->createElement($child);
  $child->nodeValue = $value;
  if (! $existingParent = $doc->getElementByid($parent)) {
    $existingParent = $doc->createElement($parent);
  }
  $existingParent->appendChild($child);
  Zend_Debug::dump($existingParent);
}
*/

/*
$itemElement = $compilation->createElement('item');

$res = $mysqli->query("SELECT e.name name, t.text text FROM " . $dbPrefix . "element_texts t LEFT JOIN " . $dbPrefix . "elements e ON t.element_id = e.id WHERE t.record_id = $itemId AND t.record_type = 'Item' ORDER BY t.element_id, t.id")->fetch_all(MYSQLI_ASSOC);
foreach ($res as $i => $values) {
  if ($values['name'] == 'Title') {
    $title->nodeValue = 'Transcription des fichiers de la notice - ' . strip_tags($values['text']);
  }
  $itemDublinCoreElement = $compilation->createElement($values['name']);
  $itemDublinCoreElement->nodeValue = 'Transcription des fichiers de la notice - ' . strip_tags($values['text']);
  $itemElement->appendChild($itemDublinCoreElement);
}

$bodyTag->appendChild($itemElement);
*/