Compare commits

...

22 Commits

Author SHA1 Message Date
Daniel Seifert 3b8e6097c0 Merge remote-tracking branch 'remotes/origin/rel_2.x' 2017-11-21 13:29:09 +01:00
Daniel Seifert 1b3364bc45 revision adjusted 2017-11-21 12:40:23 +01:00
Daniel Seifert 6d89c8e26c #6828: Flow Unterstützung implementieren 2017-11-21 11:58:38 +01:00
Daniel Seifert 2afe6cb1be add admin translation 2017-11-21 11:57:57 +01:00
Daniel Seifert abd1f8d44b small improvements 2017-11-21 11:41:06 +01:00
Daniel Seifert 3e287f888a add group switch 2017-11-21 11:32:40 +01:00
Daniel Seifert 759b22b764 add page details 2017-11-21 11:02:32 +01:00
Daniel Seifert dac3ae9b23 reduce delete calls because of heave db load 2016-09-15 09:46:16 +00:00
Daniel Seifert c0a59c7196 add nex index for clean up 2016-08-24 14:43:50 +00:00
Daniel Seifert dc9a1043a8 change table engine, fix small issues 2016-08-17 08:10:15 +00:00
Daniel Seifert e777703589 merge rel_2.x to trunk 2015-07-06 14:18:09 +00:00
Daniel Seifert fcf7a560ad revision adjusted 2015-07-06 14:10:09 +00:00
Daniel Seifert c20ce515f4 merge rel_2.x changes to trunk 2015-01-23 10:45:26 +00:00
Daniel Seifert 92b8836b91 rename source folder 2015-01-23 10:43:26 +00:00
Daniel Seifert 6caac005c8 revision adjusted, remove old module suggestion 2015-01-23 10:26:39 +00:00
Daniel Seifert e269bf7fbe fix update script 2015-01-23 09:51:54 +00:00
Daniel Seifert 98f7efbf59 add statistics to admin panel 2015-01-23 09:22:46 +00:00
Daniel Seifert 44dbbfeaee move changed_full content to copy_this 2015-01-23 09:13:45 +00:00
Daniel Seifert 952fd135ce create rel_2.x branch for OXID 4.7 2015-01-23 09:10:01 +00:00
Daniel Seifert 6c3a96f5de add noencode instructions and for build process required folders 2013-10-28 14:24:49 +00:00
Daniel Seifert 2620e605ba wrong db structure fixed, revision adjusted 2013-10-28 13:16:53 +00:00
Daniel Seifert 2b7b031379 modid fixed, add update instructions 2013-09-09 07:49:11 +00:00
32 changed files with 3821 additions and 11324 deletions

28
.gitattributes vendored
View File

@ -1,15 +1,29 @@
* text=auto !eol
changed_full/EE500-/modules/d3/d3usersonline/views/blocks/layout/d3usersonline_sidebar.tpl -text
changed_full/PE470-/modules/d3/d3usersonline/views/blocks/layout/d3usersonline_sidebar.tpl -text
Sources/Screenshots/Backend.jpg -text
Sources/Screenshots/Frontend.jpg -text
Sources/UsersOnline-Installation.docx -text
copy_this/.noencode -text
copy_this/modules/d3/d3usersonline/IntelliSenseHelper.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_licence.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_list.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_main.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline_list.php -text
copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline_statistic.php -text
copy_this/modules/d3/d3usersonline/menu.xml -text
copy_this/modules/d3/d3usersonline/metadata.php -text
copy_this/modules/d3/d3usersonline/models/d3usersonline.php -text
copy_this/modules/d3/d3usersonline/models/d3usersonline_update.php -text
copy_this/modules/d3/d3usersonline/modules/components/d3_oxcmp_utils_usersonline.php -text
copy_this/modules/d3/d3usersonline/picture.png -text
copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php -text
copy_this/modules/d3/d3usersonline/translations/de/d3usersonline_lang.php -text
copy_this/modules/d3/d3usersonline/translations/en/d3usersonline_lang.php -text
copy_this/modules/d3/d3usersonline/views/admin/de/d3usersonline_lang.php -text
copy_this/modules/d3/d3usersonline/views/admin/en/d3usersonline_lang.php -text
copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_cfg_usersonline_main.tpl -text
copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_usersonline_statistic.tpl -text
copy_this/modules/d3/d3usersonline/views/blocks/layout/d3usersonline_sidebar.tpl -text
setup+doku/Installation.pdf -text
setup+doku/d3precheck.php -text
source/Re[!!-~]D3[!!-~]Users[!!-~]Online[!!-~]kit[!!-~]Oxid[!!-~]CE[!!-~]4.7.eml -text
source/UsersOnline[!!-~]v1.2.1[!!-~]CE4_Kundenversion_4.7.0.zip -text
source/UsersOnline-Installation.docx -text
setup+doku/Precheck/d3precheck.php -text
setup+doku/changelog.txt -text

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

Binary file not shown.

View File

@ -1,49 +0,0 @@
[{d3modcfgcheck modid="d3usersonline"}]
[{if $oxcmp_user && $oxcmp_user->getFieldData('oxrights') == 'malladmin'}]
<div class="box">
<h3>[{oxmultilang ident="D3_USERSONLINE_USERSONLINE"}]</h3>
<div class="content">
<table style="border-style: none; width: 100%;">
<tr>
<td style="border-bottom: 1px solid silver;">
[{oxmultilang ident="D3_USERSONLINE_ALL"}]
</td>
<td style="border-bottom: 1px solid silver; text-align: right; font-weight: bold;">
[{$aUsersOnline.all}]&nbsp;
</td>
<td style="border-bottom: 1px solid silver; text-align: left;">
[{if $aUsersOnline.all == 1}]
[{oxmultilang ident="D3_USERSONLINE_USER"}]
[{else}]
[{oxmultilang ident="D3_USERSONLINE_USERS"}]
[{/if}]
</td>
</tr>
[{foreach from=$aUsersOnline.classes item="aClassUser"}]
<tr>
<td>
[{if $aClassUser->classname}]
[{$aClassUser->classname|ucfirst}]:
[{else}]
undefined:
[{/if}]
</td>
<td style="text-align: right; font-weight: bold;">
[{$aClassUser->counter}]&nbsp;
</td>
<td style="text-align: left;">
[{if $aClassUser->counter == 1}]
[{oxmultilang ident="D3_USERSONLINE_USER"}]
[{else}]
[{oxmultilang ident="D3_USERSONLINE_USERS"}]
[{/if}]
</td>
</tr>
[{/foreach}]
</table>
</div>
</div>
[{/if}]
[{/d3modcfgcheck}]
[{$smarty.block.parent}]

View File

