3namespace Bitrix\Seo\Sitemap;
6use Bitrix\Main\SystemException;
7use Bitrix\Main\Localization\Loc;
8use Bitrix\Main\Text\Converter;
9use Bitrix\Main\Type\DateTime;
10use Bitrix\Seo\Sitemap\Internals\JobTable;
11use Bitrix\Seo\Sitemap\Internals\SitemapTable;
12use Bitrix\Seo\Sitemap\Type\Step;
14Loc::loadMessages(__DIR__ .
'/../../admin/seo_sitemap.php');
78 $this->
id = (int)$job[
'ID'];
79 $this->status = $job[
'STATUS'];
80 $this->statusMessage = $job[
'STATUS_MESSAGE'];
81 $this->step = (int)$job[
'STEP'];
82 $this->state = $job[
'STATE'] ?? [];
84 $this->isLocked = $job[
'RUNNING'] ===
'Y';
85 $this->dateModify = $job[
'DATE_MODIFY'] ?
new DateTime($job[
'DATE_MODIFY']) :
null;
110 $sitemap = SitemapTable::query()
117 return (
bool)$sitemap;
153 $res = JobTable::add(
158 'STATUS_MESSAGE' =>
'',
159 'STEP' => Step::getFirstStep(),
164 if (
$res->isSuccess())
181 $job = JobTable::query()
182 ->setSelect([
'ID',
'RUNNING',
'STATUS',
'STATUS_MESSAGE',
'STEP',
'STATE',
'DATE_MODIFY'])
238 $res = \CAgent::getList(
241 'MODULE_ID' =>
'seo',
245 $exists =
$res->Fetch();
247 return $exists ?:
null;
258 $nextExec = \ConvertTimeStamp(time() + \CTimeZone::GetOffset() + self::AGENT_DELAY,
"FULL");
260 return \CAgent::addAgent(
264 self::AGENT_INTERVAL,
279 if ($agent && $agent[
'RUNNING'] ===
'N')
281 return \CAgent::Delete($agent[
'ID']);
289 return __CLASS__ .
'::' . self::AGENT_FUNCTION .
'(' .
$sitemapId .
');';
332 ->init($this->step, $this->state)
334 if ($generator->run())
336 $this->state = $generator->getState();
337 $this->statusMessage = $generator->getStatusMessage();
338 $this->step = $generator->getStep();
340 if ($this->step <= Step::STEPS[Step::STEP_INIT])
342 $this->status = self::STATUS_REGISTER;
344 elseif ($this->step >= Step::STEPS[Step::STEP_INDEX])
346 $this->status = self::STATUS_FINISH;
351 $this->status = self::STATUS_PROCESS;
361 protected function lock(): bool
363 $res = JobTable::update(
369 if (
$res->isSuccess())
371 $this->isLocked =
true;
381 $res = JobTable::update(
388 if (
$res->isSuccess())
390 $this->isLocked =
false;
402 if ($this->dateModify)
405 if ($secondsDiff > self::LOCK_MAX_INTERVAL)
421 protected function save(): bool
423 $res = JobTable::update(
426 'STATUS' => $this->status,
427 'STATUS_MESSAGE' => $this->statusMessage,
428 'STATE' => $this->state,
429 'STEP' => $this->step,
433 return $res->isSuccess();
444 $res = JobTable::delete(
448 return $res->isSuccess();
467 require_once(
$_SERVER[
'DOCUMENT_ROOT'].
'/bitrix/modules/main/interface/admin_lib.php');
469 $title = Loc::getMessage(
'SEO_SITEMAP_RUN_TITLE') .
" (ID {$this->sitemapId})";
470 if ($this->step < Step::getLastStep())
472 $msg = new \CAdminMessage([
473 "TYPE" =>
"PROGRESS",
476 "DETAILS" =>
"#PROGRESS_BAR#<div style=\"width: "
477 . self::PROGRESS_WIDTH
478 .
"px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-top: 20px;\">"
481 "PROGRESS_TOTAL" => 100,
482 "PROGRESS_VALUE" => $this->step,
483 "PROGRESS_TEMPLATE" =>
'#PROGRESS_PERCENT#',
484 "PROGRESS_WIDTH" => self::PROGRESS_WIDTH,
489 $msg = new \CAdminMessage([
492 "DETAILS" => $this->statusMessage,
static getHtmlConverter()
static deleteAgent(int $sitemapId)
static findJob(int $sitemapId)
static addJob(int $sitemapId)
static getDataBySitemap(int $sitemapId)
static addAgent(int $sitemapId)
static getAgentName(int $sitemapId)
static doJobAgent(int $sitemapId)
__construct(int $sitemapId)
static markToRegenerate(int $sitemapId)
getFormattedStatusMessage()
static clearBySitemap(int $sitemapId)
static findAgent(int $sitemapId)
static checkSitemapExists(int $sitemapId)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)