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

183 lines 4.3 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 try{
88 $documentModel = \Depicter::document()->getModel( $documentId, $where );
89 $viewArgs = $this->prepareToRender( $documentModel, $viewArgs );
90
91 if ( !empty( $documentArgs['viewParts'] ) ) {
92 return $viewArgs;
93 }
94 } catch ( \Exception $exception ) {
95 $viewArgs['content'] = '<span class="depicter-no-content">' . $exception->getMessage() . '</span>';
96 }
97
98 return $this->view( $viewArgs );
99 }
100
101 /**
102 * prepare document model to render
103 *
104 * @param Document $documentModel
105 * @param $viewArgs
106 *
107 * @return mixed
108 */
109 protected function prepareToRender( $documentModel, $viewArgs )
110 {
111 // Prepare and render document
112 $viewArgs['content'] = Html::div( [ 'class' => 'depicter-preview-canvas' ], $documentModel->prepare()
113 ->render() );
114
115 // Link to special styles
116 $stylesList = [];
117 if( $fontsLink = $documentModel->getFontsLink() ){
118 $stylesList["depicter-google-fonts"] = $fontsLink;
119 }
120 foreach( $stylesList as $styleId => $styleLink ){
121 $viewArgs['head'] .= Html::link( [ 'rel' => "stylesheet",
122 'id' => $styleId . '-css',
123 'href' => $styleLink,
124 'media' => 'all' ] ) . "\n";
125 }
126
127 // Add custom styles
128 $viewArgs['head'] .= Html::style( [ 'type' => 'text/css' ], $documentModel->getCss() ) . "\n";
129
130 $documentID = $documentModel->getDocumentID();
131 if ( $document = \Depicter::documentRepository()->findById($documentID) ) {
132 $documentName = $document->getFieldValue('name');
133 $viewArgs['title'] = empty( $documentName ) ? $viewArgs['title'] : $documentName;
134 }
135
136 return $viewArgs;
137 }
138
139 /**
140 * Renders a page with message
141 *
142 * @param $content
143 *
144 * @return string
145 */
146 public function message( $content )
147 {
148 $viewArgs = $this->prepare();
149 $viewArgs['content'] = '<span class="depicter-no-content">' . $content . '</span>';
150
151 return $this->view( $viewArgs );
152 }
153
154 /**
155 * Renders page view
156 *
157 * @param $args
158 *
159 * @return string
160 */
161 protected function view( $args ){
162 return \Depicter::view('canvas.php')->with( 'view_args', $args )->toString();
163 }
164
165 /**
166 * Set a constant to specify document preview mode
167 */
168 protected function enablePreviewMode() {
169 if ( !defined('IS_DEPICTER_PREVIEW') ) {
170 define( 'IS_DEPICTER_PREVIEW', true );
171 }
172 }
173
174 /**
175 * Check if preview mode is active or not
176 *
177 * @return bool
178 */
179 public function isPreview() {
180 return defined( 'IS_DEPICTER_PREVIEW' ) && IS_DEPICTER_PREVIEW;
181 }
182 }
183