PluginProbe
Depicter — Popup & Slider Builder / 1.6.2
Depicter — Popup & Slider Builder v1.6.2
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / app / src / Front / Preview.php

Preview.php in Depicter — Popup & Slider Builder 1.6.2, at app/src/Front/Preview.php

201 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Depicter\Front;
3
4
5 use Averta\Core\Utility\Arr;
6 use Depicter\Document\Models\Document;
7 use Depicter\Html\Html;
8
9 class Preview
10 {
11
12 /**
13 * Preview constructor.
14 */
15 public function __construct()
16 {
17
18 }
19
20 /**
21 * Prepares viewArgs for document preview
22 *
23 * @return array
24 */
25 public function prepare()
26 {
27 // prevent enabling preview mode if render mode param was passed
28 if( empty( $_REQUEST['renderMode'] ) ){
29 $this->enablePreviewMode();
30 }
31
32 $viewArgs = [
33 'head' => '',
34 'title' => __( 'Depicter Preview', 'depicter' ),
35 'footer' => ''
36 ];
37
38 $styleLinks = \Depicter::front()->assets()->getStyles(['common', 'situational']);
39
40 foreach ( $styleLinks as $styleId => $styleLink ) {
41 $viewArgs['head'] .= Html::link([
42 'rel' => "stylesheet",
43 'id' => $styleId . '-css',
44 'href' => $styleLink,
45 'media' => 'all'
46 ]) . "\n";
47 }
48
49 $scriptLinks = \Depicter::front()->assets()->getScripts('player');
50
51 foreach ( $scriptLinks as $scriptId => $scriptLink ){
52 $viewArgs['footer'] .= Html::script([
53 'id' => $scriptId . '-js',
54 'src' => $scriptLink
55 ]) . "\n";
56 }
57
58 return $viewArgs;
59 }
60
61 /**
62 * Generates a complete HTML page to preview document
63 *
64 * @param $documentId
65 * @param array $documentArgs
66 *
67 * @return string|array
68 */
69 public function document( $documentId, $documentArgs = [] )
70 {
71 $defaults = [
72 'status' => 'draft',
73 'start' => null
74 ];
75 $documentArgs = Arr::merge( $documentArgs, $defaults );
76
77 $viewArgs = $this->prepare();
78 $where = [ 'status' => trim( $documentArgs['status'] ) ];
79
80 // support for multiple statuses (status=publish|draft)
81 if( strpos( $where['status'], '|' ) !== false ){
82 $where['status'] = explode('|', $where['status'] );
83 }
84
85 $where['start'] = $documentArgs['start'];
86
87 if ( !empty( $documentArgs['gutenberg'] ) ) {
88 $scriptLinks = \Depicter::front()->assets()->getScripts('iframe-resizer-content');
89
90 foreach ( $scriptLinks as $scriptId => $scriptLink ){
91 $viewArgs['footer'] .= Html::script([
92 'id' => $scriptId . '-js',
93 'src' => $scriptLink
94 ]) . "\n";
95 }
96
97 if ( !$documentId ) {
98 $viewArgs['content'] = '<span class="depicter-no-content">' . esc_html__( 'Please select a slider from the list.', 'depicter' ) . '</span>';
99 return $this->view( $viewArgs );
100 }
101
102 }
103
104 try{
105 $documentModel = \Depicter::document()->getModel( $documentId, $where );
106 $documentModel->setUnpublishedNotice( false );
107 $viewArgs = $this->prepareToRender( $documentModel, $viewArgs );
108
109 if ( !empty( $documentArgs['viewParts'] ) ) {
110 return $viewArgs;
111 }
112 } catch ( \Exception $exception ) {
113 $viewArgs['content'] = '<span class="depicter-no-content">' . $exception->getMessage() . '</span>';
114 }
115
116 return $this->view( $viewArgs );
117 }
118
119 /**
120 * prepare document model to render
121 *
122 * @param Document $documentModel
123 * @param $viewArgs
124 *
125 * @return mixed
126 */
127 protected function prepareToRender( $documentModel, $viewArgs )
128 {
129 // Prepare and render document
130 $viewArgs['content'] = Html::div( [ 'class' => 'depicter-preview-canvas' ], $documentModel->prepare()
131 ->render() );
132
133 // Link to special styles
134 $stylesList = [];
135 if( $fontsLink = $documentModel->getFontsLink() ){
136 $stylesList["depicter-google-fonts"] = $fontsLink;
137 }
138 foreach( $stylesList as $styleId => $styleLink ){
139 $viewArgs['head'] .= Html::link( [ 'rel' => "stylesheet",
140 'id' => $styleId . '-css',
141 'href' => $styleLink,
142 'media' => 'all' ] ) . "\n";
143 }
144
145 // Add custom styles
146 $viewArgs['head'] .= Html::style( [ 'type' => 'text/css' ], $documentModel->getCss() ) . "\n";
147
148 $documentID = $documentModel->getDocumentID();
149 if ( $document = \Depicter::documentRepository()->findById($documentID) ) {
150 $documentName = $document->getFieldValue('name');
151 $viewArgs['title'] = empty( $documentName ) ? $viewArgs['title'] : $documentName;
152 }
153
154 return $viewArgs;
155 }
156
157 /**
158 * Renders a page with message
159 *
160 * @param $content
161 *
162 * @return string
163 */
164 public function message( $content )
165 {
166 $viewArgs = $this->prepare();
167 $viewArgs['content'] = '<span class="depicter-no-content">' . $content . '</span>';
168
169 return $this->view( $viewArgs );
170 }
171
172 /**
173 * Renders page view
174 *
175 * @param $args
176 *
177 * @return string
178 */
179 protected function view( $args ){
180 return \Depicter::view('canvas.php')->with( 'view_args', $args )->toString();
181 }
182
183 /**
184 * Set a constant to specify document preview mode
185 */
186 protected function enablePreviewMode() {
187 if ( !defined('IS_DEPICTER_PREVIEW') ) {
188 define( 'IS_DEPICTER_PREVIEW', true );
189 }
190 }
191
192 /**
193 * Check if preview mode is active or not
194 *
195 * @return bool
196 */
197 public function isPreview() {
198 return defined( 'IS_DEPICTER_PREVIEW' ) && IS_DEPICTER_PREVIEW;
199 }
200 }
201