diff --git a/assets/.htaccess b/assets/.htaccess new file mode 100644 index 0000000..28cc359 --- /dev/null +++ b/assets/.htaccess @@ -0,0 +1,7 @@ + + Order allow,deny + Allow from all + + + Require all granted + \ No newline at end of file diff --git a/assets/bepiwikcharts.css b/assets/bepiwikcharts.css new file mode 100644 index 0000000..8e0a322 --- /dev/null +++ b/assets/bepiwikcharts.css @@ -0,0 +1,151 @@ +#be_piwikcharts div.piwikinfo p { + color:grey; + font-size:80% +} + +#be_piwikcharts div.serverinfo { + background: #fafafa; + border: 1px dotted grey; + padding: 10px; + margin: 0px 0px 20px 0px; +} + +#be_piwikcharts div.serverinfo div.piwikserver { + margin-top:20px; +} + +#be_piwikcharts div.summary { + float:right; + margin-right: 10px; +} + +#be_piwikcharts div.summary table td.col0, +#be_piwikcharts div.summary table td.col1 { + text-align: right; +} + +#be_piwikcharts div.serverinfo a.extern { + background: url('./linkarrow.gif') no-repeat right center; + padding-right: 8px; +} + +#be_piwikcharts div.serverinfo a.goToSettings { + background: url('./gear.png') no-repeat right center; + padding-right: 16px; +} + +#be_piwikcharts div.serverinfo a.optOut { + background: url('./optout.png') no-repeat right center; + padding-right: 15px; +} + +#be_piwikcharts div.serverinfo a.update { + background: url('./update.png') no-repeat right center; + padding-right: 16px; + font-weight: bold; +} + +#be_piwikcharts div.serverinfo a.print { + background: url('./print.gif') no-repeat right center; + padding-right: 17px; +} + +#be_piwikcharts div.serverinfo span.settings { + text-align:right; + display:block; +} + +#be_piwikcharts table{ + border-collapse: collapse; + width: 100%; +} + +#be_piwikcharts table th, #be_piwikcharts table td{ + text-align: center; +} + +#be_piwikcharts table.graphes{ + width: 100%; +} + +#be_piwikcharts table.graphes th{ + width: 50%; +} + +#be_piwikcharts table.graphes td{ + background: url('./laden.gif') no-repeat center center; + height: 100px; +} + + +#be_piwikcharts table.downloads td, +#be_piwikcharts table.downloads th, +#be_piwikcharts table.data td{ + border: 1px solid grey; + padding: 3px 10px; +} + +#be_piwikcharts table.data th.col0{ + text-align: center; + width:40%; +} + +#be_piwikcharts table.data td.col0{ + border-right: 0px; + text-align: right; +} + +#be_piwikcharts table.data td.col1{ + background: #f0f0f0; + border-left: 0px; + width:10%; + text-align: center; +} + +#be_piwikcharts table.downloads td.col1{ + background: #f0f0f0; + text-align: right; +} + +#be_piwikcharts table.downloads tr:hover, +#be_piwikcharts table.data tr:hover{ + background: #f0f0f0; +} + +#be_piwikcharts table.downloads th, +#be_piwikcharts table.data th{ + border: 1px solid grey; + background: #f0f0f0; + padding: 3px 10px; +} + +#be_piwikcharts table.data th.col0{ + border-right: 0px; +} + +#be_piwikcharts table.data th.col1{ + border-left: 0px; +} + +#be_piwikcharts img { + margin-right: 20px; +} + +@media print{ +#left, #header, #main h1.main_headline, +#be_piwikcharts div.serverinfo, #footer{ + display: none; +} +h1, h2, h3 { + font-size: 18px; +} + +hr { + color: grey; + background-color: grey; + border: 1px grey solid; + height: 1px; +} + + +} \ No newline at end of file diff --git a/assets/gear.png b/assets/gear.png new file mode 100644 index 0000000..75c2626 Binary files /dev/null and b/assets/gear.png differ diff --git a/assets/laden.gif b/assets/laden.gif new file mode 100644 index 0000000..39615c8 Binary files /dev/null and b/assets/laden.gif differ diff --git a/assets/linkarrow.gif b/assets/linkarrow.gif new file mode 100644 index 0000000..ab5d5ea Binary files /dev/null and b/assets/linkarrow.gif differ diff --git a/assets/optout.png b/assets/optout.png new file mode 100644 index 0000000..07cf174 Binary files /dev/null and b/assets/optout.png differ diff --git a/assets/piwikicon.gif b/assets/piwikicon.gif new file mode 100644 index 0000000..49213d6 Binary files /dev/null and b/assets/piwikicon.gif differ diff --git a/assets/print.gif b/assets/print.gif new file mode 100644 index 0000000..4d3a007 Binary files /dev/null and b/assets/print.gif differ diff --git a/assets/update.png b/assets/update.png new file mode 100644 index 0000000..66f703f Binary files /dev/null and b/assets/update.png differ diff --git a/bepiwikcharts.php b/bepiwikcharts.php new file mode 100644 index 0000000..a29bf3a --- /dev/null +++ b/bepiwikcharts.php @@ -0,0 +1,436 @@ +. + * + * PHP version 5 + * @copyright µaTh 2014 + * @author µaTh (+ Caro (ct9)) + * @package be_piwikcharts + * @license GNU/LGPL + * @filesource + * + * // Piwik-API: http://piwik.org/docs/analytics-api/metadata/#toc-static-image-graphs + */ + +class bepiwikcharts extends BackendModule { + + protected $strTemplate = 'be_piwikcharts'; + + // Default-Werte (Demo-Modus) + public $url = "http://demo.piwik.org/"; // inkl. http(s), mit / am Ende + public $piwik_IDsite = 3; + public $piwik_TOKENauth = "anonymous"; + + + public $tableMaxRows = 10; + public $modus = 0; // 0 = Demo, 1 = normal + public $username = ""; + public $password = ""; + + public function compile() {} + + + /** + * Konstruktor + **/ + function __construct() { + // Super-Konstruktor (von BackendModule) aufrufen + parent::__construct(); + + // Daten der Einstellungen holen. Daten nur nutzen, wenn alle 3 Daten in den Einstellungen eingetragen wurden + if ( (strlen( $GLOBALS["TL_CONFIG"]['piwikchartsURL']) > 0) && (strlen($GLOBALS["TL_CONFIG"]['piwikchartsSiteID']) > 0) && (strlen($GLOBALS["TL_CONFIG"]['piwikchartsAuthCode']) > 0) ) { + $this->url = $GLOBALS["TL_CONFIG"]['piwikchartsURL']; + $this->piwik_IDsite = $GLOBALS["TL_CONFIG"]['piwikchartsSiteID']; + $this->piwik_TOKENauth = $GLOBALS["TL_CONFIG"]['piwikchartsAuthCode']; + $this->username = $GLOBALS["TL_CONFIG"]['piwikchartsUsername']; + $this->password = $GLOBALS["TL_CONFIG"]['piwikchartsPassword']; + $this->modus = 1; //1 = Normalmodus + } + } + + /** + * generate() - wird von Contao automatisch geladen + * + * Templatevariablen belegen + */ + public function generate() { + // pruefen, ob die Seite im Backend aufgerufen wird + if (TL_MODE == 'BE') { + // Objekt vom Template "be_piwikcharts" erzeugen + $objTemplate = new BackendTemplate('be_piwikcharts'); + + + // Userklasse laden. Wird zum Prüfen benötigt, ob der User ein Admin ist + $this->import('BackendUser', 'User'); + $objTemplate->isAdmin = $this->User->isAdmin; + + // Steuerelemente + $objTemplate->link_settings = $this->Environment->path."/contao/main.php?do=settings#pal_piwikcharts_legend"; + + if(!empty($this->username) && !empty($this->password)){ + $hashed = hash('md5', @Encryption::decrypt($this->password)); + $objTemplate->link_server_login = $this->url.'index.php?module=Login&action=logme&login='.$this->username.'&password='.$hashed; + } + + $objTemplate->link_server = $this->url; + + + $objTemplate->piwik_IDsite = $this->piwik_IDsite; + $objTemplate->link_optOut = $this->url."index.php?module=CoreAdminHome&action=optOut"; + $objTemplate->update = $this->checkUpdate(); + $objTemplate->showUpdate = $this->User->isAdmin || $GLOBALS["TL_CONFIG"]['piwikchartsWelcomePageUpdate']; + + // 30 Tage Besuchergraf + $objTemplate->chart_evolutionVisitsSummaryDay = $this->printChart( "evolution", "VisitsSummary", "day", "previous30", 400, 200, 80, "get" ); + + // 24 Monate Besuchergraf + $objTemplate->chart_evolutionVisitsSummaryMonth = $this->printChart( "evolution", "VisitsSummary", "month", "previous24", 400, 200, 80, "get", "&colors=,,ff0000" ); + + // Diagramm Besuchszeiten + $objTemplate->chart_verticalBarVisitsPerServerTime = $this->printChart( "verticalBar", "VisitTime", "range", "previous30", 400, 200, 80, "getVisitInformationPerServerTime" ); + + // Diagramm Besuchertage + $objTemplate->chart_verticalBarVisitTimeByDayOfWeek = $this->printChart( "verticalBar", "VisitTime", "range", "previous30", 400, 200, 80, "getByDayOfWeek" ); + + // Diagramm Browser + $objTemplate->chart_horizontalBarUserBrowser = $this->printChart( "horizontalBar", "UserSettings", "range", "previous30", 400, 200, 80, "getBrowser" ); + + // Diagramm Länder + $objTemplate->chart_horizontalBarUserCountry = $this->printChart( "horizontalBar", "UserCountry", "range", "previous30", 400, 200, 80, "getCountry" ); + + //Tabelle: Suchworte von Suchmaschinen + $objTemplate->table_keywords = $this->printTable($this->PHPload($this->buildURL( "Referers.getKeywords", "range", "previous30", "&format=php&filter_limit=20"), array("label", "nb_visits")), array("Suchwort","Aufrufe"), "data"); + + //Tabelle: Besucher von Webseite + $objTemplate->table_fromWebsite = $this->printTable($this->PHPload($this->buildURL( "Referers.getWebsites", "range", "previous30", "&format=php&filter_limit=20"), array("label", "nb_visits")), array("Von Webseite","Aufrufe"), "data"); + + // Tabelle: angeschaute Seiten + $objTemplate->table_visitedPages = $this->printTable($this->PHPload($this->buildURL( "Actions.getPageUrls", "range", "previous30", "&format=php&filter_limit=20"), array("label", "nb_visits")), array("Seite","Aufrufe"), "data"); + + // Tabelle: Downloads + $objTemplate->table_downloads = $this->printTable_downloads($this->PHPload($this->buildURL( "Actions.getDownloads", "range", "previous30", "&format=php&filter_limit=20&expanded=1&filter_limit=10"), array("label", "subtable")), "downloads"); + + // Zusammenfassung (letzte 30 Minuten/letzte 24 Stunden) + + //im Demo-Modus ist die Anzeige letzte 30Min/24h deaktivert + if ( $this->modus > 0 ) { + $temp = $this->PHPload($this->buildURL( "Live.getCounters", "", "", "&format=php&lastMinutes=".(60*24)), array("visits")); + $objTemplate->visitsLast30Minutes = $temp[0]; + $temp = $this->PHPload($this->buildURL( "Live.getCounters", "", "", "&format=php&lastMinutes=".(60*24)), array("visits")); + $objTemplate->visitsLast24Hours = $temp[0]; + } else { + $objTemplate->visitsLast30Minutes = "(disabled)"; + $objTemplate->visitsLast24Hours = "(disabled)"; + } + + return $objTemplate->parse(); + } + + // generate() von der Oberklasse (BackendModule) aufrufen + return parent::generate(); + } + + + /** + * XMLload() - lädt XML-Datei + * + * @param $request_url URL zu der XML-Datei, inkl. http:// + * @param $parameter Array mit den Knotennamen, die ausgelesen werden + */ + function XMLload($request_url, $parameter) { + + $data = readfile($request_url); + $xml = new SimpleXMLElement($data); + + $ausgabe = array(); + + // Kindknoten von laden + for ( $i = 0; $i < count($xml->row); $i++) { + foreach ($xml->row[$i] as $item => $titel) { + if (in_array($item, $parameter, true)) { + $ausgabe[] = $titel; + } + } + } + return $ausgabe; + } + + + /** + * Abfrage des PIWIK- Servers + * @param $url string Url- Fragment mit Abfrage zum PIWIK- Server + * @return Array mit den abgefragten Werten + **/ + function readfile($url) { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout = 5); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + $file = curl_exec($ch); + curl_close($ch); + return $file; + } + + /** + * PHPfile_read - Liest das unserialisierte PHP-Array ein und erstellt ein neues Array mit den Werten aus $parameter + * + **/ + function PHPload( $url, $parameter ) { + $unserializedArray = unserialize( $this->readfile($url) ); + + + for ( $i = 0; $i < count($unserializedArray); $i++) { + foreach ($unserializedArray[$i] as $item => $titel) { + if (in_array($item, $parameter, true)) { + $foundContent[] = $titel; + + } + } + } + + return $foundContent; + } + + + /** + * printTable_downloads() - gibt eine Tabelle speziell für Downloads aus + * + * @param $inhalte Array + * @param $cssklasse (optional) CSS-Klasse für die Tabelle + */ + function printTable_downloads($inhalte, $cssklasse="") { + $tabelle = ""; + $tabelle .= ""; + for ($i = 0; $i <= count($inhalte)/2; $i = $i + 2 ) { + $maxZeilen = $this->tableMaxRows; + if ($maxZeilen > count($inhalte[$i+1] )) { + $maxZeilen = count($inhalte[$i+1]); + } + for ($j = 0; $j < $maxZeilen; $j++) { + $tabelle .= ""; + $tabelle .= ""; + $path_parts = pathinfo( $inhalte[$i+1][$j]['label'] ); + $tabelle .= ""; + $tabelle .= ""; + $tabelle .= ""; + } + } + $tabelle .= "
DomainDateiDownloads
".$inhalte[$i]."".$path_parts['basename']."".($inhalte[$i+1][$j]['nb_visits'])."
"; + + return $tabelle; + } + + /** + * printTable() - gibt eine HTML-Tabelle aus + * + * @param $inhalte Array + * @param $spalten Tabellenkopfbezeichnungen + * @param $cssklasse (optional) CSS-Klasse für die Tabelle + */ + function printTable($inhalte, $spalten, $cssklasse="") { + // Anzahl Inhaltszeilen der Tabelle festlegen + $rowsPerTable = $this->tableMaxRows; + if ( count($inhalte)/count($spalten) < $rowsPerTable ) { + $rowsPerTable = count($inhalte)/count($spalten); + } + + // falls keine Daten gefunden werden, hier abbrechen + if ($rowsPerTable < 1) { + return "
Found no Data
"; + } + + // Anzahl der Tabellen nebeneinader ist abhängig von der Größe des Arrays $inhalte und der Zeilenanzahl der Tabelle ($rowsPerTable) + $tabellen = ceil(count($inhalte)/($rowsPerTable*count($spalten))); + + // resultTable wird nun aufgebaut und am Ende als return-Wert zurückgegeben + $resultTable = ""; + + // Tabellenkopf + $resultTable .= ""; + for ( $i = 0; $i < count($spalten)*$tabellen; $i++ ) { + $resultTable .= ""; + } + $resultTable .= ""; + + // Tabelleninhalt + for ( $row = 0; $row < $rowsPerTable; $row++ ) { + + $resultTable .= ""; + + // $tabellenspalte = Index der Tabelle, die nebeneinander angezeit wird + for ( $tabellenspalte = 0; $tabellenspalte < $tabellen; $tabellenspalte++ ) { + + for ( $spalte = 0; $spalte < count($spalten); $spalte++ ) { + + // Prüfen, ob das Array groß genug ist um den Inhalt auszugeben oder nur eine leere Zelle zu erzeugen + if ( (( $row*count($spalten)+$spalte )+$tabellenspalte*$rowsPerTable*count($spalten)) < count($inhalte) ) { + $resultTable .= ""; + } else { + // leere Zelle + $resultTable .= ""; + } + } + } + $resultTable .= ""; + } + $resultTable .= "
".$spalten[$i%count($spalten)]."
"; + $resultTable .= $inhalte[($row*count($spalten)+$spalte)+$tabellenspalte*$rowsPerTable*count($spalten)]; + $resultTable .= "
"; + + return $resultTable; + } + + + /** + * buildURL - baut die Aufruf-URL für Piwik auf + * + * @param $method Methode der Abfrage + * @param $period kleinstes Intervall ('day', 'week', 'month', 'year', 'range') + * @param $date untersuchtes Datum/Zeitintervall ('today', 'yesterday','previous30','YYYY-MM-DD%2CYYYY-MM-DD') + * @param $additional (optionaler Parameter) für weitere API-Parameter. Muss mit & beginnen. Schema: '¶meter=wert' + */ + function buildURL( $method, $period, $date, $additional ) { + $url = $this->url; + $url.= 'index.php?module=API'; + $url.= '&method='.$method; + $url.= '&idSite='.$this->piwik_IDsite; + $url.= '&token_auth='.$this->piwik_TOKENauth; + $url.= '&period='.$period; + $url.= '&date='.$date; + $url.= $additional; + + return $url; + } + + + /** + * printChart - Grafiken anzeigen + * + * @param $graphType Grafentyp: 'evolution' (Liniendiagramm), 'horizontalBar' (horizontales Balkendiagramm), 'verticalBar' (Balkendiagramm) and 'pie' (2D Kreisdiagramm) + * @param $apiModule Bezeichnung Piwikmodul (z.B. Besucherverlauf: 'VisitsSummary') + * @param $period kleinstes Intervall ('day', 'week', 'month', 'year', 'range') + * @param $date untersuchtes Datum/Zeitintervall ('today', 'yesterday','previous30','YYYY-MM-DD%2CYYYY-MM-DD') + * @param $width, $height Breite, Höhe der zu generierenden Grafik + * @param $scale Skalierung in Prozent + * @param $apiAction abhängig von $apiModule + * @param $additional (optionaler Parameter) für weitere API-Parameter. Muss mit & beginnen. Schema: '¶meter=wert' + * @param $cssStyle (optionaler Parameter) CSS-Style Attribut + */ + function printChart( $graphType, $apiModule, $period, $date, $width, $height, $scale, $apiAction, $additional = "", $cssStyle = "" ) { + return ''; + } + + /** + * checkUpdate - prüft auf Updates + * @return wenn neue Version vorliegt: neue Versionsnummer. Wenn keine neue Version vorliegt: Leerstring + */ + function checkUpdate() { + if ($this->modus == 1) { + // aktuelle Version vom Server lesen + $xml = new SimpleXMLElement($this->readfile($this->url."index.php?module=API&method=API.getPiwikVersion&format=xml&token_auth=".$this->piwik_TOKENauth)); + $version_installed = trim($xml[0]); + + // neuste Version vom Piwik-Server lesen + $version_newest = trim($this->readfile("http://api.piwik.org/1.0/getLatestVersion/")); + + if ($version_newest == $version_installed) { + return ""; + } else { + return $version_newest; + } + } else { + return ""; + } + } + /** + * dashboardWelcomePage - Statistiken auf der Welcomepage nach dem Login anzeigen + */ + function dashboardWelcomePage() { + + // pruefen, ob die Seite im Backend aufgerufen wird + if (TL_MODE == 'BE') { + $this->import('BackendUser', 'User'); + + if ($GLOBALS["TL_CONFIG"]['piwikchartsWelcomePage'] || ($this->User->isAdmin && $GLOBALS["TL_CONFIG"]['piwikchartsWelcomePageAdmin']) ) { + $strBuffer = '
'; + + $objTemplate = new BackendTemplate('ce_headline'); + $objTemplate->hl = 'h2'; + $objTemplate->class = 'ce_headline'; + $objTemplate->style = 'background:none repeat scroll 0 0 #F6F6F6;border: solid #E9E9E9; border-width: 1px 0px 1px 0px; margin:18px 0px 6px; padding: 2px 6px 3px;'; + $objTemplate->headline = 'Besucherstatistiken'; + + $strHeadline = $objTemplate->parse(); + $strBuffer .= $strHeadline; + + $objTemplate = new BackendTemplate('ce_text'); + $objTemplate->class = 'ce_text'; + $objTemplate->style = 'position:relative;'; + + $objTemplate2 = new BackendTemplate('be_piwikcharts_welcome'); + + $objTemplate2->chart_evolutionVisitsSummaryDay .= $this->printChart( "evolution", "VisitsSummary", "day", "previous30", 400,180, 80, "get", "", "margin-right:20px;" ); + $objTemplate2->chart_evolutionVisitsSummaryMonth .= $objTemplate->chart_evolutionVisitsSummaryMonth = $this->printChart( "evolution", "VisitsSummary", "month", "previous24", 400, 100, 80, "get", "&colors=,,ff0000", "margin-bottom: 10px;" ); + + //im Demo-Modus ist die Anzeige letzte 30Min/24h deaktivert + if ( $this->modus > 0 ) { + $temp = $this->PHPload($this->buildURL( "Live.getCounters", "", "", "&format=php&lastMinutes=".(60*24)), array("visits")); + $objTemplate2->visitsLast30Minutes = $temp[0]; + $temp = $this->PHPload($this->buildURL( "Live.getCounters", "", "", "&format=php&lastMinutes=".(60*24)), array("visits")); + $objTemplate2->visitsLast24Hours = $temp[0]; + } else { + $objTemplate2->visitsLast30Minutes = "(disabled)"; + $objTemplate2->visitsLast24Hours = "(disabled)"; + } + + $objTemplate2->link_optOut = $this->url."index.php?module=CoreAdminHome&action=optOut"; + $objTemplate2->showOptOut = $GLOBALS["TL_CONFIG"]['piwikchartsWelcomePageOptout'] || $this->User->isAdmin; + $objTemplate2->optOutIcon = "system/modules/bepiwikcharts/assets/optout.png"; + + $objTemplate2->update = $this->checkUpdate(); + + $objTemplate2->showUpdate = $this->User->isAdmin || $GLOBALS["TL_CONFIG"]['piwikchartsWelcomePageUpdate']; + $objTemplate2->updateIcon = "system/modules/bepiwikcharts/assets/update.png"; + $objTemplate2->link_server = $this->url; + + + $objTemplate->text = $objTemplate2->parse(); + $strBuffer .= $objTemplate->parse(); + + $strBuffer .= '
'; + + return $strBuffer; + + + } else { + // Statistiken nicht anzeigen, weil die Einstellungen so sind. + return ""; + } + + } else { + return ""; + } + } + +} +?> \ No newline at end of file diff --git a/config/.htaccess b/config/.htaccess new file mode 100644 index 0000000..f239fe8 --- /dev/null +++ b/config/.htaccess @@ -0,0 +1,2 @@ +order deny,allow +deny from all \ No newline at end of file diff --git a/config/autoload.ini b/config/autoload.ini new file mode 100644 index 0000000..56a51b1 --- /dev/null +++ b/config/autoload.ini @@ -0,0 +1,7 @@ + +;; +; Configure what you want the autoload creator to register +;; +register_namespaces = true +register_classes = true +register_templates = true diff --git a/config/autoload.php b/config/autoload.php new file mode 100644 index 0000000..a930951 --- /dev/null +++ b/config/autoload.php @@ -0,0 +1,30 @@ + 'system/modules/be_piwikcharts/bepiwikcharts.php', +)); + + +/** + * Register the templates + */ +TemplateLoader::addFiles(array +( + 'be_piwikcharts' => 'system/modules/be_piwikcharts/templates', + 'be_piwikcharts_welcome' => 'system/modules/be_piwikcharts/templates', +)); diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..851e4d4 --- /dev/null +++ b/config/config.php @@ -0,0 +1,73 @@ +. + * + * PHP version 5 + * @copyright µaTh 2011 + * @author µaTh + * @package be_infopage + * @license GNU/LGPL + * @filesource + */ + + +/** + * ------------------------------------------------------------------------- + * BACK END MODULES + * ------------------------------------------------------------------------- + * + * Back end modules are stored in a global array called "BE_MOD". Each module + * has certain properties like an icon, an optional callback function and one + * or more tables. Each module belongs to a particular group. + * + * $GLOBALS['BE_MOD'] = array + * ( + * 'group_1' => array + * ( + * 'module_1' => array + * ( + * 'tables' => array('table_1', 'table_2'), + * 'key' => array('Class', 'method'), + * 'callback' => 'ClassName', + * 'icon' => 'path/to/icon.gif', + * 'stylesheet' => 'path/to/stylesheet.css', + * 'javascript' => 'path/to/javascript.js' + * ) + * ) + * ); + * + * Use function array_insert() to modify an existing modules array. + */ +$GLOBALS['TL_CONFIG']['dashboardMode'] = 'automatic'; +$GLOBALS['TL_CONFIG']['dashboardAccess'] = 'public'; +$GLOBALS['TL_CONFIG']['dashboardLimit'] = '0'; + + +array_insert($GLOBALS['BE_MOD']['system'], 98, array( + 'be_piwikcharts' => array( + 'callback' => 'bepiwikcharts', + 'stylesheet' => 'system/modules/be_piwikcharts/assets/bepiwikcharts.css', + 'icon' => 'system/modules/be_piwikcharts/assets/piwikicon.gif' + ) +)); + + +?> \ No newline at end of file diff --git a/dca/tl_settings.php b/dca/tl_settings.php new file mode 100644 index 0000000..ab87852 --- /dev/null +++ b/dca/tl_settings.php @@ -0,0 +1,106 @@ +. + * + * PHP version 5 + * @copyright µaTh 2014 + * @author µaTh (+ Caro (ct9)) + * @package be_piwikcharts + * @license GNU/LGPL + * @filesource + */ + +/** + * Add to palette + */ +$GLOBALS['TL_DCA']['tl_settings']['palettes']['default'] .= ';{piwikcharts_legend:hide},piwikchartsURL,piwikchartsSiteID,piwikchartsAuthCode,piwikchartsUsername,piwikchartsPassword,piwikchartsWelcomePageAdmin,piwikchartsWelcomePage,piwikchartsWelcomePageUpdate,piwikchartsWelcomePageOptout;'; + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsURL'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsURL'], + 'inputType' => 'text', + 'exclude' => true, + 'eval' => array('mandatory' => false, 'rgxp' => 'piwikchartsURL', 'tl_class' => 'w50', 'trailingSlash' => true) + +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsSiteID'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsSiteID'], + 'inputType' => 'text', + 'exclude' => true, + 'eval' => array('mandatory' => false, 'rgxp' => 'piwikchartsSiteID', 'tl_class' => 'w50') +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsAuthCode'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsAuthCode'], + 'inputType' => 'text', + 'exclude' => true, + 'eval' => array('mandatory' => false, 'rgxp' => 'piwikchartsAuthCode', 'tl_class' => 'long') +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsUsername'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsUsername'], + 'inputType' => 'text', + 'exclude' => true, + 'eval' => array('mandatory' => false, 'rgxp' => 'piwikchartsUsername', 'tl_class' => 'w50') +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsPassword'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsPassword'], + 'inputType' => 'text', + 'exclude' => true, + 'eval' => array('mandatory' => false, 'rgxp' => 'piwikchartsPassword', 'hideInput' => true, 'encrypt' => true) +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsWelcomePageAdmin'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsWelcomePageAdmin'], + 'inputType' => 'checkbox', + 'eval' => array('tl_class' => 'clr') +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsWelcomePage'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsWelcomePage'], + 'inputType' => 'checkbox', +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsWelcomePageUpdate'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsWelcomePageUpdate'], + 'inputType' => 'checkbox', +); + +$GLOBALS['TL_DCA']['tl_settings']['fields']['piwikchartsWelcomePageOptout'] = array +( + 'label' => &$GLOBALS['TL_LANG']['piwikchartsURL']['piwikchartsWelcomePageOptout'], + 'inputType' => 'checkbox', +); + + + + + +?> \ No newline at end of file diff --git a/languages/de/default.php b/languages/de/default.php new file mode 100644 index 0000000..3d60932 --- /dev/null +++ b/languages/de/default.php @@ -0,0 +1,40 @@ +. + * + * PHP version 5 + * @copyright µaTh 2014 + * @author µaTh + * @package be_piwikcharts + * @license GNU/LGPL + */ + + +/** + * Load on be_welcome + */ +if (TL_MODE == 'BE') { + if (!strlen($_GET['do'])) { + $bepiwikcharts = new bepiwikcharts(); + $GLOBALS['TL_LANG']['MSC']['welcomeTo'] .= '' . $bepiwikcharts->dashboardWelcomePage() . '

 '; + } +} + diff --git a/languages/de/modules.php b/languages/de/modules.php new file mode 100644 index 0000000..92353a7 --- /dev/null +++ b/languages/de/modules.php @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/languages/de/tl_settings.php b/languages/de/tl_settings.php new file mode 100644 index 0000000..bdcc777 --- /dev/null +++ b/languages/de/tl_settings.php @@ -0,0 +1,36 @@ +. + * + * PHP version 5 + * @copyright µaTh 2014 + * @author µaTh + * @package be_piwikcharts + * @license GNU/LGPL + * @filesource + */ + +/** + * Legends + */ +$GLOBALS['TL_LANG']['tl_settings']['piwikcharts_legend'] = 'Piwik-Statistiken'; + +?> \ No newline at end of file diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..3f5eec1 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,8 @@ +auxiliary.org-netbeans-modules-php-smarty.smarty-framework=true +include.path=${php.global.include.path} +php.version=PHP_53 +source.encoding=UTF-8 +src.dir=. +tags.asp=false +tags.short=false +web.root=. diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..d1e7fb6 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,9 @@ + + + org.netbeans.modules.php.project + + + be_piwikcharts + + + diff --git a/templates/.htaccess b/templates/.htaccess new file mode 100644 index 0000000..f239fe8 --- /dev/null +++ b/templates/.htaccess @@ -0,0 +1,2 @@ +order deny,allow +deny from all \ No newline at end of file diff --git a/templates/be_piwikcharts.html5 b/templates/be_piwikcharts.html5 new file mode 100644 index 0000000..5f5e7a1 --- /dev/null +++ b/templates/be_piwikcharts.html5 @@ -0,0 +1,104 @@ + + +
