const COMMENTED_ON = 'commented_on';
const PERMISSIONS_UPDATE = 'permissions_update';
+ const REVISION_RESTORE = 'revision_restore';
+ const REVISION_DELETE = 'revision_delete';
+
const SETTINGS_UPDATE = 'settings_update';
const MAINTENANCE_ACTION_RUN = 'maintenance_action_run';
namespace BookStack\Entities\Models;
use BookStack\Auth\User;
+use BookStack\Interfaces\Loggable;
use BookStack\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @property Page $page
* @property-read ?User $createdBy
*/
-class PageRevision extends Model
+class PageRevision extends Model implements Loggable
{
protected $fillable = ['name', 'text', 'summary'];
protected $hidden = ['html', 'markdown', 'restricted', 'text'];
{
return $type === 'revision';
}
+
+ public function logDescriptor(): string
+ {
+ return "Revision #{$this->revision_number} (ID: {$this->id}) for page ID {$this->page_id}";
+ }
}
$this->savePageRevision($page, $summary);
Activity::add(ActivityType::PAGE_RESTORE, $page);
+ Activity::add(ActivityType::REVISION_RESTORE, $revision);
return $page;
}
use Illuminate\Support\Facades\Facade;
/**
- * @see \BookStack\Actions\ActivityLogger
+ * @mixin \BookStack\Actions\ActivityLogger
*/
class Activity extends Facade
{
namespace BookStack\Http\Controllers;
+use BookStack\Actions\ActivityType;
use BookStack\Entities\Repos\PageRepo;
use BookStack\Entities\Tools\PageContent;
use BookStack\Exceptions\NotFoundException;
+use BookStack\Facades\Activity;
use Ssddanbrown\HtmlDiff\Diff;
class PageRevisionController extends Controller
}
$revision->delete();
+ Activity::add(ActivityType::REVISION_DELETE, $revision);
$this->showSuccessNotification(trans('entities.revision_delete_success'));
return redirect($page->getUrl('/revisions'));
namespace Tests\Entity;
+use BookStack\Actions\ActivityType;
use BookStack\Entities\Models\Page;
use BookStack\Entities\Repos\PageRepo;
use Tests\TestCase;
'type' => 'version',
'summary' => "Restored from #{$revToRestore->id}; My first update",
]);
+
+ $detail = "Revision #{$revToRestore->revision_number} (ID: {$revToRestore->id}) for page ID {$revToRestore->page_id}";
+ $this->assertActivityExists(ActivityType::REVISION_RESTORE, null, $detail);
}
public function test_page_revision_count_increments_on_update()
$this->assertTrue($beforeRevisionCount === ($afterRevisionCount + 1));
+ $detail = "Revision #{$revision->revision_number} (ID: {$revision->id}) for page ID {$revision->page_id}";
+ $this->assertActivityExists(ActivityType::REVISION_DELETE, null, $detail);
+
// Try to delete the latest revision
$beforeRevisionCount = $page->revisions->count();
$resp = $this->asEditor()->delete($page->currentRevision->getUrl('/delete/'));