Completed
Pull Request — master (#86)
by Robbie
02:25
created
src/Extensions/ShareDraftContentRequirementsExtension.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -7,9 +7,9 @@
 block discarded – undo
7 7
 
8 8
 class ShareDraftContentRequirementsExtension extends DataExtension
9 9
 {
10
-    public function init()
11
-    {
12
-        Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/bundle-cms.css');
13
-        Requirements::javascript('silverstripe/sharedraftcontent: client/dist/js/bundle.js');
14
-    }
10
+	public function init()
11
+	{
12
+		Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/bundle-cms.css');
13
+		Requirements::javascript('silverstripe/sharedraftcontent: client/dist/js/bundle.js');
14
+	}
15 15
 }
Please login to merge, or discard this patch.
src/Controllers/ShareDraftController.php 1 patch
Indentation   +144 added lines, -144 removed lines patch added patch discarded remove patch
@@ -20,148 +20,148 @@
 block discarded – undo
20 20
 
21 21
 class ShareDraftController extends Controller
22 22
 {
23
-    /**
24
-     * Controller for rendering draft pages.
25
-     *
26
-     * @config
27
-     *
28
-     * @var string
29
-     */
30
-    private static $controller = PageController::class;
31
-
32
-    /**
33
-     * @var array
34
-     */
35
-    private static $allowed_actions = array(
36
-        'preview'
37
-    );
38
-
39
-    /**
40
-     * @var array
41
-     */
42
-    private static $url_handlers = array(
43
-        '$Key/$Token' => 'preview'
44
-    );
45
-
46
-    /**
47
-     * @param HTTPRequest $request
48
-     *
49
-     * @return string|DBHTMLText
50
-     */
51
-    public function preview(HTTPRequest $request)
52
-    {
53
-        $key = $request->param('Key');
54
-        $token = $request->param('Token');
55
-        try {
56
-            $session = $this->getRequest()->getSession();
57
-        } catch (BadMethodCallException $e) {
58
-            // Create a new session
59
-            $session = $this->getRequest()
60
-                ->setSession(Injector::inst()->create(Session::class, []))
61
-                ->getSession();
62
-        }
63
-        /** @var ShareToken $shareToken */
64
-        $shareToken = ShareToken::get()->filter('Token', $token)->first();
65
-
66
-        if (!$shareToken) {
67
-            return $this->errorPage();
68
-        }
69
-
70
-        /** @var SiteTree|ShareDraftContentSiteTreeExtension $page */
71
-        $page = Versioned::get_by_stage(SiteTree::class, Versioned::DRAFT)
72
-            ->byID($shareToken->PageID);
73
-
74
-        $latest = Versioned::get_latest_version(SiteTree::class, $shareToken->PageID);
75
-
76
-        $controller = $this->getControllerFor($page);
77
-
78
-        if (!$shareToken->isExpired() && $page->generateKey($shareToken->Token) === $key) {
79
-            Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/bundle-frontend.css');
80
-
81
-            // Temporarily un-secure the draft site and switch to draft
82
-            $oldSecured = $this->getIsDraftSecured($session);
83
-            $oldMode = Versioned::get_reading_mode();
84
-
85
-            // Process page inside an unsecured draft container
86
-            try {
87
-                $this->setIsDraftSecured($session, false);
88
-                Versioned::set_stage('Stage');
89
-
90
-                // Hack to get around ContentController::init() redirecting on home page
91
-                $_FILES = array(array());
92
-
93
-                // Create mock request; Simplify request to single top level request
94
-                $pageRequest = new HTTPRequest('GET', $page->URLSegment);
95
-                $pageRequest->match('$URLSegment//$Action/$ID/$OtherID', true);
96
-                $pageRequest->setSession($session);
97
-                $rendered = $controller->handleRequest($pageRequest);
98
-
99
-                // Render draft heading
100
-                $data = new ArrayData(array(
101
-                    'Page' => $page,
102
-                    'Latest' => $latest,
103
-                ));
104
-                $include = (string) $data->renderWith('Includes/TopBar');
105
-            } finally {
106
-                $this->setIsDraftSecured($session, $oldSecured);
107
-                Versioned::set_reading_mode($oldMode);
108
-            }
109
-
110
-            return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
111
-        } else {
112
-            return $this->errorPage();
113
-        }
114
-    }
115
-
116
-    /**
117
-     * @return DBHTMLText
118
-     */
119
-    protected function errorPage()
120
-    {
121
-        Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/bundle-frontend.css');
122
-        return $this->renderWith('ShareDraftContentError');
123
-    }
124
-
125
-    /**
126
-     * @param SiteTree $page
127
-     * @return ContentController
128
-     */
129
-    protected function getControllerFor($page)
130
-    {
131
-        return ModelAsController::controller_for($page);
132
-    }
133
-
134
-    /**
135
-     * Check if the draft site is secured
136
-     *
137
-     * @param Session $session
138
-     * @return bool True if the draft site is secured
139
-     */
140
-    protected function getIsDraftSecured(Session $session)
141
-    {
142
-        // Versioned >=1.2
143
-        if (method_exists(Versioned::class, 'get_draft_site_secured')) {
144
-            return Versioned::get_draft_site_secured();
145
-        }
146
-
147
-        // Fall back to session
148
-        return !$session->get('unsecuredDraftSite');
149
-    }
150
-
151
-    /**
152
-     * Set draft site security
153
-     *
154
-     * @param Session $session
155
-     * @param bool $secured True if draft site should be secured
156
-     */
157
-    protected function setIsDraftSecured(Session $session, $secured)
158
-    {
159
-        // Versioned >=1.2
160
-        if (method_exists(Versioned::class, 'set_draft_site_secured')) {
161
-            Versioned::set_draft_site_secured($secured);
162
-        }
163
-
164
-        // Set session variable anyway
165
-        $session->set('unsecuredDraftSite', !$secured);
166
-    }
23
+	/**
24
+	 * Controller for rendering draft pages.
25
+	 *
26
+	 * @config
27
+	 *
28
+	 * @var string
29
+	 */
30
+	private static $controller = PageController::class;
31
+
32
+	/**
33
+	 * @var array
34
+	 */
35
+	private static $allowed_actions = array(
36
+		'preview'
37
+	);
38
+
39
+	/**
40
+	 * @var array
41
+	 */
42
+	private static $url_handlers = array(
43
+		'$Key/$Token' => 'preview'
44
+	);
45
+
46
+	/**
47
+	 * @param HTTPRequest $request
48
+	 *
49
+	 * @return string|DBHTMLText
50
+	 */
51
+	public function preview(HTTPRequest $request)
52
+	{
53
+		$key = $request->param('Key');
54
+		$token = $request->param('Token');
55
+		try {
56
+			$session = $this->getRequest()->getSession();
57
+		} catch (BadMethodCallException $e) {
58
+			// Create a new session
59
+			$session = $this->getRequest()
60
+				->setSession(Injector::inst()->create(Session::class, []))
61
+				->getSession();
62
+		}
63
+		/** @var ShareToken $shareToken */
64
+		$shareToken = ShareToken::get()->filter('Token', $token)->first();
65
+
66
+		if (!$shareToken) {
67
+			return $this->errorPage();
68
+		}
69
+
70
+		/** @var SiteTree|ShareDraftContentSiteTreeExtension $page */
71
+		$page = Versioned::get_by_stage(SiteTree::class, Versioned::DRAFT)
72
+			->byID($shareToken->PageID);
73
+
74
+		$latest = Versioned::get_latest_version(SiteTree::class, $shareToken->PageID);
75
+
76
+		$controller = $this->getControllerFor($page);
77
+
78
+		if (!$shareToken->isExpired() && $page->generateKey($shareToken->Token) === $key) {
79
+			Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/bundle-frontend.css');
80
+
81
+			// Temporarily un-secure the draft site and switch to draft
82
+			$oldSecured = $this->getIsDraftSecured($session);
83
+			$oldMode = Versioned::get_reading_mode();
84
+
85
+			// Process page inside an unsecured draft container
86
+			try {
87
+				$this->setIsDraftSecured($session, false);
88
+				Versioned::set_stage('Stage');
89
+
90
+				// Hack to get around ContentController::init() redirecting on home page
91
+				$_FILES = array(array());
92
+
93
+				// Create mock request; Simplify request to single top level request
94
+				$pageRequest = new HTTPRequest('GET', $page->URLSegment);
95
+				$pageRequest->match('$URLSegment//$Action/$ID/$OtherID', true);
96
+				$pageRequest->setSession($session);
97
+				$rendered = $controller->handleRequest($pageRequest);
98
+
99
+				// Render draft heading
100
+				$data = new ArrayData(array(
101
+					'Page' => $page,
102
+					'Latest' => $latest,
103
+				));
104
+				$include = (string) $data->renderWith('Includes/TopBar');
105
+			} finally {
106
+				$this->setIsDraftSecured($session, $oldSecured);
107
+				Versioned::set_reading_mode($oldMode);
108
+			}
109
+
110
+			return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
111
+		} else {
112
+			return $this->errorPage();
113
+		}
114
+	}
115
+
116
+	/**
117
+	 * @return DBHTMLText
118
+	 */
119
+	protected function errorPage()
120
+	{
121
+		Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/bundle-frontend.css');
122
+		return $this->renderWith('ShareDraftContentError');
123
+	}
124
+
125
+	/**
126
+	 * @param SiteTree $page
127
+	 * @return ContentController
128
+	 */
129
+	protected function getControllerFor($page)
130
+	{
131
+		return ModelAsController::controller_for($page);
132
+	}
133
+
134
+	/**
135
+	 * Check if the draft site is secured
136
+	 *
137
+	 * @param Session $session
138
+	 * @return bool True if the draft site is secured
139
+	 */
140
+	protected function getIsDraftSecured(Session $session)
141
+	{
142
+		// Versioned >=1.2
143
+		if (method_exists(Versioned::class, 'get_draft_site_secured')) {
144
+			return Versioned::get_draft_site_secured();
145
+		}
146
+
147
+		// Fall back to session
148
+		return !$session->get('unsecuredDraftSite');
149
+	}
150
+
151
+	/**
152
+	 * Set draft site security
153
+	 *
154
+	 * @param Session $session
155
+	 * @param bool $secured True if draft site should be secured
156
+	 */
157
+	protected function setIsDraftSecured(Session $session, $secured)
158
+	{
159
+		// Versioned >=1.2
160
+		if (method_exists(Versioned::class, 'set_draft_site_secured')) {
161
+			Versioned::set_draft_site_secured($secured);
162
+		}
163
+
164
+		// Set session variable anyway
165
+		$session->set('unsecuredDraftSite', !$secured);
166
+	}
167 167
 }
Please login to merge, or discard this patch.