+
+ + isAdmin): ?> + » Zu den Einstellungen | + + Seite drucken | + OptOut | + Login Piwik + update && $this->showUpdate): ?> + | Update verfügbar + + + isAdmin): ?> +
+ Piwik-Server: link_server ?> (SiteID: piwik_IDsite ?>) +
+ + +
+
+ + + + + + + + + +
Letzte 30 Minuten:visitsLast30Minutes; ?> Besucher
Letzte 24 Stunden:visitsLast24Hours; ?> Besucher
+
+

Besucherstatistiken mit Piwik

+ + +
+ + + + + + + + + +
letzte 30 Tage:letzte 24 Monate:
chart_evolutionVisitsSummaryDay; ?>chart_evolutionVisitsSummaryMonth; ?>
+ +
+ + + + + + + + + + +
Besuchszeiten (Serverzeit):Besuchertage:
chart_verticalBarVisitsPerServerTime; ?>chart_verticalBarVisitTimeByDayOfWeek; ?>
+ +
+ + + + + + + + + + +
Browser:Besucher aus:
chart_horizontalBarUserBrowser; ?>chart_horizontalBarUserCountry; ?>
+ +
+ +

Top-Suchwörter, die auf die Webseite geführten hatten (Zeitraum: letzte 30 Tage):

