Changeset View
Changeset View
Standalone View
Standalone View
branches/5.2.x/core/units/page_revisions/page_revision_eh.php
Show All 27 Lines | |||||
if ( $event->Name == 'OnItemBuild' ) { | if ( $event->Name == 'OnItemBuild' ) { | ||||
return true; | return true; | ||||
} | } | ||||
if ( $event->Name == 'OnGetInfo' || $event->Name == 'OnDiscard' ) { | if ( $event->Name == 'OnGetInfo' || $event->Name == 'OnDiscard' ) { | ||||
return $this->Application->isAdminUser; | return $this->Application->isAdminUser; | ||||
} | } | ||||
/** @var kPermissionsHelper $perm_helper */ | |||||
$perm_helper = $this->Application->recallObject('PermissionsHelper'); | $perm_helper = $this->Application->recallObject('PermissionsHelper'); | ||||
/* @var $perm_helper kPermissionsHelper */ | |||||
if ( $event->Name == 'OnSave' ) { | if ( $event->Name == 'OnSave' ) { | ||||
$perm_status = $this->Application->CheckPermission('CATEGORY.REVISION.ADD', 0) || $this->Application->CheckPermission('CATEGORY.REVISION.ADD.PENDING', 0); | $perm_status = $this->Application->CheckPermission('CATEGORY.REVISION.ADD', 0) || $this->Application->CheckPermission('CATEGORY.REVISION.ADD.PENDING', 0); | ||||
return $perm_helper->finalizePermissionCheck($event, $perm_status); | return $perm_helper->finalizePermissionCheck($event, $perm_status); | ||||
} | } | ||||
if ( $event->Name == 'OnPublish' || $event->Name == 'OnDecline' ) { | if ( $event->Name == 'OnPublish' || $event->Name == 'OnDecline' ) { | ||||
Show All 11 Lines | |||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function SetCustomQuery(kEvent $event) | protected function SetCustomQuery(kEvent $event) | ||||
{ | { | ||||
parent::SetCustomQuery($event); | parent::SetCustomQuery($event); | ||||
/** @var kDBList $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBList */ | |||||
$page_id = $event->getEventParam('page_id'); | $page_id = $event->getEventParam('page_id'); | ||||
if ( $this->Application->isAdmin ) { | if ( $this->Application->isAdmin ) { | ||||
$user_id = $this->Application->RecallVar('user_id'); | $user_id = $this->Application->RecallVar('user_id'); | ||||
} | } | ||||
else { | else { | ||||
$user_id = $this->Application->RecallVar('admin_user_id'); | $user_id = $this->Application->RecallVar('admin_user_id'); | ||||
Show All 11 Lines | |||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return int | * @return int | ||||
* @access public | * @access public | ||||
*/ | */ | ||||
public function getPassedID(kEvent $event) | public function getPassedID(kEvent $event) | ||||
{ | { | ||||
if ( $event->Special == 'current' ) { | if ( $event->Special == 'current' ) { | ||||
/** @var kDBItem $page */ | |||||
$page = $this->Application->recallObject('st.-virtual'); | $page = $this->Application->recallObject('st.-virtual'); | ||||
/* @var $page kDBItem */ | |||||
/** @var PageHelper $page_helper */ | |||||
$page_helper = $this->Application->recallObject('PageHelper'); | $page_helper = $this->Application->recallObject('PageHelper'); | ||||
/* @var $page_helper PageHelper */ | |||||
$page_id = $page->GetID(); | $page_id = $page->GetID(); | ||||
$revision_clause = $page_helper->getRevsionWhereClause($page_id, $page->GetDBField('LiveRevisionNumber')); | $revision_clause = $page_helper->getRevsionWhereClause($page_id, $page->GetDBField('LiveRevisionNumber')); | ||||
$sql = 'SELECT RevisionId | $sql = 'SELECT RevisionId | ||||
FROM ' . TABLE_PREFIX . 'PageRevisions | FROM ' . TABLE_PREFIX . 'PageRevisions | ||||
WHERE (PageId = ' . $page_id . ') AND (' . $revision_clause . ') | WHERE (PageId = ' . $page_id . ') AND (' . $revision_clause . ') | ||||
ORDER BY IsDraft DESC, RevisionNumber DESC'; | ORDER BY IsDraft DESC, RevisionNumber DESC'; | ||||
$id = $this->Conn->GetOne($sql); | $id = $this->Conn->GetOne($sql); | ||||
if ( $id ) { | if ( $id ) { | ||||
return $id; | return $id; | ||||
} | } | ||||
// no revisions -> create live revision | // no revisions -> create live revision | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
$object->SetDBField('PageId', $page_id); | $object->SetDBField('PageId', $page_id); | ||||
$object->SetDBField('RevisionNumber', 1); | $object->SetDBField('RevisionNumber', 1); | ||||
$object->SetDBField('Status', STATUS_ACTIVE); | $object->SetDBField('Status', STATUS_ACTIVE); | ||||
$object->Create(); | $object->Create(); | ||||
return $object->GetID(); | return $object->GetID(); | ||||
} | } | ||||
return parent::getPassedID($event); | return parent::getPassedID($event); | ||||
} | } | ||||
/** | /** | ||||
* Remembers, who created revision | * Remembers, who created revision | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnBeforeItemCreate(kEvent $event) | protected function OnBeforeItemCreate(kEvent $event) | ||||
{ | { | ||||
parent::OnBeforeItemCreate($event); | parent::OnBeforeItemCreate($event); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
if ( $this->Application->isAdmin ) { | if ( $this->Application->isAdmin ) { | ||||
$object->SetDBField('CreatedById', $this->Application->RecallVar('user_id')); | $object->SetDBField('CreatedById', $this->Application->RecallVar('user_id')); | ||||
} | } | ||||
else { | else { | ||||
$object->SetDBField('CreatedById', $this->Application->RecallVar('admin_user_id')); | $object->SetDBField('CreatedById', $this->Application->RecallVar('admin_user_id')); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Updates revision creation time | * Updates revision creation time | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnBeforeItemUpdate(kEvent $event) | protected function OnBeforeItemUpdate(kEvent $event) | ||||
{ | { | ||||
parent::OnBeforeItemUpdate($event); | parent::OnBeforeItemUpdate($event); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
if ( $object->GetDBField('IsDraft') == 0 && $object->GetOriginalField('IsDraft') == 1 ) { | if ( $object->GetDBField('IsDraft') == 0 && $object->GetOriginalField('IsDraft') == 1 ) { | ||||
$object->SetDBField('CreatedOn_date', adodb_mktime()); | $object->SetDBField('CreatedOn_date', adodb_mktime()); | ||||
$object->SetDBField('CreatedOn_time', adodb_mktime()); | $object->SetDBField('CreatedOn_time', adodb_mktime()); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Creates new content blocks based on source revision | * Creates new content blocks based on source revision | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnAfterItemCreate(kEvent $event) | protected function OnAfterItemCreate(kEvent $event) | ||||
{ | { | ||||
parent::OnAfterItemCreate($event); | parent::OnAfterItemCreate($event); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
if ( !$object->GetDBField('FromRevisionId') ) { | if ( !$object->GetDBField('FromRevisionId') ) { | ||||
return ; | return ; | ||||
} | } | ||||
/** @var kDBItem $content */ | |||||
$content = $this->Application->recallObject('content.-item', null, Array ('skip_autoload' => true)); | $content = $this->Application->recallObject('content.-item', null, Array ('skip_autoload' => true)); | ||||
/* @var $content kDBItem */ | |||||
$sql = $content->GetSelectSQL() . ' | $sql = $content->GetSelectSQL() . ' | ||||
WHERE pr.RevisionId = ' . $object->GetDBField('FromRevisionId'); | WHERE pr.RevisionId = ' . $object->GetDBField('FromRevisionId'); | ||||
$content_blocks = $this->Conn->Query($sql); | $content_blocks = $this->Conn->Query($sql); | ||||
foreach ($content_blocks as $content_block) { | foreach ($content_blocks as $content_block) { | ||||
$content->LoadFromHash($content_block); | $content->LoadFromHash($content_block); | ||||
$content->SetDBField('RevisionId', $object->GetID()); | $content->SetDBField('RevisionId', $object->GetID()); | ||||
$content->Create(); | $content->Create(); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Mark revision as current, once it's approved | * Mark revision as current, once it's approved | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnAfterItemUpdate(kEvent $event) | protected function OnAfterItemUpdate(kEvent $event) | ||||
{ | { | ||||
parent::OnAfterItemUpdate($event); | parent::OnAfterItemUpdate($event); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
$status = $object->GetDBField('Status'); | $status = $object->GetDBField('Status'); | ||||
if ( $status != $object->GetOriginalField('Status') && $status == STATUS_ACTIVE ) { | if ( $status != $object->GetOriginalField('Status') && $status == STATUS_ACTIVE ) { | ||||
/** @var kDBItem $page */ | |||||
$page = $this->Application->recallObject('c.revision', null, Array ('skip_autoload' => true)); | $page = $this->Application->recallObject('c.revision', null, Array ('skip_autoload' => true)); | ||||
/* @var $page kDBItem */ | |||||
$page->Load($object->GetDBField('PageId')); | $page->Load($object->GetDBField('PageId')); | ||||
$page->SetDBField('LiveRevisionNumber', $object->GetDBField('RevisionNumber')); | $page->SetDBField('LiveRevisionNumber', $object->GetDBField('RevisionNumber')); | ||||
$page->Update(); | $page->Update(); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Returns user, who are editing current page right now | * Returns user, who are editing current page right now | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnGetInfo($event) | function OnGetInfo($event) | ||||
{ | { | ||||
$event->status = kEvent::erSTOP; | $event->status = kEvent::erSTOP; | ||||
if ( $this->Application->GetVar('ajax') != 'yes' ) { | if ( $this->Application->GetVar('ajax') != 'yes' ) { | ||||
return ; | return ; | ||||
} | } | ||||
/** @var PageHelper $page_helper */ | |||||
$page_helper = $this->Application->recallObject('PageHelper'); | $page_helper = $this->Application->recallObject('PageHelper'); | ||||
/* @var $page_helper PageHelper */ | |||||
$page_id = $this->Application->GetVar('m_cat_id'); | $page_id = $this->Application->GetVar('m_cat_id'); | ||||
echo json_encode( $page_helper->getPageInfo($page_id) ); | echo json_encode( $page_helper->getPageInfo($page_id) ); | ||||
} | } | ||||
/** | /** | ||||
* Saves user draft into live revision | * Saves user draft into live revision | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnSave(kEvent $event) | protected function OnSave(kEvent $event) | ||||
{ | { | ||||
$revision_id = $this->getCurrentDraftRevision($event); | $revision_id = $this->getCurrentDraftRevision($event); | ||||
if ( $revision_id ) { | if ( $revision_id ) { | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(Array ('skip_autoload' => true)); | $object = $event->getObject(Array ('skip_autoload' => true)); | ||||
/* @var $object kDBItem */ | |||||
$object->Load($revision_id); | $object->Load($revision_id); | ||||
$object->SetDBField('IsDraft', 0); | $object->SetDBField('IsDraft', 0); | ||||
$object->SetDBField('RevisionNumber', $this->getNextAvailableRevision($event)); | $object->SetDBField('RevisionNumber', $this->getNextAvailableRevision($event)); | ||||
if ( $this->Application->CheckPermission('CATEGORY.REVISION.ADD', 0) ) { | if ( $this->Application->CheckPermission('CATEGORY.REVISION.ADD', 0) ) { | ||||
$object->SetDBField('Status', STATUS_ACTIVE); | $object->SetDBField('Status', STATUS_ACTIVE); | ||||
} | } | ||||
Show All 12 Lines | |||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnDiscard($event) | function OnDiscard($event) | ||||
{ | { | ||||
$revision_id = $this->getCurrentDraftRevision($event); | $revision_id = $this->getCurrentDraftRevision($event); | ||||
if ( $revision_id ) { | if ( $revision_id ) { | ||||
/** @var kTempTablesHandler $temp_handler */ | |||||
$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler'); | $temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler'); | ||||
/* @var $temp_handler kTempTablesHandler */ | |||||
$temp_handler->DeleteItems($event->Prefix, $event->Special, Array ($revision_id)); | $temp_handler->DeleteItems($event->Prefix, $event->Special, Array ($revision_id)); | ||||
} | } | ||||
$event->SetRedirectParam('opener', 'u'); | $event->SetRedirectParam('opener', 'u'); | ||||
} | } | ||||
/** | /** | ||||
* Makes revision live | * Makes revision live | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnPublish($event) | function OnPublish($event) | ||||
{ | { | ||||
/** @var kDBItem $revision */ | |||||
$revision = $this->Application->recallObject('page-revision.current'); | $revision = $this->Application->recallObject('page-revision.current'); | ||||
/* @var $revision kDBItem */ | |||||
if ( !$revision->isLoaded() || $revision->GetDBField('Status') == STATUS_ACTIVE || $revision->GetDBField('IsDraft') ) { | if ( !$revision->isLoaded() || $revision->GetDBField('Status') == STATUS_ACTIVE || $revision->GetDBField('IsDraft') ) { | ||||
return ; | return ; | ||||
} | } | ||||
$revision->SetDBField('Status', STATUS_ACTIVE); | $revision->SetDBField('Status', STATUS_ACTIVE); | ||||
$revision->Update(); | $revision->Update(); | ||||
$event->SetRedirectParam('opener', 'u'); | $event->SetRedirectParam('opener', 'u'); | ||||
} | } | ||||
/** | /** | ||||
* Denies changes made in revision | * Denies changes made in revision | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnDecline($event) | function OnDecline($event) | ||||
{ | { | ||||
/** @var kDBItem $revision */ | |||||
$revision = $this->Application->recallObject('page-revision.current'); | $revision = $this->Application->recallObject('page-revision.current'); | ||||
/* @var $revision kDBItem */ | |||||
if ( !$revision->isLoaded() || $revision->GetDBField('Status') == STATUS_DISABLED || $revision->GetDBField('IsLive') || $revision->GetDBField('IsDraft') ) { | if ( !$revision->isLoaded() || $revision->GetDBField('Status') == STATUS_DISABLED || $revision->GetDBField('IsLive') || $revision->GetDBField('IsDraft') ) { | ||||
return ; | return ; | ||||
} | } | ||||
$revision->SetDBField('Status', STATUS_DISABLED); | $revision->SetDBField('Status', STATUS_DISABLED); | ||||
$revision->Update(); | $revision->Update(); | ||||
Show All 40 Lines |