silverstripe-multiform/src/Models/MultiFormSession.php

92 lines
2.3 KiB
PHP
Raw Normal View History

<?php
namespace SilverStripe\MultiForm\Models;
use SilverStripe\ORM\DataObject;
2017-09-08 03:57:33 +02:00
use SilverStripe\Security\Member;
use SilverStripe\Security\Security;
/**
2015-11-02 01:38:50 +01:00
* Serializes one or more {@link MultiFormStep}s into
* a database object.
2015-11-02 01:38:50 +01:00
*
* MultiFormSession also stores the current step, so that
* the {@link MultiForm} and {@link MultiFormStep} classes
* know what the current step is.
2015-11-02 01:38:50 +01:00
*
*/
class MultiFormSession extends DataObject
{
private static $db = [
'Hash' => 'Varchar(40)', // cryptographic hash identification to this session
'IsComplete' => 'Boolean' // flag to determine if this session is marked completed
];
2015-11-02 01:38:50 +01:00
private static $has_one = [
2017-09-08 03:57:33 +02:00
'Submitter' => Member::class,
'CurrentStep' => MultiFormStep::class
];
private static $has_many = [
2017-09-08 03:57:33 +02:00
'FormSteps' => MultiFormStep::class
];
private static $table_name = 'MultiFormSession';
2015-11-02 01:38:50 +01:00
/**
* Mark this session as completed.
*
* This sets the flag "IsComplete" to true,
* and writes the session back.
*/
public function markCompleted()
{
$this->IsComplete = 1;
$this->write();
}
2015-11-02 01:38:50 +01:00
/**
* These actions are performed when write() is called on this object.
*/
public function onBeforeWrite()
{
// save submitter if a Member is logged in
$currentMember = Security::getCurrentUser();
2017-09-08 03:57:33 +02:00
if (!$this->SubmitterID && $currentMember) {
$this->SubmitterID = $currentMember->ID;
}
2015-11-02 01:38:50 +01:00
parent::onBeforeWrite();
}
/**
* These actions are performed when delete() is called on this object.
*/
public function onBeforeDelete()
{
// delete dependent form steps and relation
$steps = $this->FormSteps();
if ($steps) {
foreach ($steps as $step) {
if ($step && $step->exists()) {
$steps->remove($step);
$step->delete();
$step->destroy();
}
}
}
parent::onBeforeDelete();
}
2017-09-11 05:25:16 +02:00
public function onAfterWrite()
{
parent::onAfterWrite();
// Create encrypted identification to the session instance if it doesn't exist
if (!$this->Hash) {
$this->Hash = sha1($this->ID . '-' . microtime());
$this->write();
}
}
}