Files
grzanieplus.pl/plugins/stSecurityPlugin/lib/stSecurityMigrationProgressBarTask.class.php
2025-03-12 17:06:23 +01:00

136 lines
3.8 KiB
PHP

<?php
class stSecurityMigrationProgressBarTask extends stProgressBarTask
{
const LIMIT = 20;
const TASKS = array(
'security_migration_order_user_data' => array('label' => 'Uaktualnienie szyfrowania danych użytkowników', 'class' => 'UserDataPeer'),
'security_migration_order_user_data_billing' => array('label' => 'Uaktualnienie szyfrowania danych billingowych w zamówieniach', 'class' => 'OrderUserDataBillingPeer'),
'security_migration_order_user_data_delivery' => array('label' => 'Uaktualnienie szyfrowania danych dostawy w zamówieniach', 'class' => 'OrderUserDataDeliveryPeer'),
'security_migration_invoice_customer_data' => array('label' => 'Uaktualnienie szyfrowania danych klientów w fakturach', 'class' => 'InvoiceUserCustomerPeer'),
'security_migration_invoice_seller_data' => array('label' => 'Uaktualnienie szyfrowania danych sprzedawców w fakturach', 'class' => 'InvoiceUserSellerPeer'),
'security_migration_mail_account' => array('label' => 'Uaktualnienie szyfrowania kont pocztowych', 'class' => 'MailAccountPeer'),
);
protected $currentTask = null;
public function count()
{
$count = 0;
$tasks = array();
foreach (self::TASKS as $name => $task)
{
$c = new Criteria();
$c->add(self::getPeerClassConstant('CRYPT', $task['class']), 2, Criteria::LESS_THAN);
$count += call_user_func(array($task['class'], 'doCount'), $c);
$task['count'] = $count;
$tasks[] = $task;
}
$this->setParameter('tasks', array_reverse($tasks));
if (!$count)
{
stLock::isPHP72Ready(true);
}
return $count;
}
public function execute($offset)
{
$task = $this->getCurrentTask($offset);
if ($task)
{
$this->setMessage($task['label']);
$c = new Criteria();
$c->add(self::getPeerClassConstant('CRYPT', $task['class']), 2, Criteria::LESS_THAN);
$c->setLimit(self::LIMIT);
$results = call_user_func(array($task['class'], 'doSelect'), $c);
if ($results)
{
foreach ($results as $result)
{
$result->save();
usleep(250000);
$offset++;
}
}
else
{
$offset = $task['count'];
}
}
return $offset;
}
public function getTitle()
{
return null;
}
public function finished()
{
sfLoader::loadHelpers(array('Helper', 'stPartial'));
$this->setMessage($this->getI18N()->__('Uaktualnienie szyfrowania zakończone pomyślnie'));
if ($this->checkStatus())
{
stLock::isPHP72Ready(true);
}
}
public function started()
{
$this->setParameter('current.task', null);
}
public static function getPeerClassConstant($constant, $peerClass)
{
return constant($peerClass.'::'.$constant);
}
protected function getCurrentTask($offset)
{
if (null === $this->currentTask)
{
$this->currentTask = $this->getParameter("current.task");
if (null === $this->currentTask || $offset >= $this->currentTask['count'])
{
$tasks = $this->getParameter('tasks');
$this->currentTask = array_pop($tasks);
$this->setParameter('current.task', $this->currentTask);
$this->setParameter('tasks', $tasks);
}
}
return $this->currentTask;
}
protected function checkStatus()
{
foreach (self::TASKS as $task)
{
$c = new Criteria();
$c->add($this->getPeerClassConstant('CRYPT', $task['class']), 2, Criteria::LESS_THAN);
if (call_user_func(array($task['class'], 'doCount'), $c) > 0)
{
return false;
}
}
return true;
}
}