+ table_keywords; ?> + +
+ +

Von diesen Webseiten kamen Ihre Besucher auf Ihre Webseite (Zeitraum: letzte 30 Tage):

+ table_fromWebsite; ?> + +
+

Die am häufigsten besuchten Seiten (Zeitraum: letzte 30 Tage):

+ table_visitedPages; ?> + +
+ +

Die häufigsten Downloads (Zeitraum: letzte 30 Tage):

+ table_downloads; ?> + +
+ +
+

Piwik ist eine Open-Source (GPL lizenzierte) Webanalyse-Software, die heruntergeladen werden kann. Piwik bietet Ihnen detaillierte Echtzeit-Berichte über die Besucher Ihrer Homepage, die genutzten Suchmaschinen und Suchbegriffe, die Sprache, Ihre beliebten Seiten… und vieles mehr.

+

Das Ziel von Piwik ist es, eine Open-Source Alternative zu Google Analytics zu bieten. Piwik wird bereits auf mehr als 320.000 Webseiten eingesetzt.

+

Weitere Informationen auf www.piwik.org

+
+ +
+
\ No newline at end of file diff --git a/templates/be_piwikcharts.tpl b/templates/be_piwikcharts.tpl new file mode 100644 index 0000000..5f5e7a1 --- /dev/null +++ b/templates/be_piwikcharts.tpl @@ -0,0 +1,104 @@ + + +
+
+ + isAdmin): ?> + » Zu den Einstellungen | + + Seite drucken | + OptOut | + Login Piwik + update && $this->showUpdate): ?> + | Update verfügbar + + + isAdmin): ?> +
+ Piwik-Server: link_server ?> (SiteID: piwik_IDsite ?>) +
+ + +
+
+ + + + + + + + + +
Letzte 30 Minuten:visitsLast30Minutes; ?> Besucher
Letzte 24 Stunden:visitsLast24Hours; ?> Besucher
+
+