@ -1,49 +0,0 @@
[{d3modcfgcheck modid="d3usersonline"}]
[{if $oxcmp_user && $oxcmp_user->getFieldData('oxrights') == 'malladmin'}]
<div class="box">
<h3>[{oxmultilang ident="D3_USERSONLINE_USERSONLINE"}]</h3>
<div class="content">
<table style="border-style: none; width: 100%;">
<tr>
<td style="border-bottom: 1px solid silver;">
[{oxmultilang ident="D3_USERSONLINE_ALL"}]
</td>
<td style="border-bottom: 1px solid silver; text-align: right; font-weight: bold;">
[{$aUsersOnline.all}]&nbsp;
</td>
<td style="border-bottom: 1px solid silver; text-align: left;">
[{if $aUsersOnline.all == 1}]
[{oxmultilang ident="D3_USERSONLINE_USER"}]
[{else}]
[{oxmultilang ident="D3_USERSONLINE_USERS"}]
[{/if}]
</td>
</tr>
[{foreach from=$aUsersOnline.classes item="aClassUser"}]
<tr>
<td>
[{if $aClassUser->classname}]
[{$aClassUser->classname|ucfirst}]:
[{else}]
undefined:
[{/if}]
</td>
<td style="text-align: right; font-weight: bold;">
[{$aClassUser->counter}]&nbsp;
</td>
<td style="text-align: left;">
[{if $aClassUser->counter == 1}]
[{oxmultilang ident="D3_USERSONLINE_USER"}]
[{else}]
[{oxmultilang ident="D3_USERSONLINE_USERS"}]
[{/if}]
</td>
</tr>
[{/foreach}]
</table>
</div>
</div>
[{/if}]
[{/d3modcfgcheck}]
[{$smarty.block.parent}]

1
copy_this/.noencode Normal file
View File

@ -0,0 +1 @@
copyAsIsFiles = modules/d3/d3usersonline

View File

@ -0,0 +1,17 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright © Data Development, Thomas Dartsch
* @author Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_oxcmp_utils_usersonline_parent extends oxcmp_utils {}

View File

@ -0,0 +1,28 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_cfg_usersonline extends d3_cfg_mod_
{
/**
* @return string
*/
public function render()
{
$this->addTplParam('sListClass', 'd3_cfg_usersonline_list');
$this->addTplParam('sMainClass', 'd3_cfg_usersonline_main');
return parent::render();
}
}

View File

@ -0,0 +1,23 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_cfg_usersonline_licence extends d3_cfg_mod_licence
{
protected $_sModId = 'd3usersonline';
protected $_hasNewsletterForm = false;
protected $_sLogType = 2;
}

View File

@ -0,0 +1,31 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_cfg_usersonline_list extends d3_cfg_mod_list
{
protected $_blD3ShowLangSwitch = false;
/**
* @return null
*/
public function render()
{
$sRet = parent::render();
$this->addTplParam("default_edit", "d3_cfg_usersonline_main");
return $sRet;
}
}

View File

@ -0,0 +1,33 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_cfg_usersonline_Main extends d3_cfg_mod_main
{
protected $_sThisTemplate = 'd3_cfg_usersonline_main.tpl';
protected $_sModId = 'd3usersonline';
protected $_blUseModCfgStdObject = true;
protected $_blHasDebugSwitch = false;
protected $_blHasTestModeSwitch = false;
protected $_sMenuItemTitle = 'd3mxusersonline';
protected $_sMenuSubItemTitle = 'd3mxusersonline_settings';
//protected $_sDebugHelpTextIdent = 'D3_INQUIRY_MAIN_DEBUGACTIVE_DESC';
}

View File

@ -0,0 +1,28 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_usersonline extends d3_cfg_mod_
{
/**
* @return string
*/
public function render()
{
$this->addTplParam('sListClass', 'd3_usersonline_list');
$this->addTplParam('sMainClass', 'd3_usersonline_statistic');
return parent::render();
}
}

View File

@ -0,0 +1,33 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_usersonline_list extends d3_cfg_mod_list
{
protected $_blD3ShowLangSwitch = false;
/**
* @return null
*/
public function render()
{
$this->_blD3ShowLangSwitch = false;
$sRet = parent::render();
$this->addTplParam("default_edit", "d3_usersonline_statistic");
return $sRet;
}
}

View File

@ -0,0 +1,69 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <ds@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_usersonline_statistic extends d3_cfg_mod_main
{
protected $_blUseOwnOxid = false;
protected $_sThisTemplate = 'd3_usersonline_statistic.tpl';
protected $_sMenuItemTitle = 'd3mxusersonline';
protected $_sMenuSubItemTitle = 'd3mxusersonline_analysis';
public $blGroupByClass = false;
public function render()
{
$this->blGroupByClass = oxRegistry::getConfig()->getRequestParameter('groupbyclass') == 'true';
$this->addTplParam('blGroupByClass', $this->blGroupByClass);
return parent::render();
}
/**
* @return array
*/
public function getUserCount()
{
/** @var d3usersonline $oUsersOnline */
$oUsersOnline = oxNew('d3usersonline');
$oUsersOnline->clearOldItems();
return $oUsersOnline->getUserCount($this->blGroupByClass);
}
public function getControllerTitle($sControllerIdent)
{
$oLang = oxRegistry::getLang();
$sTranslationIdent = 'D3_USERSONLINE_CLASS_'.strtoupper($sControllerIdent);
$sTranslation = $oLang->translateString(
$sTranslationIdent,
null,
false
);
if ($sTranslation !== $sTranslationIdent) {
return $sTranslation;
} else {
$sTranslationIdent = 'PAGE_TITLE_'.strtoupper($sControllerIdent);
$sTranslation = $oLang->translateString(
$sTranslationIdent,
null,
true
);
if ($sTranslation !== $sTranslationIdent) {
return $sTranslation;
}
}
return ucfirst($sControllerIdent);
}
}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="ISO-8859-15"?>
<OX>
<OXMENU id="d3mxd3modules">
<MAINMENU id="d3mxusersonline">
<SUBMENU id="d3mxusersonline_settings" cl="d3_cfg_usersonline" list="d3_cfg_usersonline_list">
<TAB id="d3tbclussersonline_settings_main" cl="d3_cfg_usersonline_main" />
<TAB id="d3tbcl_licence" cl="d3_cfg_usersonline_licence" />
</SUBMENU>
<SUBMENU id="d3mxusersonline_analysis" cl="d3_usersonline" list="d3_usersonline_list">
<TAB id="d3tbclusersonline_currvisitors" cl="d3_usersonline_statistic" />
</SUBMENU>
</MAINMENU>
</OXMENU>
</OX>

View File

