Files
grzanieplus.pl/plugins/stUserTrackerLevelPlugin/modules/stUserTrackerLevelWidgetBackend/actions/actions.class.php
2025-03-12 17:06:23 +01:00

228 lines
8.7 KiB
PHP

<?php
class stUserTrackerLevelWidgetBackendActions extends stGadgetActions
{
public function executeUserTrackerEnteringWidget()
{
use_helper('I18N', 'Text', 'stAdminGenerator', 'ObjectAdmin', 'stDate', 'stProductImage', 'stCurrency');
sfLoader::loadHelpers('stProduct', 'stProduct');
$request = $this->getRequest();
$i18n = $this->getContext()->getI18N();
$context = $this->getContext();
$this->config = stConfig::getInstance($context);
$this->config->setCulture($this->getRequestParameter('culture', stLanguage::getOptLanguage()));
$config_user_tracker_level = stConfig::getInstance('stUserTrackerLevelBackend');
if (!$config_user_tracker_level->get('enabled_database')) {
$i18n = $this->getContext()->getI18n();
$notice = $i18n->__('Opcja trybu rozszerzonego monitorowania klientów jest wyłączona.')."&nbsp;".$i18n->__('Aby ją włączyć przejdź do konfiguracji modułu.')."&nbsp;".'<a href="'.$this->getController()->genUrl("stUserTrackerLevelBackend/config").'" target="_blank">'.$i18n->__('Konfiguracja').'</a>';
$this->setFlash("info", $notice, false);
}
$this->number_of_users = 0;
$this->is_enabled_database = $config_user_tracker_level->get('enabled_database');
if ($config_user_tracker_level->get('enabled_database')) {
$c = new Criteria();
$c->add(stUserTrackerLevelPeer::UPDATED_AT, time() - 1800, Criteria::GREATER_THAN); // tylko rekordy z ostatnich 30 minut
$c->addDescendingOrderByColumn(stUserTrackerLevelPeer::UPDATED_AT);
$c->setLimit(5000);
$stUserTrackerLevel = stUserTrackerLevelPeer::doSelect($c);
$this->all_visit = count($stUserTrackerLevel);
if($stUserTrackerLevel){
$data = array();
foreach($stUserTrackerLevel as $st_user_tracker_level)
{
$product = ProductPeer::retrieveByPk($st_user_tracker_level->getProductView());
$prodcut_name = "";
if($product){
$prodcut_name = $product->getName();
}
$product = ProductPeer::retrieveByPk($st_user_tracker_level->getAddToBasket());
$prodcut_basket = "";
if($product){
$prodcut_basket = $product->getName();
}
$size = $st_user_tracker_level->getVisitCount();
/*if($size == 1){
$size = 1;
}
if($size == 2){
$size = 2;
}
if($size >= 3){
$size = 3;
}
if($size >= 5){
$size = 5;
}
if($size >= 8){
$size = 8;
}
if($size > 10){
$size = 1000;
}*/
$active = stUserTrackerLevelInterface::getIsActive($st_user_tracker_level->getCookieId());
if($active){
if($st_user_tracker_level->getUtColor()==""){
$color = stUserTrackerLevelInterface::generateColor();
$st_user_tracker_level->setUtColor($color);
$st_user_tracker_level->save();
}
$color = $st_user_tracker_level->getUtColor();
}else{
$color = "#cccccc";
if($size == 1){
$color = "#eeeeee";
}
if($size == 2){
$color = "#dddddd";
}
}
$icon = $active ? st_admin_get_icon('check-circle') : "&nbsp;";
$data[] = array(
"product" => $prodcut_name,
"basket" => $prodcut_basket,
"update" => st_format_date($st_user_tracker_level->getUpdatedAt())." ".$icon,
"visit" => $st_user_tracker_level->getVisitCount(),
"active" => $active,
"count" => $size,
"color" => $color
);
}
//emulowanie danych: ilość kółek, procent aktywnych
//$data = $this->emulateDate(33,80);
// zakładamy, że mamy tablicę $dane z wieloma rekordami
$number_of_row = count($data);
// pozostaw tylko ostatnie 500 rekordów, usuwając pozostałe
if ($number_of_row > 500) {
$data = array_slice($data, $number_of_row - 500, 500);
}
$number_of_row = count($data);
switch (true) {
case ($number_of_row >= 16):
$this->diameter = 600;
break;
case ($number_of_row >= 8):
$this->diameter = 500;
break;
case ($number_of_row >= 6):
$this->diameter = 400;
break;
case ($number_of_row >= 3):
$this->diameter = 300;
break;
case ($number_of_row >= 2):
$this->diameter = 200;
break;
case ($number_of_row == 1):
$this->diameter = 110;
break;
}
$this->number_of_users = $number_of_row;
$this->number_of_active = $this->count_active($data);
/*echo "<pre>";
print_r($data);
echo "<pre>";*/
$dataset = array("children" => $data);
$this->json_data = json_encode($dataset);
}
}
}
public function count_active($array) {
$count = 0;
foreach ($array as $item) {
if ($item['active'] == 1) {
$count++;
}
}
return $count;
}
public function isTruePercent($percent) {
$randNum = mt_rand(0, 99);
return $randNum < $percent;
}
public function emulateDate($count, $percent) {
$tablica = array();
for ($i = 0; $i < $count; $i++) {
$temp_visit = rand(1, 10);
$temp_visit_count = $temp_visit."000";
if($this->isTruePercent($percent)){
$color = stUserTrackerLevelInterface::generateColor();
$active = 1;
$icon = st_admin_get_icon('check-circle');
}else{
$color = "#cccccc";
$active = 0;
$icon = "&nbsp;";
}
$tablica[$i] = array(
'product' => 'Produkt '.$i,
'basket' => 'Koszyk '.$i,
'update' => date('Y-m-d H:i:s')." ".$icon,
'visit' => $temp_visit,
'active' => $active,
'count' => $temp_visit_count,
'color' => $color
);
}
return $tablica;
}
}