slub.team team mailing list archive
-
slub.team team
-
Mailing list archive
-
Message #00440
[Merge] lp:~sebastian-meyer/goobi-contrib/update into lp:goobi-contrib
Sebastian Meyer has proposed merging lp:~sebastian-meyer/goobi-contrib/update into lp:goobi-contrib.
Requested reviews:
Saxon State Library Team (slub.team)
For more details, see:
https://code.launchpad.net/~sebastian-meyer/goobi-contrib/update/+merge/208077
--
https://code.launchpad.net/~sebastian-meyer/goobi-contrib/update/+merge/208077
Your team Saxon State Library Team is requested to review the proposed merge of lp:~sebastian-meyer/goobi-contrib/update into lp:goobi-contrib.
=== added file '.buildpath'
--- .buildpath 1970-01-01 00:00:00 +0000
+++ .buildpath 2014-02-25 08:43:51 +0000
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<buildpath>
+ <buildpathentry kind="src" path=""/>
+ <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
+</buildpath>
=== modified file 'slub/imageproc/indexer/indexer.php'
--- slub/imageproc/indexer/indexer.php 2013-04-25 14:06:14 +0000
+++ slub/imageproc/indexer/indexer.php 2014-02-25 08:43:51 +0000
@@ -1,5 +1,15 @@
<?php
+$scan = array (
+// '/mnt/goobi',
+// '/mnt/goobi2',
+// '/mnt/goobi3',
+// '/mnt/goobi4',
+// '/mnt/goobi5',
+// '/mnt/goobi6',
+ '/mnt/goobi7',
+);
+
$roots = array (
'/mnt/goobi',
'/mnt/goobi2',
@@ -7,6 +17,7 @@
'/mnt/goobi4',
'/mnt/goobi5',
'/mnt/goobi6',
+ '/mnt/goobi7',
);
$pids = array (
@@ -25,7 +36,9 @@
'illustrierte' => 3,
);
-foreach ($roots as $root) {
+$lza_usrgrp = '601.610';
+
+foreach ($scan as $root) {
$clients = scandir($root);
@@ -44,7 +57,7 @@
foreach ($processes as $process) {
if ((preg_match('/^.+_[0-9]{8}[0-9A-Z]{1}(-[0-9]+)?(_.+)?$/i', $process)
- || preg_match('/^.+_DE-(1a|611)-[0-9]{1,7}_.+$/i', $dir))
+ || preg_match('/^.+_DE-(1a|611)-[0-9]{1,7}_.+$/i', $process))
&& is_dir($dir.'/'.$process)
&& file_exists($dir.'/'.$process.'/'.$process.'.xml')
&& file_exists($dir.'/'.$process.'/ready-for-indexing')
@@ -81,22 +94,52 @@
$corrupt = FALSE;
- echo "Indexing $proc ($ppn)...\n";
-
+ echo "Indexing $proc ($ppn)...\n";
+
exec('mv -f '.$dir.'/'.$proc.'/'.$proc.'.xml '.$dir.'/'.$proc.'/'.$proc.'_mets.xml');
- fixURN($dir.'/'.$proc.'/'.$proc.'_mets.xml');
+ $processId = fixMETS($dir.'/'.$proc.'/'.$proc.'_mets.xml');
if (file_exists($dir.'/'.$proc.'/'.$proc.'_anchor.xml')) {
- fixURN($dir.'/'.$proc.'/'.$proc.'_anchor.xml');
+ fixMETS($dir.'/'.$proc.'/'.$proc.'_anchor.xml');
}
+
+ echo " Goobi Process ID: $processId\n";
if (is_dir($dir.'/'.$proc.'/'.$proc.'_tif')) {
- echo " Images found! Moving all files to ";
+ echo " Images found! Moving all files to ";
+
+ if (!empty($processId) && file_exists('/mnt/lza/'.$processId)) {
+
+ if (file_exists($dir.'/'.$proc.'/tif.md5')) {
+
+ exec('mv -fu '.$dir.'/'.$proc.'/tif.md5 /mnt/lza/'.$processId.'/');
+
+ } else {
+
+ exec('cd /mnt/lza/'.$processId.' && md5sum images/scans_tif/*.tif > tif.md5');
+
+ }
+ if (file_exists($dir.'/'.$proc.'/'.$proc.'_anchor.xml')) {
+
+ exec('cp -fu '.$dir.'/'.$proc.'/'.$proc.'_anchor.xml /mnt/lza/'.$processId.'/');
+
+ }
+
+ exec('cp -fu '.$dir.'/'.$proc.'/'.$proc.'_mets.xml /mnt/lza/'.$processId.'/');
+
+ exec('cd /mnt/lza && chown -R '.$lza_usrgrp.' '.$processId);
+
+ } else {
+
+ exec('rm -rf '.$dir.'/'.$proc.'/tif.md5');
+
+ }
+
$update = FALSE;
foreach ($roots as $root) {
@@ -221,14 +264,14 @@
}
-function fixURN($file) {
+function fixMETS($file) {
$xml = simplexml_load_file($file);
$xml->registerXPathNamespace('mets', 'http://www.loc.gov/METS/');
- $xml->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3');
-
+ $xml->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3');
+
$urns = $xml->xpath('//mods:identifier[@type="urn"]');
foreach ($urns as $urn) {
@@ -237,7 +280,57 @@
}
- file_put_contents($file, $xml->asXML());
+ $_processId = $xml->xpath('//mets:fileGrp[@USE="LOCAL"]/mets:file/mets:FLocat');
+
+ if (!empty($_processId[0])) {
+
+ $processId = intval(preg_replace('%^file:/{1,3}home/goobi/work/daten/%i', '', (string) $_processId[0]->attributes('http://www.w3.org/1999/xlink')->href));
+
+ } else {
+
+ $processId = 0;
+
+ }
+
+ $_schemaLocations = $xml->xpath('/mets:mets');
+
+ foreach ($_schemaLocations as $_schemaLocation) {
+
+ $_schemas = explode(' ', $_schemaLocation->attributes('http://www.w3.org/2001/XMLSchema-instance')->schemaLocation);
+
+ for ($i = 0; $i < count($_schemas); $i++) {
+
+ if ($_schemas[$i] == 'http://www.loc.gov/mods/v3') {
+
+ $_schemas[$i + 1] = 'http://www.loc.gov/standards/mods/mods.xsd';
+
+ } elseif ($_schemas[$i] == 'http://www.loc.gov/METS/') {
+
+ $_schemas[$i + 1] = 'http://www.loc.gov/standards/mets/mets.xsd';
+
+ }
+
+ }
+
+ $_schemaLocation->attributes('http://www.w3.org/2001/XMLSchema-instance')->schemaLocation = implode(' ', $_schemas);
+
+ }
+
+ $_languages = $xml->xpath('//mods:language[count(./mods:scriptTerm)>0][count(./mods:languageTerm)=0]');
+
+ foreach ($_languages as $_language) {
+
+ $_dom = dom_import_simplexml($_language);
+
+ $_insert = $_dom->insertBefore($_dom->ownerDocument->createElementNS('http://www.loc.gov/mods/v3', 'mods:languageTerm'), $_dom->firstChild);
+
+ $_language = simplexml_import_dom($_insert);
+
+ }
+
+ file_put_contents($file, $xml->asXML());
+
+ return $processId;
}
=== modified file 'slub/imageproc/processing/processing.php'
--- slub/imageproc/processing/processing.php 2013-04-25 14:06:14 +0000
+++ slub/imageproc/processing/processing.php 2014-02-25 08:43:51 +0000
@@ -1,14 +1,17 @@
<?php
$bases = array (
- '/mnt/goobi',
- '/mnt/goobi2',
- '/mnt/goobi3',
- '/mnt/goobi4',
- '/mnt/goobi5',
- '/mnt/goobi6',
+// '/mnt/goobi',
+// '/mnt/goobi2',
+// '/mnt/goobi3',
+// '/mnt/goobi4',
+// '/mnt/goobi5',
+// '/mnt/goobi6',
+ '/mnt/goobi7',
);
+$lza = false;
+
$scriptpath = dirname(__FILE__);
foreach ($bases as $base) {
@@ -96,135 +99,159 @@
}
- unset ($output);
-
- $output = array ();
-
if (!empty($ppn)
- && !is_dir($root.'/'.$directory.'/'.$directory.'_tif')) {
-
- echo "No TIFFs available, but XML metadata found. Doing nothing...\n";
-
- exec('chown -R root.root '.$root.'/'.$directory.'/', $output);
-
- exec('chmod 644 '.$root.'/'.$directory.'/'.$directory.'.xml', $output);
-
- exec('touch '.$root.'/'.$directory.'/ready-for-indexing', $output);
-
- if (!empty($output)) {
-
- echo ' '.implode("\n ", $output)."\n";
-
- }
-
- echo "Done!\n";
-
+ && !is_dir($root.'/'.$directory.'/'.$directory.'_tif')) {
+
+ echo " No TIFFs available, but XML metadata found. Doing nothing...\n";
+
+ exec('chown -R root.root '.$root.'/'.$directory.'/');
+
+ exec('chmod 644 '.$root.'/'.$directory.'/'.$directory.'.xml');
+
+ exec('touch '.$root.'/'.$directory.'/ready-for-indexing');
+
+ echo "Done!\n";
+
} elseif (!empty($ppn)
- && is_dir($root.'/'.$directory.'/'.$directory.'_tif')) {
-
- echo "TIFFs and XML metadata found. Doing full image processing...\n";
-
- $lock = $root.'/'.$directory;
-
- exec('chown -R root.root '.$lock.'/', $output);
-
- exec('chmod 755 '.$lock.'/', $output);
-
- exec('chmod 755 '.$lock.'/'.$directory.'_tif/', $output);
-
- exec('mkdir -m777 '.$lock.'/'.$directory.'_tif/jpegs', $output);
-
- $xml = @simplexml_load_file($lock.'/'.$directory.'.xml');
-
- $xml->registerXPathNamespace('mets', 'http://www.loc.gov/METS/');
-
- $xml->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3');
-
- $xml->registerXPathNamespace('slub', 'http://slub-dresden.de/');
-
- $_footer = $xml->xpath('//slub:footer');
-
- if (!empty($_footer[0])) {
-
- $footer = (string) $_footer[0];
-
- } else {
-
- $footer = $client;
-
- }
-
- unset ($tiffs);
-
- $tiffs = scandir($lock.'/'.$directory.'_tif');
-
- $i = 0;
-
- foreach ($tiffs as $tiff) {
-
+ && is_dir($root.'/'.$directory.'/'.$directory.'_tif')) {
+
+ echo " TIFFs and XML metadata found. Doing full image processing...\n";
+
+ $lock = $root.'/'.$directory;
+
+ exec('chown -R root.root '.$lock.'/');
+
+ exec('chmod 755 '.$lock.'/');
+
+ exec('chmod 755 '.$lock.'/'.$directory.'_tif/');
+
+ exec('mkdir -m777 '.$lock.'/'.$directory.'_tif/jpegs');
+
+ $xml = @simplexml_load_file($lock.'/'.$directory.'.xml');
+
+ $xml->registerXPathNamespace('mets', 'http://www.loc.gov/METS/');
+
+ $xml->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3');
+
+ $xml->registerXPathNamespace('slub', 'http://slub-dresden.de/');
+
+ $_processId = $xml->xpath('//mets:fileGrp[@USE="LOCAL"]/mets:file/mets:FLocat');
+
+ if (!empty($_processId[0])) {
+
+ $processId = intval(preg_replace('%^file:/{1,3}home/goobi/work/daten/%i', '', (string) $_processId[0]->attributes('http://www.w3.org/1999/xlink')->href));
+
+ } else {
+
+ $processId = 0;
+
+ }
+
+ echo " Goobi Process ID: $processId\n";
+
+ $_footer = $xml->xpath('//slub:footer');
+
+ if (!empty($_footer[0])) {
+
+ $footer = (string) $_footer[0];
+
+ } else {
+
+ $footer = $client;
+
+ }
+
+ echo " Using footer: $footer\n";
+
+ unset ($tiffs);
+
+ $tiffs = scandir($lock.'/'.$directory.'_tif');
+
+ $i = 0;
+
+ foreach ($tiffs as $tiff) {
+
if (is_file($lock.'/'.$directory.'_tif/'.$tiff)
- && preg_match('/^[0-9]{8}\.tif$/', $tiff)) {
-
- $i++;
-
- exec('convert '.$lock.'/'.$directory.'_tif/'.$tiff.' -quiet -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 500 -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg', $output);
-
- exec('montage '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg '.$scriptpath.'/images/'.$footer.'_500.gif -tile 1x2 -geometry +0+0 -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg -gravity southeast -stroke none -fill black -annotate +0+25 \'http://digital.slub-dresden.de/id'.$ppn.'/'.$i.'\' -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 1000 -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg', $output);
-
- exec('montage '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg '.$scriptpath.'/images/'.$footer.'_1000.gif -tile 1x2 -geometry +0+0 -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg -gravity south -stroke none -fill white -annotate +25+25 \'http://digital.slub-dresden.de/id'.$ppn.'/'.$i.'\' -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg -strip -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.pdf', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 2000 -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg', $output);
-
- exec('montage '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg '.$scriptpath.'/images/'.$footer.'_2000.gif -tile 1x2 -geometry +0+0 -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg -gravity south -stroke none -fill white -annotate +50+50 \'http://digital.slub-dresden.de/id'.$ppn.'/'.$i.'\' -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg', $output);
-
- exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 150x150 -strip -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.thumbnail.jpg', $output);
-
- }
-
- }
-
- exec('cd '.$lock.'/'.$directory.'_tif/jpegs && pdftk *.pdf cat output '.$ppn.'.pdf', $output);
-
- exec('cd '.$lock.' && ln -sf '.$directory.'_tif '.$ppn.'_tif', $output);
-
- exec('cd '.$lock.'/'.$directory.'_tif && rm -f *.tif', $output);
-
- exec('cd '.$lock.' && ln -sf '.$directory.'_xml '.$ppn.'_ocr', $output);
-
- exec('cd '.$lock.' && rm -rf '.$directory.'_abbyy', $output);
-
- exec('cd '.$lock.' && rm -rf '.$directory.'_alto', $output);
-
- exec('touch '.$lock.'/ready-for-indexing', $output);
-
- if (!empty($output)) {
-
- echo ' '.implode("\n ", $output)."\n";
-
- }
-
- echo "Done!\n";
-
- }
-
- }
-
- }
-
-}
-
-}
-
+ && preg_match('/^[0-9]{8}\.tif$/', $tiff)) {
+
+ $i++;
+
+ exec('convert '.$lock.'/'.$directory.'_tif/'.$tiff.' -quiet -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 500 -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg');
+
+ exec('montage '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg '.$scriptpath.'/images/'.$footer.'_500.gif -tile 1x2 -geometry +0+0 -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg -gravity southeast -stroke none -fill black -annotate +0+25 \'http://digital.slub-dresden.de/id'.$ppn.'/'.$i.'\' -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.small.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 1000 -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg');
+
+ exec('montage '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg '.$scriptpath.'/images/'.$footer.'_1000.gif -tile 1x2 -geometry +0+0 -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg -gravity south -stroke none -fill white -annotate +25+25 \'http://digital.slub-dresden.de/id'.$ppn.'/'.$i.'\' -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.medium.jpg -strip -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.pdf');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 2000 -quality 75 -strip '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg');
+
+ exec('montage '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg '.$scriptpath.'/images/'.$footer.'_2000.gif -tile 1x2 -geometry +0+0 -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg -gravity south -stroke none -fill white -annotate +50+50 \'http://digital.slub-dresden.de/id'.$ppn.'/'.$i.'\' -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.large.jpg');
+
+ exec('convert '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.original.jpg -scale 150x150 -strip -quality 75 '.$lock.'/'.$directory.'_tif/jpegs/'.$tiff.'.thumbnail.jpg');
+
+ }
+
+ }
+
+ exec('cd '.$lock.'/'.$directory.'_tif/jpegs && pdftk *.pdf cat output '.$ppn.'.pdf');
+
+ exec('cd '.$lock.' && ln -sf '.$directory.'_tif '.$ppn.'_tif');
+
+ if ($lza && !empty($processId)) {
+
+ exec('mkdir -m770 /mnt/lza/'.$processId);
+
+ exec('mkdir -p /mnt/lza/'.$processId.'/images/scans_tif');
+
+ exec('cd '.$lock.'/'.$directory.'_tif && mv -fu *.tif /mnt/lza/'.$processId.'/images/scans_tif/');
+
+ } else {
+
+ exec('cd '.$lock.'/'.$directory.'_tif && rm -rf *.tif');
+
+ }
+
+ if (file_exists($lock.'/'.$directory.'_xml')) {
+
+ if ($lza && !empty($processId)) {
+
+ exec('mkdir -p /mnt/lza/'.$processId.'/ocr/'.$directory.'_xml');
+
+ exec('cd '.$lock.'/'.$directory.'_xml && cp -fu *.xml /mnt/lza/'.$processId.'/ocr/'.$directory.'_xml/');
+
+ }
+
+ exec('cd '.$lock.' && ln -sf '.$directory.'_xml '.$ppn.'_ocr');
+
+ }
+
+ exec('cd '.$lock.' && rm -rf '.$directory.'_abbyy');
+
+ exec('cd '.$lock.' && rm -rf '.$directory.'_alto');
+
+ exec('touch '.$lock.'/ready-for-indexing');
+
+ echo "Done!\n";
+
+ }
+
+ }
+
+ }
+
+}
+
+}
+
?>
\ No newline at end of file
=== added directory 'slub/piwik'
=== added directory 'slub/piwik/plugins'
=== added directory 'slub/piwik/plugins/DigitalCollections'
=== added file 'slub/piwik/plugins/DigitalCollections/API.php'
--- slub/piwik/plugins/DigitalCollections/API.php 1970-01-01 00:00:00 +0000
+++ slub/piwik/plugins/DigitalCollections/API.php 2014-02-25 08:43:51 +0000
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * API für Datenanzeige und Archivverwaltung der digitalen Kollektionen der SLUB.
+ * @author Nikolaus Thuemmel
+ * @package DigitalCollections
+ *
+ */
+
+require_once PIWIK_INCLUDE_PATH . '/plugins/DigitalCollections/functions.php';
+
+class Piwik_DigitalCollections_API {
+
+ static private $instance = null;
+
+ static public function getInstance() {
+ if (self::$instance == null) {
+ self::$instance = new self;
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Anzahl der Kollektionsaufrufe abfragen.
+ * @return Piwik_DataTable
+ */
+ public function getCollectionTable( $idSite, $period, $date, $segment = false) {
+ $dataTable = self::getCollectionTableFromArchive($idSite, $period, $date, $segment);
+ self::filterCollectionTableContent($dataTable, "Projekt:", false);
+ return $dataTable;
+ }
+
+ public function getCollectionTableProjects( $idSite, $period, $date, $segment = false) {
+ $dataTable = self::getCollectionTableFromArchive($idSite, $period, $date, $segment);
+ self::filterCollectionTableContent($dataTable, "Projekt:", true);
+ return $dataTable;
+ }
+
+
+ /**
+ * Gibt eine sortierte DataTable mit Kollektionen aus den Archiven zur�ck.
+ * @param int $idSite
+ * @param unknown_type $period
+ * @param unknown_type $date
+ * @param boolean $segment
+ * @return Piwik_DataTable
+ */
+ protected function getCollectionTableFromArchive($idSite, $period, $date, $segment) {
+ // defined('PIWIK_INCLUDE_PATH') or die('Restricted access');
+ Piwik_cdebug::clog('getCollectionTableFromArchive: ' . $idSite . ' period: '.$period);
+ Piwik::checkUserHasViewAccess( $idSite );
+
+ $archive = Piwik_Archive::build($idSite, $period, $date, $segment );
+ $dataTable = $archive->getDataTable("DigitalCollections_value");
+
+ Piwik_cdebug::clog('getCollectionTableFromArchive: dataTable: ' . count($dataTable));
+ Piwik_cdebug::clog('getCollectionTableFromArchive: dataTable: ' . print_r($dataTable, 1));
+
+ $dataTable->filter('Sort', array(Piwik_DigitalCollections::$valuefield, 'desc'));
+
+ $dataTable->filter('ColumnCallbackAddMetadata', array( 'label', 'url', 'getCollectionUrlFromID', array($date,$period)));
+ $dataTable->filter('ColumnCallbackReplace', array('label', 'getCollectionNames'));
+ $dataTable->filter('ReplaceColumnNames');
+
+ //INDEX_NB_VISITS-Spalte zur richtigen Graphen-Anzeige hinzuf�gen --> ACHTUNG! Muss im Controller ausgeblendet werden!
+ $rows = $dataTable->getRows();
+ Piwik_cdebug::clog('getCollectionTableFromArchive: rows: '. count($rows));
+ foreach($rows as $i => $row) {
+ Piwik_cdebug::clog('getCollectionTableFromArchive: '.$i);
+ $row->addColumn(Piwik_Archive::INDEX_NB_VISITS, $row->getColumn("visits"));
+ }
+
+ return $dataTable;
+ }
+
+
+ /**
+ * Filtert Kollektionsdaten nach Strings. -> z.B. Unterscheidung Standard <-> Projekt
+ * @param Piwik_DataTable $dataTable
+ * @param String $filter
+ * @param boolean $bool
+ */
+ private static function filterCollectionTableContent($dataTable, $filter, $bool) {
+ $rows = $dataTable->getRows();
+ Piwik_cdebug::clog('filterCollectionTableContent: rows: '. count($rows));
+ foreach($rows as $i => $row) {
+ $label = $row->getColumn('label');
+ if( (strpos($label, $filter)!==false) XOR ($bool) ) $dataTable->deleteRow($i);
+ }
+ }
+
+}
+
+function getCollectionUrlFromID($id,$date,$period) {
+ $pidSite = Piwik_FetchOne("SELECT idSite FROM ".Piwik_Common::prefixTable("site_collections")." WHERE cID = ?", $id);
+
+ Piwik_cdebug::clog('getCollectionUrlFromID: ' . 'http://piwik.slub-dresde.de/index.php?module=CoreHome&action=index&date='.$date.'&period='.$period.'&idSite='.$pidSite);
+
+ if(is_numeric($pidSite)) {
+ return "http://piwik.slub-dresden.de/index.php?module=CoreHome&action=index&date=".$date."&period=".$period."&idSite=".$pidSite;
+ }
+}
+
+
+?>
=== added file 'slub/piwik/plugins/DigitalCollections/Controller.php'
--- slub/piwik/plugins/DigitalCollections/Controller.php 1970-01-01 00:00:00 +0000
+++ slub/piwik/plugins/DigitalCollections/Controller.php 2014-02-25 08:43:51 +0000
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ *
+ * @author Nikolaus Th�+ * @package DigitalCollections
+ *
+ */
+
+require_once PIWIK_INCLUDE_PATH . '/plugins/DigitalCollections/functions.php';
+
+class Piwik_DigitalCollections_Controller extends Piwik_Controller {
+
+ public function collections($fetch = false) {
+
+ $view = Piwik_ViewDataTable::factory();
+ $view->init( $this->pluginName, __FUNCTION__, "DigitalCollections.getCollectionTable" );
+
+ $this->configView($view);
+
+ return $this->renderView($view,$fetch);
+ }
+
+ public function collections_projects($fetch = false) {
+
+ $view = Piwik_ViewDataTable::factory();
+ $view->init( $this->pluginName, __FUNCTION__, "DigitalCollections.getCollectionTableProjects" );
+
+ $this->configView($view);
+
+ return $this->renderView($view,$fetch);
+ }
+
+ private function configView($view) {
+ $view->setColumnTranslation(Piwik_DigitalCollections::$valuefield, "Aufrufe");
+ $view->setColumnTranslation('label', "Kollektion");
+ $view->setSortedColumn(Piwik_DigitalCollections::$valuefield,'desc');
+ $view->setColumnsToDisplay( array('label', Piwik_DigitalCollections::$valuefield) );
+ //$view->disableSort();
+ $view->setGraphLimit(8);
+ $view->setLimit(10);
+ $view->disableShowAllColumns();
+ //$view->disableExcludeLowPopulation();
+ $this->setGeneralVariablesView($view);
+ }
+
+}
+
+?>
=== added file 'slub/piwik/plugins/DigitalCollections/DigitalCollections.php'
--- slub/piwik/plugins/DigitalCollections/DigitalCollections.php 1970-01-01 00:00:00 +0000
+++ slub/piwik/plugins/DigitalCollections/DigitalCollections.php 2014-02-25 08:43:51 +0000
@@ -0,0 +1,308 @@
+<?php
+/**
+ * Ordnet aufgerufene Digitalisate in Echtzeit Kollektionen zu; implementiert grafische Schnittstelle.
+ *
+ * @author Nikolaus Th�mmel
+ * @package DigitalCollections
+ *
+ */
+
+require_once PIWIK_INCLUDE_PATH . '/plugins/DigitalCollections/functions.php';
+
+class Piwik_DigitalCollections extends Piwik_Plugin {
+
+
+ public static $valuefield = 'visits';
+
+ /**
+ * Return information about this plugin.
+ *
+ * @see Piwik_Plugin
+ *
+ * @return array
+ */
+ public function getInformation()
+ {
+ return array(
+ 'description' => "Ermittelt die Aufrufe digitaler Kollektionen.",
+ 'homepage' => 'http://www.slub-dresden.de/',
+ 'author' => 'Nikolaus Thuemmel, Alexander Bigga',
+ 'author_homepage' => '',
+ 'version' => '0.2',
+ 'translationAvailable' => false,
+ 'TrackerPlugin' => true,
+ );
+ }
+
+
+ /* Erstellt Datenbank f�r Zuordnung Kollektion->idSite
+ * @see Piwik_Plugin::install()
+ */
+ public function install() {
+ Piwik_Query("CREATE TABLE IF NOT EXISTS ".Piwik_Common::prefixTable("site_collections")." (ID INT(11) AUTO_INCREMENT PRIMARY KEY, cID INT(11), idSite INT(10))");
+ }
+
+
+ /**
+ * Widgets f�r Kollektionen registrieren.
+ * @param Piwik_Event_Notification $notification
+ */
+ function addWidget($notification) {
+ Piwik_AddWidget('SLUB', 'Kollektionen', 'DigitalCollections', 'collections');
+ Piwik_AddWidget('SLUB', 'Kollektionen - Projekte', 'DigitalCollections', 'collections_projects');
+ }
+
+
+ /**
+ * Hooks registrieren.
+ * @see Piwik_Plugin::getListHooksRegistered()
+ */
+ public function getListHooksRegistered()
+ {
+ return array(
+ 'WidgetsList.add' => 'addWidget',
+ 'ArchiveProcessing_Day.compute' => 'archiveDay',
+ 'ArchiveProcessing_Period.compute' => 'archivePeriod',
+ 'Tracker.Action.record' => 'redirectCollections',
+ );
+ }
+
+
+ function archivePeriod( $notification )
+ {
+ Piwik_cdebug::clog('archivePeriod');
+
+ try {
+ $archiveProcessing = $notification->getNotificationObject();
+ if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) {
+ $this->clog("archivePeriod-Error: return");
+// return;
+ }
+
+ $dataTableToSum = array(
+ 'DigitalCollections_value',
+ );
+ $archiveProcessing->archiveDataTable($dataTableToSum);
+ } catch(Exception $e) {
+ Piwik_cdebug::clog("archivePeriod-Error: ".$e->getMessage());
+ }
+ }
+
+
+ public function archiveDay( $notification )
+ {
+ Piwik_cdebug::clog('archiveDay');
+ try {
+ $archiveProcessing = $notification->getNotificationObject();
+ if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) {
+ $this->clog("archiveDay-Error: return");
+ return;
+ }
+
+ $recordName = 'DigitalCollections_value';
+ $table = $this->getCollectionData($archiveProcessing);
+ $columnToSortByBeforeTruncation = self::$valuefield;
+ $archiveProcessing->insertBlobRecord($recordName, $archiveProcessing->getDataTableSerialized($table), null, $columnToSortByBeforeTruncation);
+ } catch(Exception $e) {
+ Piwik_cdebug::clog("archiveDay-Error: ".$e->getMessage());
+ }
+ }
+
+
+ /**
+ * Ordnet f�r den gegebenen Archivzeitraum allen Digitalisat-URLs Kollektionen zu,
+ * und archiviert diese.
+ * @param Piwik_ArchiveProcessing_Day $archiveProcessing
+ * @return Piwik_DataTable
+ */
+ private function getCollectionData($archiveProcessing) {
+
+ Piwik_cdebug::clog('getCollectionData');
+
+ $collections = array();
+ $query = $archiveProcessing->queryActionsByDimension('idaction_url');
+ while($row = $query->fetch()) {
+ $url = Piwik_FetchOne("SELECT name FROM ".Piwik_Common::prefixTable("log_action")." WHERE idaction = ?", $row["label"]);
+ $idcollections = $this->getCollectionsForURL($url);
+ if(!is_array($idcollections) || count($idcollections)<1) continue;
+ foreach($idcollections as $c) {
+ if(!array_key_exists($c, $collections)) {
+ $collections[$c] = array(self::$valuefield=>1);
+ } else {
+ $collections[$c][self::$valuefield]++;
+ }
+ }
+ }
+
+ return $collections;
+ }
+
+
+ /**
+ * L�dt Kollektions-IDs aus der TYPO3-Datenbank f�r eine bestimmte URL (und damit ID).
+ * @param String $url
+ * @return array
+ */
+ private function getCollectionsForURL($url) {
+
+ // this function is called on every piwik call
+ // we are only interested in calls for dlf-extension
+ if (strpos($url, "dlf") === FALSE)
+ return NULL;
+
+ // try to find the id of the digitalisat
+ $urlparsed = parse_url(urldecode($url));
+ // default
+ $id = 0;
+
+ // 1st try:
+ // urls like: http://digital.slub-dresden.de/werkansicht/cache.off?id=5363&tx_dlf[id]=15997&tx_dlf[page]=10
+ if (!empty($urlparsed['query'])) {
+ $qfields = preg_split('/[;&]/', $urlparsed['query']);
+ $params = array();
+ foreach ($qfields as $param) {
+ $item = explode('=', $param);
+ if (sizeof($item)==2)
+ $params[$item[0]] = $item[1];
+ }
+ if (isset($params['tx_dlf[id]']))
+ $id = $params['tx_dlf[id]'];
+ }
+
+ // 2nd try:
+ // urls like: http://digital.slub-dresden.de/werkansicht/dlf/2967/57/cache.off
+ if ($id <=0) {
+ $this->clog("getCollectionsForURL: " . $urlparsed['path']);
+ $qsplit = explode("/",$urlparsed['path']);
+ $idpos = array_search('dlf', $qsplit) + 1;
+ $id = intval($qsplit[$idpos]);
+ }
+ $this->clog("getCollectionsForURL(".$url."). id=/". $id."/");
+
+ // none was successful --> abort
+ if ($id <=0)
+ return NULL;
+
+ $mysqli = mysqli_connect("MYSQLSERVER","USER","PASSWORD", "DATABASE");
+ mysqli_set_charset($mysqli, 'utf8');
+
+ // ID DER KOLLEKTIONEN ZUORDNEN
+ $result = mysqli_query($mysqli, "SELECT uid_foreign FROM tx_dlf_relations WHERE ident='docs_colls' AND uid_local=".$id);
+ Piwik_cdebug::clog("getCollectionsForURL: SELECT uid_foreign FROM tx_dlf_relations WHERE ident='docs_colls' AND uid_local=".$id);
+ $collections = array();
+ if ($result) {
+ while($tmpc = mysqli_fetch_row($result)) {
+ $collections[] = $tmpc[0];
+ }
+ } else
+ Piwik_cdebug::clog("getCollectionsForURL(".$url.") --> no result!");
+
+ mysqli_close($mysqli);
+
+ Piwik_cdebug::clog("getCollectionsForURL(".$url.")".print_r($collections, 1));
+
+ return $collections;
+ }
+
+
+ /**
+ * Log-Erstellung. debugging.
+ * @param String $str
+ */
+ private function clog($str) {
+ return;
+ $file = fopen("/var/log/piwik-collection_log.txt", "a");
+ fputs($file, strftime('%c') . ': ' . $str."\n");
+ fclose($file);
+ }
+
+
+
+ /**
+ * Kollektionen werden an Kollektions-idSites weitergeleitet und f�llen ihre eigene Statistik.
+ * @param unknown_type $notification
+ */
+ public function redirectCollections($notification) {
+ try {
+ if($tmp = Piwik_Common::getRequestVar("colacnt","false","string")=="true") return;
+ $openedurl = Piwik_Common::getRequestVar("url");
+ $collections = $this->getCollectionsForURL($openedurl);
+ if($collections==null || count($collections)<1) return;
+ require_once PIWIK_INCLUDE_PATH .'/core/Loader.php';
+
+ $murl = $this->curPageURL();
+ $ua = $_SERVER["HTTP_USER_AGENT"];
+ $acceptLanguage = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
+
+ foreach($collections as $c) {
+ $idSite = Piwik_FetchOne("SELECT idSite FROM ".Piwik_Common::prefixTable("site_collections")." WHERE cID = ?", $c);
+ $name = "(Kollektion) ".getCollectionNames($c);
+
+ //Kollektion hat noch keine idSite! -> wird erstellt
+ if(!is_numeric($idSite)) {
+ Piwik_Query("INSERT INTO ".Piwik_Common::prefixTable("site").
+ " (idsite, name, main_url, ts_created, timezone, currency, excluded_ips, excluded_parameters, `group`) ".
+ "VALUES('', ?, ?, NOW(), 'Europe/Berlin', 'EUR', '', '', 'Digitale Kollektionen')",
+ array($name, "slub-dresden.de"));
+ $idSite = Piwik_FetchOne("SELECT LAST_INSERT_ID() FROM ".Piwik_Common::prefixTable("site"));
+ Piwik_Query("INSERT INTO ".Piwik_Common::prefixTable("site_collections")." (ID, cID, idSite) VALUES ('', ?, ?)",array($c,$idSite));
+ }
+
+ //idSite zur Kollektion wurde gel�scht! -> neu erstellen
+ if(Piwik_FetchOne("SELECT COUNT(idsite) FROM ".Piwik_Common::prefixTable("site")." WHERE idsite = ?",$idSite)==0) {
+ Piwik_Query("INSERT INTO ".Piwik_Common::prefixTable("site").
+ " (idsite, name, main_url, ts_created, timezone, currency, excluded_ips, excluded_parameters, `group`) ".
+ "VALUES(?, ?, ?, NOW(), 'Europe/Berlin', 'EUR', '', '', 'Digitale Kollektionen')",
+ array($idSite, $name, "slub-dresden.de"));
+ }
+
+ $url = preg_replace("/idsite=[0-9]+/", "idsite=".$idSite, $murl);
+ // Erneute Kollektionsweiterleitung verhindern
+ $url .= "&colacnt=true";
+ // Disable provider plugin
+ $url .= "&dp=1";
+ Piwik_Http::sendHttpRequest($url, 5, $ua, null, 0, $acceptLanguage);
+ }
+ } catch (Exception $e) {
+ $this->clog("redirectCollections-Error: ".$e->getMessage());
+ }
+ }
+
+
+ /**
+ * Quelle: http://www.webcheatsheet.com/PHP/get_current_page_url.php
+ * @return string
+ */
+ private function curPageURL() {
+ $pageURL = 'http';
+ if (@$_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
+ $pageURL .= "://";
+ if ($_SERVER["SERVER_PORT"] != "80") {
+ $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
+ } else {
+ $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
+ }
+ return $pageURL;
+ }
+
+
+}
+
+
+/**
+ * L�st Kollektions-IDs in Namen auf.
+ * @param String $label
+ * @return String
+ */
+function getCollectionNames($label) {
+ Piwik_cdebug::clog('getCollectionNames: '.$label);
+ $mysqlh = mysql_connect("MYSQLSERVER","USER","PASSWORD");
+ mysql_set_charset('utf8', $mysqlh);
+ mysql_select_db("DATABASE",$mysqlh);
+ $result = mysql_query("SELECT label FROM tx_dlf_collections WHERE uid=".$label,$mysqlh);
+ $row = mysql_fetch_row($result);
+ mysql_close($mysqlh);
+ return $row[0];
+}
+
+?>
=== added file 'slub/piwik/plugins/DigitalCollections/functions.php'
--- slub/piwik/plugins/DigitalCollections/functions.php 1970-01-01 00:00:00 +0000
+++ slub/piwik/plugins/DigitalCollections/functions.php 2014-02-25 08:43:51 +0000
@@ -0,0 +1,18 @@
+<?PHP
+
+class Piwik_cdebug {
+ /**
+ * debugging.
+ * @param String $str
+ */
+ public function clog($str) {
+ // deactivated by default
+ return;
+
+ $file = fopen("/var/log/piwik-collection_log.txt", "a");
+ fputs($file, strftime('%c') . ': ' . $str."\n");
+ fclose($file);
+ }
+
+}
+?>