PluginProbe
SurveyJS: Drag & Drop Form Builder / trunk
SurveyJS: Drag & Drop Form Builder vtrunk
trunk 2.5.2 2.5.3 2.5.4 2.5.5
surveyjs / initializer.php

initializer.php in SurveyJS: Drag & Drop Form Builder trunk, at initializer.php

298 lines 14.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) exit;
3
4 include( "views/settings.php" );
5
6 if ( is_admin() ) {
7 include( "views/mysurveys.php" );
8 include( "views/editor.php" );
9 include( "views/results.php" );
10 }
11
12 class SurveyJS_SurveyJS {
13 public static $prefix = "sjs";
14 public $plugin_version = "0.1.0";
15
16 function __construct() {
17 add_action('admin_menu', array( $this, 'wps_add_menu'));
18 add_filter('media_buttons', array($this, 'wps_media_button'));
19 add_shortcode('Survey', array($this, 'wps_process_shortcode'));
20
21
22 add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_scripts'));
23 add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
24
25 add_action('init', array($this, 'register_surveyjs_gutenberg_block'));
26 }
27
28 public function register_surveyjs_gutenberg_block() {
29 if ( ! function_exists( 'register_block_type' ) ) {
30 return;
31 }
32
33 $blockname = 'sjs/gutenberg-block';
34 $blockscriptname = 'surveyjs-block-js';
35
36 $client = new SurveyJS_Client();
37 $surveys = $client->getSurveys();
38
39 if ( is_admin() ) {
40 wp_enqueue_script(
41 $blockscriptname,
42 plugins_url( 'block/block.js', __FILE__),
43 array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
44 true // Enqueue the script in the footer.
45 );
46
47 wp_localize_script(
48 $blockscriptname,
49 'surveys',
50 $surveys
51 );
52 }
53
54 register_block_type(
55 $blockname,
56 array(
57 'attributes' => array(
58 'shortcode' => array(
59 'type' => 'string',
60 'default' => '',
61 ),
62 'surveyid' => array(
63 'type' => 'string',
64 'default' => 'none',
65 ),
66 ),
67 'editor_script' => $blockscriptname,
68 'render_callback' => array( self::class, 'render_callback_shortcode' ),
69 )
70 );
71 }
72
73 public static function render_callback_shortcode( $attributes ) {
74 return do_shortcode( sanitize_text_field( $attributes['shortcode'] ) );
75 }
76
77 public function enqueue_admin_scripts() {
78 if ( isset( $_GET["page"] ) &&
79 ($_GET["page"] == "surveyjs-settings" ||
80 $_GET['page'] == "surveyjs-main-menu" ||
81 $_GET['page'] == "surveyjs_editor" ||
82 $_GET['page'] == "surveyjs_results")
83 ) {
84 wp_enqueue_style('wps-adm-bootstrap-css', plugins_url('libs/bootstrap.min.css', __FILE__) );
85
86 wp_enqueue_style('wps-adm-index-css', plugins_url('/index.css', __FILE__) );
87
88 wp_enqueue_script('wps-adm--babel.min.js', plugins_url('libs/babel.min.js', __FILE__));
89
90 wp_enqueue_script('wps-adm--survey.core.min.js', plugins_url('libs/library/survey.core.min.js', __FILE__));
91 wp_enqueue_script('wps-adm--survey.i18n.min.js', plugins_url('libs/library/survey.i18n.min.js', __FILE__));
92 wp_enqueue_script('wps-adm--themes-index.min.js', plugins_url('libs/library/themes/index.min.js', __FILE__));
93 wp_enqueue_script('wps-adm--survey-react-ui.min.js', plugins_url('libs/library/survey-react-ui.min.js', __FILE__));
94
95 wp_enqueue_script('wps-adm--survey-creator-core.min.js', plugins_url('libs/creator/survey-creator-core.min.js', __FILE__));
96 wp_enqueue_script('wps-adm--survey-creator-core.i18n.min.js', plugins_url('libs/creator/survey-creator-core.i18n.min.js', __FILE__));
97 wp_enqueue_script('wps-adm--survey-creator-react.min.js', plugins_url('libs/creator/survey-creator-react.min.js', __FILE__));
98
99 wp_enqueue_style('wps-adm--defaultV2.min.css', plugins_url('libs/library/defaultV2.min.css', __FILE__));
100
101 wp_enqueue_style('wps-adm--survey-creator-core.min.css', plugins_url('libs/creator/survey-creator-core.min.css', __FILE__));
102
103
104 // wp_enqueue_script('wps-adm-knockout-js', plugins_url('libs/knockout.min.js', __FILE__));
105
106 // wp_enqueue_style('wps-adm-survey-css', plugins_url('libs/modern.css', __FILE__) );
107 // wp_enqueue_script('wps-adm-survey-ko-js', plugins_url('libs/survey.ko.min.js', __FILE__), array('wps-adm-knockout-js'));
108 // wp_enqueue_style('wps-adm-surveyjseditor-css', plugins_url('libs/survey-creator.css', __FILE__) );
109 // wp_enqueue_script('wps-adm-surveyjseditor-js', plugins_url('libs/survey-creator.min.js', __FILE__), array('wps-adm-survey-ko-js'));
110
111 wp_enqueue_style('wps-adm-datatables-css', plugins_url('libs/datatables/dataTables.min.css', __FILE__) );
112 wp_enqueue_script('wps-adm-sdatatables-js', plugins_url('libs/datatables/dataTables.min.js', __FILE__) );
113 wp_enqueue_script('wps-adm-datatables-js-1', plugins_url('libs/datatables/dataTables.buttons.min.js', __FILE__) );
114 wp_enqueue_style('wps-adm-datatables-css-1', plugins_url('libs/datatables/buttons.dataTables.min.css', __FILE__) );
115 wp_enqueue_script('wps-adm-sdatatables-js-2', plugins_url('libs/datatables/buttons.flash.min.js', __FILE__) );
116 wp_enqueue_script('wps-adm-sdatatables-js-3', plugins_url('libs/datatables/jszip.min.js', __FILE__) );
117 // wp_enqueue_script('wps-adm-sdatatables-js-4', plugins_url('libs/datatables/pdfmake.min.js', __FILE__) );
118 wp_enqueue_script('wps-adm-sdatatables-js-5', plugins_url('libs/datatables/vfs_fonts.js', __FILE__) );
119 wp_enqueue_script('wps-adm-sdatatables-js-6', plugins_url('libs/datatables/buttons.html5.min.js', __FILE__) );
120 wp_enqueue_script('wps-adm-sdatatables-js-7', plugins_url('libs/datatables/buttons.print.min.js', __FILE__) );
121
122 wp_enqueue_style('thickbox');
123 wp_enqueue_script('thickbox');
124 }
125
126 if ( isset( $_GET["page"] ) && $_GET['page'] == "surveyjs_results") {
127 wp_enqueue_script('wps-adm-jquery-js', plugins_url('libs/library/survey.jquery.min.js', __FILE__)); // for "Show in Survey btn"
128 }
129 }
130
131 public function enqueue_frontend_scripts() {
132 wp_enqueue_style('wps-survey-override-css', plugins_url('/survey.css', __FILE__) );
133 wp_enqueue_script('wps-front-jquery-js', plugins_url('libs/library/survey.jquery.min.js', __FILE__), array('jquery'));
134 wp_enqueue_script('wps-front--themes-index.min.js', plugins_url('libs/library/themes/index.min.js', __FILE__));
135 wp_enqueue_style('wps-front--defaultV2.min.css', plugins_url('libs/library/defaultV2.min.css', __FILE__));
136 }
137
138 function wps_add_menu() {
139 add_menu_page( 'My surveys', 'SurveyJS', 'manage_options', 'surveyjs-main-menu', array(
140 "SurveyJS_MySurveys", 'render'
141 ), plugins_url('images/logo_20�
142 20.png', __FILE__));
143 // add_submenu_page( 'surveyjs-main-menu', __( 'My Surveys', 'surveyjs-main-menu' ), __( 'My Surveys', 'surveyjs-main-menu' ), 'manage_options', 'sjs-my-surveys', array(
144 // __CLASS__, 'wps_mysurveys_page'
145 // ));
146 add_submenu_page( 'surveyjs-main-menu', esc_html__( 'Settings', 'surveyjs' ), esc_html__( 'Settings', 'surveyjs' ), 'manage_options', 'surveyjs-settings', array( 'SurveyJS_SettingsPage', 'surveyjs_render_settings' ) );
147 add_submenu_page('', '', '', 'manage_options', 'surveyjs_editor', array('SurveyJS_Editor', 'render'));
148 add_submenu_page('', '', '', 'manage_options', 'surveyjs_results', array('SurveyJS_Results', 'render'));
149 }
150
151 // function wps_mysurveys_page() {
152 // }
153
154 function wps_media_button() {
155 $url = add_query_arg(array('action' => 'SurveyJS_InsertSurvey'), admin_url('admin-ajax.php'));
156 $url = wp_nonce_url($url, 'surveyjs-insert-survey', '_wpnonce');
157 ?>
158 <a onclick="tb_click.call(this); return false;" href="<?php echo esc_url($url); ?>" class="button" title="<?php esc_attr_e('Insert Survey', 'surveyjs'); ?>">
159 <?php esc_html_e('Add Survey', 'surveyjs'); ?>
160 </a>
161 <?php
162 }
163
164 function wps_process_shortcode($attrs) {
165 ob_start();
166
167 $id = esc_attr($attrs["id"]);
168 $getSurveyJsonUri = add_query_arg(array('action' => 'SurveyJS_GetSurveyJson'), admin_url('admin-ajax.php'));
169 $saveResultUri = add_query_arg(array('action' => 'SurveyJS_SaveResult'), admin_url('admin-ajax.php'));
170 $uploadFileUri = add_query_arg(array('action' => 'SurveyJS_UploadFiles'), admin_url('admin-ajax.php'));
171 $deleteFileUri = add_query_arg(array('action' => 'SurveyJS_DeleteFile'), admin_url('admin-ajax.php'));
172 $getSurveyJsonNonce = wp_create_nonce('surveyjs-get-survey-json');
173 $saveResultNonce = wp_create_nonce('surveyjs-save-result');
174 $uploadFilesNonce = wp_create_nonce('surveyjs-upload-files');
175 $deleteFileNonce = wp_create_nonce('surveyjs-delete-file');
176 $deleteFileUriWithNonce = add_query_arg('_wpnonce', $deleteFileNonce, $deleteFileUri);
177 ?>
178 <div class="wp-sjs-plugin" id="surveyContainer-<?php echo esc_attr($id) ?>">
179 <div id="surveyElement-<?php echo esc_attr($id) ?>">Survey is loading...</div>
180 <div id="surveyResult-<?php echo esc_attr($id) ?>"></div>
181 </div>
182 <script>
183 jQuery.ajax({
184 url: "<?php echo esc_url($getSurveyJsonUri) ?>",
185 type: "POST",
186 data: { Id: <?php echo intval($id); ?>, _wpnonce: '<?php echo esc_js( $getSurveyJsonNonce ); ?>' },
187 success: function (data) {
188 var json = {}
189 let theme;
190 if (data.json) {
191 json = JSON.parse(data.json.replace(/\\\"/g, "\"").replace(/\\\\/g, "\\").replace(/\\'/g, "'"));
192 }
193 if (data.theme) {
194 theme = JSON.parse(data.theme.replace(/\\\"/g, "\"").replace(/\\\\/g, "\\").replace(/\\'/g, "'"));
195 } else {
196 theme = null
197 }
198 jQuery(document).ready(()=>{
199 initSurvey<?php echo intval($id); ?>(json, theme);
200 });
201 }
202 });
203
204 function initSurvey<?php echo intval($id); ?>(json, theme) {
205 const survey<?php echo intval($id); ?> = new Survey.Model(json);
206 if (!!theme) {
207 survey<?php echo intval($id); ?>.applyTheme(theme);
208 }
209 window.survey<?php echo intval($id); ?> = survey<?php echo intval($id); ?>;
210 survey<?php echo intval($id); ?>
211 .onComplete
212 .add(function (sender, options) {
213 options.showSaveInProgress();
214 jQuery.ajax({
215 url: "<?php echo esc_url($saveResultUri) ?>",
216 type: "POST",
217 data: { SurveyId: '<?php echo intval($id); ?>', Json : JSON.stringify(sender.data), _wpnonce: '<?php echo esc_js( $saveResultNonce ); ?>' },
218 success: function (data) {options.showSaveSuccess();},
219 error: function (xhr) {options.showSaveError(xhr.responseText);}
220 });
221 //document
222 // .querySelector("#surveyResult-<?php echo intval($id); ?>")
223 // .innerHTML = "result: " + JSON.stringify(sender.data);
224 });
225
226 survey<?php echo intval($id); ?>.onUploadFiles.add((_, options) => {
227 const formData = new FormData();
228 options.files.forEach((file) => {
229 formData.append(file.name, file);
230 });
231 formData.append("_wpnonce", "<?php echo esc_js( $uploadFilesNonce ); ?>");
232
233 fetch("<?php echo esc_url($uploadFileUri) ?>", {
234 method: "POST",
235 body: formData
236 })
237 .then((response) => response.json())
238 .then((data) => {
239 options.callback(
240 options.files.map((file) => {
241 return {
242 file: file,
243 content: data[file.name]
244 };
245 })
246 );
247 })
248 .catch((error) => {
249 console.error("Error: ", error);
250 options.callback([], [ 'An error occurred during file upload.' ]);
251 });
252 });
253
254 function deleteFile(fileURL, options) {
255 try {
256 const deleteFileBaseUrl = "<?php echo esc_url($deleteFileUriWithNonce); ?>";
257 const apiUrl = `${deleteFileBaseUrl}&name=${encodeURIComponent(fileURL)}`;
258 fetch(apiUrl);
259 } catch (error) {
260 options.callback("error");
261 }
262 }
263
264 survey<?php echo intval($id); ?>.onClearFiles.add((_, options) => {
265 if (!options.value || options.value.length === 0) {
266 options.callback("success");
267 return;
268 }
269
270 if (!options.fileName && !!options.value) {
271 for (const item of options.value) {
272 deleteFile(item.content, options);
273 }
274 } else {
275 const fileToRemove = options.value.find(
276 (item) => item.name === options.fileName
277 );
278 if (fileToRemove) {
279 deleteFile(fileToRemove.content, options);
280 } else {
281 console.error(`File with name ${options.fileName} is not found`);
282 }
283 }
284 options.callback("success");
285 });
286
287 jQuery("#surveyElement-<?php echo esc_attr($id) ?>").Survey({model: survey<?php echo intval($id); ?>/*, css: customCss*/});
288 }
289 </script>
290 <?php
291
292 return ob_get_clean();
293 }
294
295 }
296
297 ?>
298