public function triggerEvent(array $events = [], Nette\Database\Table\ActiveRow $section = null, $debug = false)
{
if($debug)
{
$logFile = INDEX_DIR . '/trigger-event.log';
$logData = [];
foreach ($events as $event)
{
$logData[] = sprintf('%s | %s | sectionId: %d',
date('Y-m-d H:i:s'),
$event,
($section !== null) ? $section->id : $section
)
. PHP_EOL;
}
file_put_contents('nette.safe://' . $logFile, $logData, FILE_APPEND);
}
$sectionIndependentEvents = ['onAny'];
$whereOrParams = $whereOr = [];
foreach($events as $event)
{
$whereOr[] = 'FIND_IN_SET(?, event)';
$whereOrParams[] = $event;
}
$presenters = $this->connection->table('catalogue_presenter_config')
->where(implode(' OR ', $whereOr), ...$whereOrParams);
$pagesToInvalidate = [];
foreach ($presenters as $presenterRow)
{
$pages = $this->connection
->table('catalogue_page')
->where('catalogue_section.catalogue_id', $section->catalogue_id)
->where('presenter_id', $presenterRow->presenter_id);
$invalidateIndependent = FALSE;
foreach(explode(',', $presenterRow->event) as $event)
if(in_array($event, $sectionIndependentEvents))
$invalidateIndependent = TRUE;
if(!$invalidateIndependent)
$page->where('catalogue_section_id', $section->id);
foreach ($pages as $page)
$pagesToInvalidate[$page->id] = $page;
}
foreach ($pagesToInvalidate as $pageId => $page)
$this->invalidPdf($page);
}
public function recountPageNumbersInCatalogue($catalogueId)
{
$this->connection->query('
UPDATE
catalogue_page
JOIN (
SELECT
tmp2.*,
@totalRank := @totalRank + tmp2.prev as lastPageNumberInCatalogue
FROM
(SELECT @totalRank := 0) as tempTotalRank,
(
SELECT
tmp.*,
@prev as prev,
@prev := tmp.pdf_pages_count
FROM
(
SELECT
@prev := 0,
t2.name AS sectionName,
t2.rank AS sectionRank,
t1.rank AS pageRank,
t1.id,
t1.pdf_pages_count
FROM
catalogue_page t1
JOIN catalogue_section t2 ON t2.id = t1.catalogue_section_id
WHERE t2.catalogue_id = ?
ORDER BY sectionRank ASC, pageRank ASC
) AS tmp
) AS tmp2
) tmpJoin ON tmpJoin.id = catalogue_page.id
SET page_number = lastPageNumberInCatalogue + 1
', $catalogueId);
}