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

221 lines 5.6 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->setShowAdminNotice( false );
107 $viewArgs = $this->prepareToRender( $documentModel, $viewArgs );
108
109 if ( !empty( $documentArgs['viewParts'] ) ) {
110 return $viewArgs;
111 }
112 if ( $documentModel->isDisplayExtension() ) {
113 $viewArgs['body_classes'][] = 'depicter-display-canvas';
114 }
115 } catch ( \Exception $exception ) {
116 $viewArgs['content'] = '<span class="depicter-no-content">' . $exception->getMessage() . '</span>';
117 }
118
119 return $this->view( $viewArgs );
120 }
121
122 /**
123 * prepare document model to render
124 *
125 * @param Document $documentModel
126 * @param $viewArgs
127 *
128 * @return mixed
129 */
130 protected function prepareToRender( $documentModel, $viewArgs )
131 {
132 // Prepare and render document
133 $viewArgs['content'] = Html::div( [ 'class' => 'depicter-preview-canvas' ], $documentModel->prepare()
134 ->render() );
135
136 // Link to special styles
137 $stylesList = [];
138 if( $fontsLink = $documentModel->getFontsLink() ){
139 $stylesList["depicter-google-fonts"] = $fontsLink;
140 }
141 foreach( $stylesList as $styleId => $styleLink ){
142 $viewArgs['head'] .= Html::link( [ 'rel' => "stylesheet",
143 'id' => $styleId . '-css',
144 'href' => $styleLink,
145 'media' => 'all' ] ) . "\n";
146 }
147
148 $documentID = $documentModel->getDocumentID();
149
150 // Add custom styles
151 $localFontsCss = \Depicter::documentFonts()->getLocalFontsCss( $documentID );
152 $viewArgs['head'] .= $documentModel->getBeforeInitCssAndTag() . "\n";
153 $viewArgs['head'] .= Html::style( [ 'type' => 'text/css' ], $documentModel->getCss() . $localFontsCss ) . "\n";
154
155 if ( $document = \Depicter::documentRepository()->findById( $documentID ) ) {
156 $documentName = $document->getFieldValue('name');
157 $viewArgs['title'] = empty( $documentName ) ? $viewArgs['title'] : $documentName;
158 }
159
160 $viewArgs['hasShortcode'] = $documentModel->hasShortcode();
161
162 return $viewArgs;
163 }
164
165 /**
166 * Renders a page with message
167 *
168 * @param $content
169 *
170 * @return string
171 */
172 public function message( $content )
173 {
174 $viewArgs = $this->prepare();
175 $viewArgs['content'] = '<span class="depicter-no-content">' . $content . '</span>';
176
177 return $this->view( $viewArgs );
178 }
179
180 /**
181 * Renders page view
182 *
183 * @param $args
184 *
185 * @return string
186 */
187 protected function view( $args ){
188 // JetPack compatibility issue
189 if ( class_exists( 'Filter_Embedded_HTML_Objects' ) ) {
190 remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
191 }
192
193 $view = \Depicter::view('canvas.php')->with( 'view_args', $args )->toString();
194
195 // JetPack compatibility issue
196 if ( class_exists( 'Filter_Embedded_HTML_Objects' ) ) {
197 add_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
198 }
199
200 return $view;
201 }
202
203 /**
204 * Set a constant to specify document preview mode
205 */
206 protected function enablePreviewMode() {
207 if ( !defined('IS_DEPICTER_PREVIEW') ) {
208 define( 'IS_DEPICTER_PREVIEW', true );
209 }
210 }
211
212 /**
213 * Check if preview mode is active or not
214 *
215 * @return bool
216 */
217 public function isPreview() {
218 return defined( 'IS_DEPICTER_PREVIEW' ) && IS_DEPICTER_PREVIEW;
219 }
220 }
221