@ -30,11 +30,13 @@ $aModule = array(
'title' =>
(class_exists('d3utils') ? d3utils::getInstance()->getD3Logo() : 'D&sup3;') . ' Users Online',
'description' => array(
'de' => 'Lassen Sie sich anonym im Shop anzeigen, wie viele Benutzer zur Zeit Ihren Shop besuchen und welche Seiten angezeigt werden. Das Modul speichert nicht die IP-Adresse oder sonstige Daten des Nutzers. Damit genügen Sie auch dem deutschen Recht.',
'de' => 'Lassen Sie sich anonym im Shop anzeigen, wie viele Benutzer zur Zeit Ihren Shop besuchen und welche '.
'Seiten angezeigt werden. Das Modul speichert nicht die IP-Adresse oder sonstige Daten des Nutzers. Damit '.
'gen&uuml;gen Sie auch dem deutschen Recht.',
'en' => '',
),
'thumbnail' => 'picture.png',
'version' => '2.0.0.0',
'version' => '2.1.0.0',
'author' => 'D&sup3; Data Development (Inh.: Thomas Dartsch)',
'email' => 'support@shopmodule.com',
'url' => 'http://www.oxidmodule.com/',
@ -43,16 +45,28 @@ $aModule = array(
),
'files' => array(
'd3usersonline' => 'd3/d3usersonline/models/d3usersonline.php',
'd3usersonline_update' => 'd3/d3usersonline/models/d3usersonline_update.php',
'd3usersonline_update' => 'd3/d3usersonline/setup/d3usersonline_update.php',
'd3_cfg_usersonline' => 'd3/d3usersonline/controllers/admin/d3_cfg_usersonline.php',
'd3_cfg_usersonline_licence' => 'd3/d3usersonline/controllers/admin/d3_cfg_usersonline_licence.php',
'd3_cfg_usersonline_list' => 'd3/d3usersonline/controllers/admin/d3_cfg_usersonline_list.php',
'd3_cfg_usersonline_main' => 'd3/d3usersonline/controllers/admin/d3_cfg_usersonline_main.php',
'd3_usersonline' => 'd3/d3usersonline/controllers/admin/d3_usersonline.php',
'd3_usersonline_list' => 'd3/d3usersonline/controllers/admin/d3_usersonline_list.php',
'd3_usersonline_statistic' => 'd3/d3usersonline/controllers/admin/d3_usersonline_statistic.php',
),
'templates' => array(
//'d3_cfg_extsearch_main.tpl' => 'd3/d3_extsearch/views/admin/tpl/d3_cfg_extsearch_main.tpl',
'd3_cfg_usersonline_main.tpl' => 'd3/d3usersonline/views/admin/tpl/d3_cfg_usersonline_main.tpl',
'd3_usersonline_statistic.tpl' => 'd3/d3usersonline/views/admin/tpl/d3_usersonline_statistic.tpl',
),
'events' => array(
'onActivate' => 'd3install::checkUpdateStart',
),
'blocks' => array(
array('template' => 'layout/sidebar.tpl', 'block' => 'sidebar_categoriestree',
'file' => 'views/blocks/layout/d3usersonline_sidebar.tpl'),
)
'd3FileRegister' => array(
'd3/d3usersonline/IntelliSenseHelper.php',
'd3/d3usersonline/metadata.php',
'd3/d3usersonline/translations/de/d3usersonline_lang.php',
'd3/d3usersonline/translations/en/d3usersonline_lang.php',
'd3/d3usersonline/views/admin/de/d3usersonline_lang.php',
'd3/d3usersonline/views/admin/en/d3usersonline_lang.php',
),
);

View File