Besucherstatistiken mit Piwik

+ + +
+ + + + + + + + + +
letzte 30 Tage:letzte 24 Monate:
chart_evolutionVisitsSummaryDay; ?>chart_evolutionVisitsSummaryMonth; ?>
+ +
+ + + + + + + + + + +
Besuchszeiten (Serverzeit):Besuchertage:
chart_verticalBarVisitsPerServerTime; ?>chart_verticalBarVisitTimeByDayOfWeek; ?>
+ +
+ + + + + + + + + + +
Browser:Besucher aus:
chart_horizontalBarUserBrowser; ?>chart_horizontalBarUserCountry; ?>
+ +
+ +

Top-Suchwörter, die auf die Webseite geführten hatten (Zeitraum: letzte 30 Tage):

+ table_keywords; ?> + +
+ +

Von diesen Webseiten kamen Ihre Besucher auf Ihre Webseite (Zeitraum: letzte 30 Tage):

+ table_fromWebsite; ?> + +
+

Die am häufigsten besuchten Seiten (Zeitraum: letzte 30 Tage):

+ table_visitedPages; ?> + +
+ +

Die häufigsten Downloads (Zeitraum: letzte 30 Tage):

+ table_downloads; ?> + +
+ +
+

Piwik ist eine Open-Source (GPL lizenzierte) Webanalyse-Software, die heruntergeladen werden kann. Piwik bietet Ihnen detaillierte Echtzeit-Berichte über die Besucher Ihrer Homepage, die genutzten Suchmaschinen und Suchbegriffe, die Sprache, Ihre beliebten Seiten… und vieles mehr.

