PluginProbe
Depicter — Popup & Slider Builder / 1.9.2
Depicter — Popup & Slider Builder v1.9.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.9.2, at app/src/Front/Preview.php

203 lines 5.0 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 $documentID = $documentModel->getDocumentID();
146
147 // Add custom styles
148 $localFontsCss = \Depicter::documentFonts()->getLocalFontsCss( $documentID );
149 $viewArgs['head'] .= Html::style( [ 'type' => 'text/css' ], $documentModel->getCss() . $localFontsCss ) . "\n";
150
151 if ( $document = \Depicter::documentRepository()->findById( $documentID ) ) {
152 $documentName = $document->getFieldValue('name');
153 $viewArgs['title'] = empty( $documentName ) ? $viewArgs['title'] : $documentName;
154 }
155
156 return $viewArgs;
157 }
158
159 /**
160 * Renders a page with message
161 *
162 * @param $content
163 *
164 * @return string
165 */
166 public function message( $content )
167 {
168 $viewArgs = $this->prepare();
169 $viewArgs['content'] = '<span class="depicter-no-content">' . $content . '</span>';
170
171 return $this->view( $viewArgs );
172 }
173
174 /**
175 * Renders page view
176 *
177 * @param $args
178 *
179 * @return string
180 */
181 protected function view( $args ){
182 return \Depicter::view('canvas.php')->with( 'view_args', $args )->toString();
183 }
184
185 /**
186 * Set a constant to specify document preview mode
187 */
188 protected function enablePreviewMode() {
189 if ( !defined('IS_DEPICTER_PREVIEW') ) {
190 define( 'IS_DEPICTER_PREVIEW', true );
191 }
192 }
193
194 /**
195 * Check if preview mode is active or not
196 *
197 * @return bool
198 */
199 public function isPreview() {
200 return defined( 'IS_DEPICTER_PREVIEW' ) && IS_DEPICTER_PREVIEW;
201 }
202 }
203