@ -32,24 +32,34 @@ class d3usersonline extends oxbase
protected $_httpXComingFrom = null;
protected $_httpComingFrom = null;
protected $_iDeleteThreshold = 30; // Zeitdifferenz zwischen 2 Löschaufträgen
protected $_iExpTime = 600; // Ablaufzeit für inaktive Benutzer
/**
* constructor
*/
public function __construct()
{
parent::__construct();
$this->init( 'd3usersonline' );
$this->init('d3usersonline');
}
/**
* @param $iExpTime
*/
public function clearOldItems($iExpTime)
public function clearOldItems()
{
startProfile(__METHOD__);
$exptime = time() - $iExpTime;
oxDb::getDb()->Execute("delete from ".$this->getViewName()." where timevisit < $exptime");
$iTime = time();
$iLastDeleteTime = oxRegistry::getConfig()->getShopConfVar('iLastDeleteTime', null, 'd3usersonline');
if ($iTime > $iLastDeleteTime + $this->_iDeleteThreshold) {
$iExptime = $iTime - $this->_iExpTime;
oxDb::getDb()->Execute("delete from " . $this->getViewName() . " where timevisit < $iExptime");
oxRegistry::getConfig()->saveShopConfVar('int', 'iLastDeleteTime', $iTime, null, 'd3usersonline');
}
stopProfile(__METHOD__);
}
@ -57,23 +67,28 @@ class d3usersonline extends oxbase
/**
* @return array
*/
public function getUserCount()
public function getUserCount($blGroupByClass = false)
{
startProfile(__METHOD__);
$sSelect = "select count(oxid) AS counter, oxclass from ".$this->getViewName()." GROUP BY oxclass ORDER BY counter desc";
$aRecords = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getArray($sSelect);
if ($blGroupByClass) {
$sSelect = "SELECT count(oxid) AS counter, oxclass FROM " .
$this->getViewName() . " GROUP BY oxclass ORDER BY counter DESC";
} else {
$sSelect = "select count(oxid) AS counter, oxclass, oxpage from ".
$this->getViewName()." GROUP BY oxclass, oxpage ORDER BY counter desc";
}
$aRecords = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getAll($sSelect);
$iAllCounter = 0;
$aUserClasses = array();
if ($aRecords && is_array($aRecords) && count($aRecords))
{
foreach ($aRecords as $aRecord)
{
if ($aRecords && is_array($aRecords) && count($aRecords)) {
foreach ($aRecords as $aRecord) {
$aRecord = array_change_key_case($aRecord, CASE_UPPER);
$oTmp = new stdClass;
$oTmp->classname = $aRecord['OXCLASS'];
$oTmp->page = $aRecord['OXPAGE'];
$oTmp->counter = $aRecord['COUNTER'];
$iAllCounter += $aRecord['COUNTER'];
$aUserClasses['classes'][] = $oTmp;
@ -95,7 +110,8 @@ class d3usersonline extends oxbase
$aValues = array(
'timevisit' => time(),
'oxclass' => oxRegistry::getConfig()->getActiveView()->getClassName()
'oxclass' => oxRegistry::getConfig()->getActiveView()->getClassName(),
'oxpage' => $this->getPageIdent(),
);
$this->assign($aValues);
@ -104,6 +120,51 @@ class d3usersonline extends oxbase
stopProfile(__METHOD__);
}
/**
* @return null|string
*/
public function getPageIdent()
{
switch (strtolower(oxRegistry::getConfig()->getActiveView()->getClassName()))
{
case 'details':
case 'oxwarticledetails':
if (($oView = oxRegistry::getConfig()->getActiveView())
&& method_exists($oView, 'getProduct')
) {
return $oView->getProduct()->getFieldData('oxtitle');
}
return null;
case 'alist':
case 'manufacturerlist':
case 'vendorlist':
if (($oView = oxRegistry::getConfig()->getActiveView())
&& method_exists($oView, 'getTitle')
) {
return $oView->getTitle();
}
return null;
case 'search':
return oxRegistry::getConfig()->getRequestParameter('searchparam');
case 'content':
if (($oView = oxRegistry::getConfig()->getActiveView())
&& method_exists($oView, 'getContent')
) {
return $oView->getContent()->getFieldData('oxtitle');
}
return null;
case 'tag':
if (($oView = oxRegistry::getConfig()->getActiveView())
&& method_exists($oView, 'getTag')
) {
return $oView->getTag();
}
return null;
}
return null;
}
/**
* @return string
*/
@ -130,50 +191,43 @@ class d3usersonline extends oxbase
$this->_getIpData('_httpComingFrom', 'HTTP_COMING_FROM');
// Gets the default ip sent by the user
if (!empty($this->_remoteAddr))
if (!empty($this->_remoteAddr)) {
$sDirectIp = $this->_remoteAddr;
}
// Gets the proxy ip sent by the user
if (!empty($this->_httpXForwardedFor))
if (!empty($this->_httpXForwardedFor)) {
$sProxyIp = $this->_httpXForwardedFor;
else if (!empty($this->_httpXForwarded))
} elseif (!empty($this->_httpXForwarded)) {
$sProxyIp = $this->_httpXForwarded;
else if (!empty($this->_httpForwardedFor))
} elseif (!empty($this->_httpForwardedFor)) {
$sProxyIp = $this->_httpForwardedFor;
else if (!empty($this->_httpForwarded))
} elseif (!empty($this->_httpForwarded)) {
$sProxyIp = $this->_httpForwarded;
else if (!empty($this->_httpVia))
} elseif (!empty($this->_httpVia)) {
$sProxyIp = $this->_httpVia;
else if (!empty($this->_httpXComingFrom))
} elseif (!empty($this->_httpXComingFrom)) {
$sProxyIp = $this->_httpXComingFrom;
else if (!empty($this->_httpComingFrom))
} elseif (!empty($this->_httpComingFrom)) {
$sProxyIp = $this->_httpComingFrom;
}
// Returns the true IP if it has been found, else ...
if (empty($sProxyIp))
{
if (empty($sProxyIp)) {
// True IP without proxy
return $sDirectIp;
}
else
{
} else {
$blIsIp = preg_match('@^([0-9]{1,3}.){3,3}[0-9]{1,3}@', $sProxyIp, $aMatches);
if ($blIsIp && (count($aMatches) > 0))
{
if ($blIsIp && (count($aMatches) > 0)) {
// True IP behind a proxy
return $aMatches[0];
}
else
{
if (empty($this->_httpClientIp))
{
} else {
if (empty($this->_httpClientIp)) {
// Can't define IP: there is a proxy but we don't have
// information about the true IP
return "(unbekannt) " . $sProxyIp;
}
else
{
} else {
// better than nothing
return $this->_httpClientIp;
}
@ -187,14 +241,14 @@ class d3usersonline extends oxbase
*/
protected function _getIpData($sTargetVarName, $sDataName)
{
if (empty($this->{$sTargetVarName}))
{
if (!empty($_SERVER) && isset($_SERVER[$sDataName]))
if (empty($this->{$sTargetVarName})) {
if (!empty($_SERVER) && isset($_SERVER[$sDataName])) {
$this->{$sTargetVarName} = $_SERVER[$sDataName];
else if (!empty($_ENV) && isset($_ENV[$sDataName]))
} elseif (!empty($_ENV) && isset($_ENV[$sDataName])) {
$this->{$sTargetVarName} = $_ENV[$sDataName];
else if (@getenv($sDataName))
} elseif (@getenv($sDataName)) {
$this->{$sTargetVarName} = getenv($sDataName);
}
}
}
}

View File

@ -1,253 +0,0 @@
<?php
/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3usersonline_update extends d3install_updatebase
{
public $sModKey = 'd3usersonline';
public $sModName = 'Users Online';
public $sModVersion = '2.0.0.0';
public $sModRevision = '24';
public $sBaseConf = 'qnqSkx5WGk0V0xyY0wwVWNKTE5qSy9oY3RZeXdOSHhtd1c5aW9PWEltei9aWXg2RTBoOUErUi9UcVZFb
W1RVUpWM1ZwTTBLU2plR3RxNzVXSVREQUFqd0V4cTQ5ZHVYQTYvVEFYKzdXMkE3aTM0SFgvbEZsZzlwU
VJKeTltWmVISFQ5YmY1Y0Q5aDRFRGZ4b2FoenlOb1p5Y0c2aFdnRXVmQVdTK2VubzBhc2hvUkVQbVBhV
jFJeWdqRUZOSEFnekZVZmF2eCtIcThzeDBqNU1JdWkrZG9MQlhFdUNyd3NhUzlkL05YVDAvaEhjS04vZ
2xRL0w2U2ZlOEFjTXB3aGp1UmRFS2dmVGNocXhCT2dQY0MzZkVvckVOU1BoMG5Ma053UTNhYlNtMklQZ
DQ9';
public $sRequirements = '';
public $sBaseValue = '';
protected $_aUpdateMethods = array(
array('check' => 'checkUsersOnlineTableExist',
'do' => 'updateUsersOnlineTableExist'),
array('check' => 'checkModCfgItemExist',
'do' => 'updateModCfgItemExist'),
array('check' => 'checkFields',
'do' => 'fixFields'),
array('check' => 'checkIndizes',
'do' => 'fixIndizes'),
array('check' => 'checkModCfgSameRevision',
'do' => 'updateModCfgSameRevision'),
);
public $aFields = array(
'OXID' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'OXID',
'sType' => 'char(32)',
'blNull' => FALSE,
'sDefault' => FALSE,
'sComment' => '',
'sExtra' => '',
'blMultilang' => FALSE,
),
'TIMEVISIT' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'TIMEVISIT',
'sType' => 'INT(11)',
'blNull' => FALSE,
'sDefault' => '0',
'sComment' => '',
'sExtra' => '',
'blMultilang' => FALSE,
),
'OXCLASS' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'OXCLASS',
'sType' => 'VARCHAR(32)',
'blNull' => FALSE,
'sDefault' => FALSE,
'sComment' => '',
'sExtra' => '',
'blMultilang' => FALSE,
),
);
public $aIndizes = array(
'OXID' => array(
'sTableName' => 'd3usersonline',
'sType' => 'PRIMARY',
'aFields' => array(
'OXID' => 'OXID',
),
),
'OXCLASS' => array(
'sTableName' => 'd3usersonline',
'sType' => 'PRIMARY',
'sName' => 'OXCLASS',
'aFields' => array(
'OXCLASS' => 'OXCLASS',
),
),
);
protected $_aRefreshMetaModuleIds = array('d3usersonline');
/**
* @return bool TRUE, if table is missing
*/
public function checkUsersOnlineTableExist()
{
return $this->_checkTableNotExist('d3usersonline');
}
/**
* @return bool
*/
public function updateUsersOnlineTableExist()
{
$blRet = TRUE;
if ($this->checkUsersOnlineTableExist())
{
$aRet = $this->_addTable('d3usersonline', $this->aFields, $this->aIndizes, 'users online', 'MyISAM');
$blRet = $aRet['blRet'];
$this->_setActionLog('SQL', $aRet['sql'], __METHOD__);
}
return $blRet;
}
/**
* @return bool
*/
public function checkModCfgItemExist()
{
$blRet = FALSE;
foreach ($this->_getShopList() as $oShop)
{
/** @var $oShop oxshop */
$aWhere = array(
'oxmodid' => $this->sModKey,
'oxnewrevision' => $this->sModRevision,
'oxshopid' => $oShop->getId(),
);
$blRet = $this->_checkTableItemNotExist('d3_cfg_mod', $aWhere);
if ($blRet)
{
return $blRet;
}
}
return $blRet;
}
/**
* @return bool
*/
public function updateModCfgItemExist()
{
$blRet = FALSE;
if ($this->checkModCfgItemExist())
{
foreach ($this->_getShopList() as $oShop)
{
/** @var $oShop oxshop */
$aWhere = array(
'oxmodid' => $this->sModKey,
'oxshopid' => $oShop->getId(),
'oxnewrevision' => $this->sModRevision,
);
if ($this->_checkTableItemNotExist('d3_cfg_mod', $aWhere))
{
// update don't use this property
unset($aWhere['oxnewrevision']);
$aInsertFields = array(
'OXID' => array (
'content' => "md5('" . $this->sModKey . " " . $oShop->getId() . " de')",
'force_update' => TRUE,
'use_quote' => FALSE,
),
'OXSHOPID' => array (
'content' => $oShop->getId(),
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXMODID' => array (
'content' => $this->sModKey,
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXNAME' => array (
'content' => $this->sModName,
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXACTIVE' => array (
'content' => "0",
'force_update' => FALSE,
'use_quote' => FALSE,
),
'OXBASECONFIG' => array (
'content' => $this->sBaseConf,
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXSERIAL' => array (
'content' => "",
'force_update' => FALSE,
'use_quote' => TRUE,
),
'OXINSTALLDATE' => array (
'content' => "NOW()",
'force_update' => TRUE,
'use_quote' => FALSE,
),
'OXVERSION' => array (
'content' => $this->sModVersion,
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXSHOPVERSION' => array (
'content' => oxRegistry::getConfig()->getEdition(),
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXREQUIREMENTS' => array (
'content' => $this->sRequirements,
'force_update' => TRUE,
'use_quote' => TRUE,
),
'OXVALUE' => array(
'content' => $this->sBaseValue,
'force_update' => FALSE,
'use_quote' => TRUE,
),
'OXNEWREVISION' => array(
'content' => $this->sModRevision,
'force_update' => TRUE,
'use_quote' => TRUE,
)
);
$aRet = $this->_updateTableItem('d3_cfg_mod', $aInsertFields, $aWhere);
$blRet = $aRet['blRet'];
$this->_setActionLog('SQL', $aRet['sql'], __METHOD__);
$this->_setUpdateBreak(FALSE);
}
}
}
return $blRet;
}
}

View File

@ -20,7 +20,6 @@
class d3_oxcmp_utils_usersonline extends d3_oxcmp_utils_usersonline_parent
{
protected $_blIsComponent = true;
protected $_iExpTime = 600; // (in seconds)
protected $_sD3UsersOnlineModId = 'd3usersonline';
/**
@ -30,22 +29,20 @@ class d3_oxcmp_utils_usersonline extends d3_oxcmp_utils_usersonline_parent
{
$sRet = parent::render();
if (d3_cfg_mod::get($this->_sD3UsersOnlineModId)->isActive())
{
/** @var d3usersonline $oUserOnline */
$oUserOnline = oxNew('d3usersonline');
$oUserOnline->clearOldItems($this->_iExpTime);
$oUserOnline->setActTimeVisit();
if (d3_cfg_mod::get($this->_sD3UsersOnlineModId)->isActive()) {
/** @var d3usersonline $oUsersOnline */
$oUsersOnline = oxNew('d3usersonline');
$oUsersOnline->clearOldItems();
$oUsersOnline->setActTimeVisit();
$oUser = $this->getUser();
if ($oUser && strtolower($oUser->getFieldData('oxrights')) == 'malladmin')
{
if ($oUser && strtolower($oUser->getFieldData('oxrights')) == 'malladmin') {
/** @var oxview $oActView */
$oActView = $this->getParent();
$oActView->addTplParam('aUsersOnline', $oUserOnline->getUserCount());
$oActView->addTplParam('aUsersOnline', $oUsersOnline->getUserCount());
}
}
return $sRet;
}
}
}

View File

@ -0,0 +1,363 @@
<?php
/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3usersonline_update extends d3install_updatebase
{
public $sModKey = 'd3usersonline';
public $sModName = 'Users Online';
public $sModVersion = '2.1.0.0';
public $sModRevision = '2100';
public $sBaseConf = 'qWOv2==Y0dBTjQ4SGQ5Z0wwRVduakMxL01XL1c2dWlpK0p0bEJQeGZEcldMN3hINm5jOTJCWmV6MWhyV
FVDVS9KQ3hwWUtUQmM3d1RVLzBVNGZISCsxVG0wWmVlNTlYOUNGQ0g2b2Z0NGlYQWZXZGprUXdZTzE0c
zRHbGJKaEx0aWZNc3ZSTC9FdU10eHhadDA1c3NZdFlaNmZGQWF0VzUzVWxRQllhTFYxdmQyQTBLekRRM
jhrdDB5M0RnWWJQM3NMSVhBQ2RkS1l2WWJPV3lTNlNWOEwrSGxHdElTMmhoZ2FPYUhQN0lVOEpDZmVwY
0JLWndPRjVidU4rQzM3V29lcXBuaFFGdEdQZGxZZUFyWjFIZkVXVnZpT0NzTkhjV2drRzJCVStIOHVRb
0xLMGJvTTN5Z2ZYV0ZMY2NtY1dCVGkra0M=';
public $sRequirements = '';
public $sBaseValue = '';
public $sMinModCfgVersion = '4.4.0.0';
protected $_aUpdateMethods = array(
array('check' => 'checkUsersOnlineTableExist',
'do' => 'updateUsersOnlineTableExist'),
array('check' => 'checkUsersOnlineTableEngine',
'do' => 'updateUsersOnlineTableEngine'),
array('check' => 'checkRenameFields',
'do' => 'fixRenameFields'),
array('check' => 'checkDeleteFields',
'do' => 'fixDeleteFields'),
array('check' => 'checkModCfgItemExist',
'do' => 'updateModCfgItemExist'),
array('check' => 'checkFields',
'do' => 'fixFields'),
array('check' => 'checkIndizes',
'do' => 'fixIndizes'),
array('check' => 'hasOldModuleFiles',
'do' => 'deleteOldModuleFiles'),
array('check' => 'hasUnregisteredFiles',
'do' => 'showUnregisteredFiles'),
array('check' => 'checkModCfgSameRevision',
'do' => 'updateModCfgSameRevision'),
);
public $aOldModuleFiles = array(
'd3/d3usersonline/models/d3usersonline_update.php',
);
public $aFields = array(
'OXID' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'OXID',
'sType' => 'char(32)',
'blNull' => false,
'sDefault' => false,
'sComment' => '',
'sExtra' => '',
'blMultilang' => false,
),
'TIMEVISIT' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'TIMEVISIT',
'sType' => 'INT(11)',
'blNull' => false,
'sDefault' => '0',
'sComment' => '',
'sExtra' => '',
'blMultilang' => false,
),
'OXCLASS' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'OXCLASS',
'sType' => 'VARCHAR(32)',
'blNull' => false,
'sDefault' => false,
'sComment' => '',
'sExtra' => '',
'blMultilang' => false,
),
'OXPAGE' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'OXPAGE',
'sType' => 'VARCHAR(32)',
'blNull' => false,
'sDefault' => false,
'sComment' => '',
'sExtra' => '',
'blMultilang' => false,
),
);
public $aIndizes = array(
'OXID' => array(
'sTableName' => 'd3usersonline',
'sType' => 'PRIMARY',
'aFields' => array(
'OXID' => 'OXID',
),
),
'OXCLASS' => array(
'sTableName' => 'd3usersonline',
'sType' => '',
'sName' => 'OXCLASS',
'aFields' => array(
'OXCLASS' => 'OXCLASS',
),
),
'CLASSPAGE' => array(
'sTableName' => 'd3usersonline',
'sType' => '',
'sName' => 'CLASSPAGE',
'aFields' => array(
'OXCLASS' => 'OXCLASS',
'OXPAGE' => 'OXPAGE',
),
),
'TIMEVISIT' => array(
'sTableName' => 'd3usersonline',
'sType' => '',
'sName' => 'TIMEVISIT',
'aFields' => array(
'TIMEVISIT' => 'TIMEVISIT',
),
),
);
public $aRenameFields = array(
'OXID' => array(
'sTableName' => 'd3usersonline',
'mOldFieldNames' => array('id', 'ID'), // is case sensitive
'sFieldName' => 'OXID',
'blMultilang' => false,
),
'VISITOR' => array(
'sTableName' => 'd3usersonline',
'mOldFieldNames' => array('visitor'), // is case sensitive
'sFieldName' => 'VISITOR',
'blMultilang' => false,
),
'TIMEVISIT' => array(
'sTableName' => 'd3usersonline',
'mOldFieldNames' => array('timevisit'), // is case sensitive
'sFieldName' => 'TIMEVISIT',
'blMultilang' => false,
),
'OXCLASS' => array(
'sTableName' => 'd3usersonline',
'mOldFieldNames' => array('oxclass'), // is case sensitive
'sFieldName' => 'OXCLASS',
'blMultilang' => false,
),
);
public $aDeleteFields = array(
'VISITOR' => array(
'sTableName' => 'd3usersonline',
'sFieldName' => 'VISITOR',
'blMultilang' => false,
),
);
protected $_aRefreshMetaModuleIds = array('d3usersonline');
/**
* @return bool true, if table is missing
*/
public function checkUsersOnlineTableExist()
{
return $this->_checkTableNotExist('d3usersonline');
}
/**
* @return bool
*/
public function updateUsersOnlineTableExist()
{
$blRet = true;
if ($this->checkUsersOnlineTableExist()) {
$blRet = $this->_addTable2('d3usersonline', $this->aFields, $this->aIndizes, 'users online', 'InnoDB');
}
return $blRet;
}
/**
* @return bool true, if table has wrong engine
*/
public function checkUsersOnlineTableEngine()
{
/** @var d3installdbtable $oDbTable */
$oDbTable = oxNew('d3installdbtable', $this);
$aData = $oDbTable->getTableData('d3usersonline');
if (isset($aData) && count($aData) && isset($aData['ENGINE']) && $aData['ENGINE'] == 'InnoDB') {
return false;
}
return true;
}
/**
* @return bool
*/
public function updateUsersOnlineTableEngine()
{
/** @var d3installdbtable $oDbTable */
$oDbTable = oxNew('d3installdbtable', $this);
$blRet = $oDbTable->changeTableEngine('d3usersonline', 'InnoDB');
return $blRet;
}
/**
* @return bool
*/
public function checkModCfgItemExist()
{
$blRet = false;
foreach ($this->getShopList() as $oShop) {
/** @var $oShop oxshop */
$aWhere = array(
'oxmodid' => $this->sModKey,
'oxnewrevision' => $this->sModRevision,
'oxshopid' => $oShop->getId(),
);
$blRet = $this->_checkTableItemNotExist('d3_cfg_mod', $aWhere);
if ($blRet) {
return $blRet;
}
}
return $blRet;
}
/**
* @return bool
*/
public function updateModCfgItemExist()
{
$blRet = false;
if ($this->checkModCfgItemExist()) {
foreach ($this->getShopList() as $oShop) {
/** @var $oShop oxshop */
$aWhere = array(
'oxmodid' => $this->sModKey,
'oxshopid' => $oShop->getId(),
'oxnewrevision' => $this->sModRevision,
);
if ($this->_checkTableItemNotExist('d3_cfg_mod', $aWhere)) {
// update don't use this property
unset($aWhere['oxnewrevision']);
$aInsertFields = array(
'OXID' => array (
'content' => "md5('" . $this->sModKey . " " . $oShop->getId() . " de')",
'force_update' => true,
'use_quote' => false,
),
'OXSHOPID' => array (
'content' => $oShop->getId(),
'force_update' => true,
'use_quote' => true,
),
'OXMODID' => array (
'content' => $this->sModKey,
'force_update' => true,
'use_quote' => true,
),
'OXNAME' => array (
'content' => $this->sModName,
'force_update' => true,
'use_quote' => true,
),
'OXACTIVE' => array (
'content' => "0",
'force_update' => false,
'use_quote' => false,
),
'OXBASECONFIG' => array (
'content' => $this->sBaseConf,
'force_update' => true,
'use_quote' => true,
),
'OXSERIAL' => array (
'content' => "",
'force_update' => false,
'use_quote' => true,
),
'OXINSTALLDATE' => array (
'content' => "NOW()",
'force_update' => true,
'use_quote' => false,
),
'OXVERSION' => array (
'content' => $this->sModVersion,
'force_update' => true,
'use_quote' => true,
),
'OXSHOPVERSION' => array (
'content' => oxRegistry::getConfig()->getEdition(),
'force_update' => true,
'use_quote' => true,
),
'OXREQUIREMENTS' => array (
'content' => $this->sRequirements,
'force_update' => true,
'use_quote' => true,
),
'OXVALUE' => array(
'content' => $this->sBaseValue,
'force_update' => false,
'use_quote' => true,
),
'OXNEWREVISION' => array(
'content' => $this->sModRevision,
'force_update' => true,
'use_quote' => true,
)
);
$blRet = $this->_updateTableItem2('d3_cfg_mod', $aInsertFields, $aWhere);
$this->setUpdateBreak(false);
}
}
}
return $blRet;
}
/**
* @return bool
*/
public function hasUnregisteredFiles()
{
return $this->_hasUnregisteredFiles($this->sModKey, array('d3FileRegister', 'blocks'));
}
/**
* @return bool
*/
public function showUnregisteredFiles()
{
return $this->_showUnregisteredFiles($this->sModKey, array('d3FileRegister', 'blocks'));
}
}

View File

@ -0,0 +1,48 @@
<?php
/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
$sLangName = 'Deutsch';
$iLangNr = 0;
// -------------------------------
// RESOURCE IDENTITFIER = STRING
// -------------------------------
$aLang = array(
'charset' => 'ISO-8859-15',
'd3mxusersonline' => '<i class="fa fa-bar-chart"></i> Benutzer online',
'd3mxusersonline_settings' => 'Einstellungen',
'd3tbclussersonline_settings_main' => 'Grundeinstellungen',
'd3mxusersonline_analysis' => 'Auswertungen',
'd3tbclusersonline_currvisitors' => 'aktuelle Besucher',
'D3USERSONLINE_NOTACTIVE' => 'Modul ist nicht aktiv',
'D3_USERSONLINE_GROUPBYCLASS' => 'Besuche nur nach Shopseiten gruppieren',
'D3_USERSONLINE_USERSONLINE' => 'Benutzer online',
'D3_USERSONLINE_USER' => 'Benutzer',
'D3_USERSONLINE_USERS' => 'Benutzer',
'D3_USERSONLINE_ALL' => 'gesamt',
'D3_USERSONLINE_SAVE' => 'Speichern',
'D3_USERSONLINE_CLASS_ALIST' => 'Artikelliste aus Kategorie',
'D3_USERSONLINE_CLASS_MANUFACTURERLIST' => 'Artikelliste aus Hersteller',
'D3_USERSONLINE_CLASS_VENDORLIST' => 'Artikelliste aus Lieferant',
'D3_USERSONLINE_CLASS_CONTENT' => 'Informationstext',
'D3_USERSONLINE_CLASS_OXWARTICLEDETAILS' => 'Detailseite',
'D3_USERSONLINE_CLASS_DETAILS' => 'Detailseite',
'D3_USERSONLINE_CLASS_START' => 'Startseite',
'D3_USERSONLINE_CLASS_TAGS' => 'Stichwort',
);

View File

@ -0,0 +1,48 @@
<?php
/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
$sLangName = 'Deutsch';
$iLangNr = 0;
// -------------------------------
// RESOURCE IDENTITFIER = STRING
// -------------------------------
$aLang = array(
'charset' => 'ISO-8859-15',
'd3mxusersonline' => '<i class="fa fa-bar-chart"></i> Users online',
'd3mxusersonline_settings' => 'Settings',
'd3tbclussersonline_settings_main' => 'Main Settings',
'd3mxusersonline_analysis' => 'Analysis',
'd3tbclusersonline_currvisitors' => 'current visitors',
'D3USERSONLINE_NOTACTIVE' => "Module isn't active",
'D3_USERSONLINE_GROUPBYCLASS' => 'group visitors by shop pages only',
'D3_USERSONLINE_USERSONLINE' => 'Users online',
'D3_USERSONLINE_USER' => 'user',
'D3_USERSONLINE_USERS' => 'users',
'D3_USERSONLINE_ALL' => 'all',
'D3_USERSONLINE_SAVE' => 'save',
'D3_USERSONLINE_CLASS_ALIST' => 'article list from category',
'D3_USERSONLINE_CLASS_MANUFACTURERLIST' => 'article list from manufacturer',
'D3_USERSONLINE_CLASS_VENDORLIST' => 'article list from vendor',
'D3_USERSONLINE_CLASS_CONTENT' => 'information text',
'D3_USERSONLINE_CLASS_OXWARTICLEDETAILS' => 'details page',
'D3_USERSONLINE_CLASS_DETAILS' => 'details page',
'D3_USERSONLINE_CLASS_START' => 'start page',
'D3_USERSONLINE_CLASS_TAGS' => 'tag',
);

View File

@ -0,0 +1,144 @@
[{include file="headitem.tpl" title="d3tbclussersonline_settings_main"|oxmultilangassign}]
<script type="text/javascript">
<!--
[{if $updatelist == 1}]
UpdateList('[{$oxid}]');
[{/if}]
function UpdateList( sID)
{
var oSearch = parent.list.document.getElementById("search");
oSearch.oxid.value=sID;
oSearch.fnc.value='';
oSearch.submit();
}
function EditThis( sID)
{
var oTransfer = document.getElementById("transfer");
oTransfer.oxid.value=sID;
oTransfer.cl.value='';
oTransfer.submit();
var oSearch = parent.list.document.getElementById("search");
oSearch.actedit.value = 0;
oSearch.oxid.value=sID;
oSearch.submit();
}
function _groupExp(el) {
var _cur = el.parentNode;
if (_cur.className == "exp") _cur.className = "";
else _cur.className = "exp";
}
-->
</script>
<style type="text/css">
<!--
fieldset {
border: 1px inset black;
background-color: #F0F0F0;
}
legend {
font-weight: bold;
}
.groupExp dl dt {
font-weight: normal;
width: 55%;
padding-left: 10px;
}
.groupExp.highlighted {
background-color: #CD0210;
}
.groupExp.highlighted a.rc b {
color: white;
}
.groupExp.highlighted .exp a.rc b {
color: black;
}
.groupExp.highlighted .exp {
background-color: #F0F0F0;
}
.ext_edittext {
padding: 2px;
}
td.edittext {
white-space: normal;
}
.confinput {
width: 300px;
height: 70px;
}
-->
</style>
[{if $readonly}]
[{assign var="readonly" value="readonly disabled"}]
[{else}]
[{assign var="readonly" value=""}]
[{/if}]
<form name="transfer" id="transfer" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="oxid" value="[{$oxid}]">
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="actshop" value="[{$shop->id}]">
<input type="hidden" name="editlanguage" value="[{$editlanguage}]">
</form>
<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="fnc" value="save">
<input type="hidden" name="oxid" value="[{$oxid}]">
<input type="hidden" name="editval[oxid]" value="[{$oxid}]">
<table border="0" width="98%">
<tr>
<td valign="top" class="edittext">
[{include file="d3_cfg_mod_active.tpl"}]
[{if $oView->getValueStatus() == 'error'}]
<hr>
<b>[{oxmultilang ident="D3_CFG_MOD_GENERAL_NOCONFIG_DESC"}]</b>
<br>
<br>
<span class="d3modcfg_btn fixed icon status_attention">
<input type="submit" value="[{oxmultilang ident="D3_CFG_MOD_GENERAL_NOCONFIG_BTN"}]">
<span></span>
</span>
[{else}]
<table width="100%">
<tr>
<td class="edittext ext_edittext" align="left">
<br>
<span class="d3modcfg_btn icon status_ok">
<input type="submit" name="save" value="[{oxmultilang ident="D3_USERSONLINE_SAVE"}]">
<span></span>
</span>
<br><br>
</td>
</tr>
</table>
[{/if}]
</td>
</tr>
</table>
</form>
[{include file="d3_cfg_mod_inc.tpl"}]

View File

@ -0,0 +1,161 @@
[{include file="headitem.tpl" title="d3tbclussersonline_settings_main"|oxmultilangassign}]
<script type="text/javascript">
<!--
[{if $updatelist == 1}]
UpdateList('[{$oxid}]');
[{/if}]
function UpdateList( sID)
{
var oSearch = parent.list.document.getElementById("search");
oSearch.oxid.value=sID;
oSearch.fnc.value='';
oSearch.submit();
}
function EditThis( sID)
{
var oTransfer = document.getElementById("transfer");
oTransfer.oxid.value=sID;
oTransfer.cl.value='';
oTransfer.submit();
var oSearch = parent.list.document.getElementById("search");
oSearch.actedit.value = 0;
oSearch.oxid.value=sID;
oSearch.submit();
}
function _groupExp(el) {
var _cur = el.parentNode;
if (_cur.className == "exp") _cur.className = "";
else _cur.className = "exp";
}
-->
</script>
<style type="text/css">
<!--
div.box h3 {
margin-top: 20px;
}
fieldset {
border: 1px inset black;
background-color: #F0F0F0;
}
legend {
font-weight: bold;
}
.groupExp dl dt {
font-weight: normal;
width: 55%;
padding-left: 10px;
}
.groupExp.highlighted {
background-color: #CD0210;
}
.groupExp.highlighted a.rc b {
color: white;
}
.groupExp.highlighted .exp a.rc b {
color: black;
}
.groupExp.highlighted .exp {
background-color: #F0F0F0;
}
.ext_edittext {
padding: 2px;
}
td.edittext {
white-space: normal;
}
.confinput {
width: 300px;
height: 70px;
}
-->
</style>
[{if $readonly}]
[{assign var="readonly" value="readonly disabled"}]
[{else}]
[{assign var="readonly" value=""}]
[{/if}]
<form name="transfer" id="transfer" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="oxid" value="[{$oxid}]">
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="actshop" value="[{$shop->id}]">
<input type="hidden" name="editlanguage" value="[{$editlanguage}]">
<input type="hidden" id="groupbyclass" name="groupbyclass" value="false">
</form>
[{d3modcfgcheck modid="d3usersonline"}][{/d3modcfgcheck}]
[{if $mod_d3usersonline}]
[{assign var="aUsersOnline" value=$oView->getUserCount()}]
<input id="groupbyclasscheckbox" value="1" type="checkbox" [{if $blGroupByClass}]checked[{/if}] onchange="document.getElementById('groupbyclass').value = this.checked; document.getElementById('transfer').submit();"> <label for="groupbyclasscheckbox">[{oxmultilang ident="D3_USERSONLINE_GROUPBYCLASS"}]</label>
<h3>[{oxmultilang ident="D3_USERSONLINE_USERSONLINE"}]</h3>
<div class="content">
<table style="border-style: none; width: 100%;">
<tr>
<td style="border-bottom: 1px solid silver;">
[{oxmultilang ident="D3_USERSONLINE_ALL"}]
</td>
<td style="border-bottom: 1px solid silver; text-align: right; font-weight: bold;">
[{$aUsersOnline.all}]&nbsp;
</td>
<td style="border-bottom: 1px solid silver; text-align: left;">
[{if $aUsersOnline.all == 1}]
[{oxmultilang ident="D3_USERSONLINE_USER"}]
[{else}]
[{oxmultilang ident="D3_USERSONLINE_USERS"}]
[{/if}]
</td>
</tr>
[{foreach from=$aUsersOnline.classes item="aClassUser"}]
<tr>
<td>
[{if $aClassUser->classname}]
[{$oView->getControllerTitle($aClassUser->classname)}]
[{else}]
undefined
[{/if}]
[{if $aClassUser->page}]
"[{$aClassUser->page}]"
[{/if}]
:
</td>
<td style="text-align: right; font-weight: bold;">
[{$aClassUser->counter}]&nbsp;
</td>
<td style="text-align: left;">
[{if $aClassUser->counter == 1}]
[{oxmultilang ident="D3_USERSONLINE_USER"}]
[{else}]
[{oxmultilang ident="D3_USERSONLINE_USERS"}]
[{/if}]
</td>
</tr>
[{/foreach}]
</table>
</div>
[{else}]
[{oxmultilang ident="D3USERSONLINE_NOTACTIVE"}]
[{/if}]
[{include file="d3_cfg_mod_inc.tpl"}]

Binary file not shown.

File diff suppressed because it is too large Load Diff

26
setup+doku/changelog.txt Normal file
View File

@ -0,0 +1,26 @@
=> 2.1.0.0
- Datenbank-Tabelle auf InnoDb geändert
- Tabellenindizes für optimierte Abfragen ergänzt
- Löschabfragen wegen mglw. hoher Datenbanklast begrenzt
- Besuchereinträge wurden um Seitendetails ergänzt
- Auswertung im Backend lässt sich zwischen bisheriger und neuer Gruppierung umschalten
- Auswertung im Frontend entfernt (#6828)
- fehlerhafte Übersetzung korrigiert (#6827)
=> 2.0.1.1
- Precheck für PHP 5.5 und 5.6 angepasst
=> 2.0.1.0
- Statistik steht auch im Adminbereich zur Verfügung
- automatische Installation aktualisiert
- Modulstruktur angepasst
=> 2.0.0.2
- Datenbankstruktur in automatischer Installation korrigiert
=> 2.0.0.1
- ModulID korrigiert
- Datenbankstruktur bei Altinstallationen aktualisiert
=> 2.0.0.0
- für OXID 4.7 / 5.0 angepasst

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.