+

Das Ziel von Piwik ist es, eine Open-Source Alternative zu Google Analytics zu bieten. Piwik wird bereits auf mehr als 320.000 Webseiten eingesetzt.

+

Weitere Informationen auf www.piwik.org

+
+ +
+
\ No newline at end of file diff --git a/templates/be_piwikcharts_welcome.html5 b/templates/be_piwikcharts_welcome.html5 new file mode 100644 index 0000000..9d0e962 --- /dev/null +++ b/templates/be_piwikcharts_welcome.html5 @@ -0,0 +1,43 @@ + + +
+ chart_evolutionVisitsSummaryDay; ?> +
+ +
+ chart_evolutionVisitsSummaryMonth; ?> +
+ + + + + + + + + + + + + + + + +
Anzahl Besucher
letzte 30 Minuten:visitsLast30Minutes; ?>
letzte 24 Stunden:visitsLast24Hours; ?>
+ + + +
+ +
+ showOptOut): ?> + + + update && $this->showUpdate): ?> + + + +
+ + + diff --git a/templates/be_piwikcharts_welcome.tpl b/templates/be_piwikcharts_welcome.tpl new file mode 100644 index 0000000..9d0e962 --- /dev/null +++ b/templates/be_piwikcharts_welcome.tpl @@ -0,0 +1,43 @@ + + +
+ chart_evolutionVisitsSummaryDay; ?> +
+ +
+ chart_evolutionVisitsSummaryMonth; ?> +
+ + + + + + + + + + + + + + + + +
Anzahl Besucher
letzte 30 Minuten:visitsLast30Minutes; ?>
letzte 24 Stunden:visitsLast24Hours; ?>
+ + + +
+ +
+ showOptOut): ?> + + + update && $this->showUpdate): ?> + + + +
+ + +