PluginProbe
Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! / 2.2.2
Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! v2.2.2
3.7.5 3.7.4 3.7.3 3.7.2 1-final 3.7.1 3.7.0 3.6.8 3.6.7 3.6.6 3.6.5 3.6.4 3.6.3 3.6.2 3.6.1 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.10 All 111 releases
← All changes | includes/Core/Platform/Gutenberg.php +90 -220 3.7.12.2.2 View file →
@@ -1,13 +1,11 @@
1 1 <?php
2 2 namespace Templately\Core\Platform;
3 3
4 4 use Templately\API\Import;
5 -use Templately\Core\Importer\Utils\Utils;
6 5 use Templately\Core\Platform;
7 6 use Templately\Core\Module;
8 7 use Templately\Utils\Helper;
9 -use Templately\Utils\Options;
10 8
11 9 use WP_Error;
12 10 use function get_permalink;
13 11 use function get_edit_post_link;
@@ -13,27 +11,26 @@
13 11 use function get_edit_post_link;
14 12 use function wp_insert_post;
15 13 use function wp_slash;
16 14 use function wp_unslash;
17 -use function wp_update_post;
18 15 use function json_decode;
19 16
20 17 class Gutenberg extends Platform {
21 - /**
22 - * Platform ID
23 - * @var string
24 - */
18 + /**
19 + * Platform ID
20 + * @var string
21 + */
25 22 private $id = 'gutenberg';
26 23
27 - /**
28 - * Is gutenberg is active or not
29 - * @var boolean
30 - */
31 - public $is_gutenberg_active = false;
24 + /**
25 + * Is gutenberg is active or not
26 + * @var boolean
27 + */
28 + public $is_gutenberg_active = false;
32 29
33 - /**
34 - * Initializing the platform and add it to module.
35 - */
30 + /**
31 + * Initializing the platform and add it to module.
32 + */
36 33 public function __construct(){
37 34 Module::get_instance()->add( (object) [
38 35 'id' => $this->id,
39 36 'object' => $this
@@ -38,103 +35,95 @@
38 35 'id' => $this->id,
39 36 'object' => $this
40 37 ]);
41 38
42 - $this->hooks();
39 + $this->hooks();
43 40 }
44 41
45 - /**
46 - * Initializing Hooks
47 - * @return void
48 - */
49 - public function hooks(){
50 - add_action( 'enqueue_block_editor_assets', [ $this, 'scripts' ] );
51 - add_action( 'admin_footer', [ $this, 'print_admin_js_template' ] );
52 - add_action( 'wp_ajax_update_gutenberg_hide_buttons', [ $this, 'update_gutenberg_hide_buttons' ] ); // Register AJAX action
53 - }
42 + /**
43 + * Initializing Hooks
44 + * @return void
45 + */
46 + public function hooks(){
47 + add_action( 'enqueue_block_editor_assets', [ $this, 'scripts' ] );
48 + add_action( 'admin_footer', [ $this, 'print_admin_js_template' ] );
49 + }
54 50
55 - /**
56 - * Assets Enqueueing
57 - * @return void
58 - */
59 - public function scripts(){
60 - $this->is_gutenberg_active = true;
61 - templately()->assets->enqueue( 'templately-gutenberg', 'css/gutenberg.css' );
62 - templately()->assets->enqueue( 'templately-tailwind', 'css/tailwind.css', ['templately-gutenberg'] );
51 + /**
52 + * Assets Enqueueing
53 + * @return void
54 + */
55 + public function scripts(){
56 + $this->is_gutenberg_active = true;
57 + templately()->assets->enqueue( 'templately-gutenberg', 'css/gutenberg.css' );
63 58 templately()->assets->enqueue( 'templately-gutenberg', 'js/gutenberg.js' );
64 - templately()->admin->scripts( 'gutenberg' );
59 + templately()->admin->scripts( 'gutenberg' );
65 60 }
66 61
67 - /**
68 - * Templately Button and Wrapper for Gutenberg
69 - *
70 - * @since 2.0.0
71 - *
72 - * @return void
73 - */
74 - public function print_admin_js_template() {
75 - if ( ! $this->is_gutenberg_active ) {
76 - return;
77 - }
78 - $post_type = apply_filters( 'templately_cloud_push_post_type', get_post_type());
62 + /**
63 + * Templately Button and Wrapper for Gutenberg
64 + *
65 + * @since 2.0.0
66 + *
67 + * @return void
68 + */
69 + public function print_admin_js_template() {
70 + if ( ! $this->is_gutenberg_active ) {
71 + return;
72 + }
79 73
80 - ?>
81 - <div id="templately-gutenberg"></div>
82 - <script id="templately-gutenberg-button-switch-mode" type="text/html">
83 - <div id="templately-gutenberg-buttons">
84 - <button id="templately-gutenberg-button" type="button" class="button button-primary button-large gutenberg-add-templately-button">
85 - <i class="templately-icon" aria-hidden="true"></i>
86 - <?php echo esc_html__( 'Templately', 'templately' ); ?>
87 - </button>
88 - <button id="templately-cloud-push" type="button" class="button button-primary button-large">
89 - <i class="templately-cloud-icon" aria-hidden="true"></i>
90 - <?php echo sprintf( __( 'Save %s in Templately', 'templately' ), $post_type ); ?>
91 - </button>
92 - </div>
93 - </script>
94 - <?php
95 - }
74 + ?>
75 + <div id="templately-gutenberg"></div>
76 + <script id="templately-gutenberg-button-switch-mode" type="text/html">
77 + <div id="templately-gutenberg-buttons">
78 + <button id="templately-gutenberg-button" type="button" class="button button-primary button-large gutenberg-add-templately-button">
79 + <i class="templately-icon" aria-hidden="true"></i>
80 + <?php echo esc_html__( 'Templately', 'templately' ); ?>
81 + </button>
82 + <button id="templately-cloud-push" type="button" class="button button-primary button-large">
83 + <i class="templately-cloud-icon" aria-hidden="true"></i>
84 + <?php echo sprintf( __( 'Save %s in Templately', 'templately' ), get_post_type() ); ?>
85 + </button>
86 + </div>
87 + </script>
88 + <?php
89 + }
96 90
97 - /**
98 - * Determine Active UI Theme
99 - * @return string
100 - */
101 - public function ui_theme(){
102 - return 'light';
103 - }
91 + /**
92 + * Determine Active UI Theme
93 + * @return string
94 + */
95 + public function ui_theme(){
96 + return 'light';
97 + }
104 98
105 - /**
106 - * Creating a gutenberg page
107 - *
108 - * @param integer $id
109 - * @param string $title
110 - * @param Import $importer
111 - *
112 - * @since 2.0.0
113 - *
114 - * @return array|WP_Error array on success, WP_Error on failure.
115 - */
116 - public function create_page( $id, $title, $importer = null, $settings = [] ){
117 - $post_data = $inserted_ID = $importer->get_content( $id, 'gutenberg' );
99 + /**
100 + * Creating a gutenberg page
101 + *
102 + * @param integer $id
103 + * @param string $title
104 + * @param Import $importer
105 + *
106 + * @since 2.0.0
107 + *
108 + * @return array|WP_Error array on success, WP_Error on failure.
109 + */
110 + public function create_page( $id, $title, $importer = null ){
111 + $inserted_ID = $importer->get_content( $id, 'gutenberg' );
118 112
119 113 if( is_wp_error( $inserted_ID ) ) {
120 114 return $inserted_ID;
121 115 }
122 116
123 - if ( ! empty( $settings ) && ! empty( $inserted_ID['content'] ) && is_string( $inserted_ID['content'] ) ) {
124 - $inserted_ID['content'] = \Templately\Core\Importer\Utils\GutenbergSettingsMerger::merge( $inserted_ID['content'], $settings );
125 - $post_data['content'] = $inserted_ID['content'];
126 - }
117 + if ( ! empty( $inserted_ID['content'] ) ) {
118 + $inserted_ID = wp_insert_post( array (
119 + 'post_status' => 'draft',
120 + 'post_type' => 'page',
121 + 'post_title' => $title,
122 + 'post_content' => wp_slash($inserted_ID['content']),
123 + ) );
124 + }
127 125
128 - if ( ! empty( $inserted_ID['content'] ) ) {
129 - $inserted_ID = wp_insert_post( array (
130 - 'post_status' => 'draft',
131 - 'post_type' => 'page',
132 - 'post_title' => $title,
133 - 'post_content' => wp_slash($inserted_ID['content']),
134 - ) );
135 - }
136 -
137 126 if ( is_wp_error( $inserted_ID ) ) {
138 127 return Helper::error(
139 128 'import_failed',
140 129 $inserted_ID->get_error_message(),
@@ -142,19 +131,8 @@
142 131 $inserted_ID->get_error_code()
143 132 );
144 133 }
145 134
146 - if($inserted_ID){
147 - $post_data['content'] = Utils::import_and_replace_attachments($post_data['content'], $inserted_ID);
148 -
149 - // Update the post content with the processed images
150 - $updated_post = array(
151 - 'ID' => $inserted_ID,
152 - 'post_content' => wp_slash($post_data['content']),
153 - );
154 - wp_update_post($updated_post);
155 - }
156 -
157 135 return [
158 136 'post_id' => $inserted_ID,
159 137 'edit_link' => get_edit_post_link( $inserted_ID, 'internal' ),
160 138 'visit' => get_permalink( $inserted_ID )
@@ -160,122 +138,14 @@
160 138 'visit' => get_permalink( $inserted_ID )
161 139 ];
162 140 }
163 141
164 - /**
165 - * Inserts a template into the Gutenberg editor.
166 - *
167 - * @param mixed $data
168 - * @param int $postId
169 - * @param array $settings
170 - * @return array
171 - */
172 - public function insert($data, $postId = 0, $settings = []) {
173 - if ( ! empty( $settings ) && is_array( $settings ) && ! empty( $data['content'] ) && is_string( $data['content'] ) ) {
174 - $data['content'] = \Templately\Core\Importer\Utils\GutenbergSettingsMerger::merge( $data['content'], $settings );
175 - }
176 -
177 - $data['content'] = Utils::import_and_replace_attachments(
178 - $data['content'],
179 - $postId,
180 - [
181 - 'attachment_timeout' => 8,
182 - 'attachment_retries' => 0,
183 - 'attachment_deadline' => microtime( true ) + 20,
184 - ]
185 - );
186 - return $data;
187 - }
188 -
189 142 /**
190 - * Import template to Templately Library
143 + * Inserting Template in Gutenberg Editor
191 144 *
192 - * @param integer $id
193 - * @param Import $importer
194 - * @param array $settings
195 - *
196 - * @return array|WP_Error array on success, WP_Error on failure.
145 + * @param mixed $data
146 + * @return array
197 147 */
198 - public function import_in_library( $id, $importer = null, $settings = [], $template_type = '', $item_type = '' ) {
199 - $template_data = $importer->get_content( $id, 'gutenberg', 'remote' );
200 -
201 - if ( is_wp_error( $template_data ) ) {
202 - return $template_data;
203 - }
204 -
205 - if ( ! empty( $settings ) && ! empty( $template_data['content'] ) && is_string( $template_data['content'] ) ) {
206 - $template_data['content'] = \Templately\Core\Importer\Utils\GutenbergSettingsMerger::merge( $template_data['content'], $settings );
207 - }
208 -
209 - // Handle attachment replacements before saving
210 - $template_data['content'] = Utils::import_and_replace_attachments( $template_data['content'], 0 );
211 -
212 - // Frontend-provided template_type (from item details API) takes precedence over
213 - // whatever the fetched content JSON reports.
214 - if ( ! empty( $template_type ) ) {
215 - $template_data['template_type'] = $template_type;
216 - }
217 -
218 - // Resolve the correct Builder Type using template_type before passing to the importer.
219 - try {
220 - $type = static::resolve_library_type( $template_data );
221 - } catch ( \InvalidArgumentException $e ) {
222 - return Helper::error( 'unsupported_template_type', $e->getMessage(), 'import', 400 );
223 - }
224 -
225 - $factory = new \Templately\Builder\Factory\TemplateFactory( 'gutenberg' );
226 -
227 - $template = $factory->create( $type, [
228 - 'post_title' => $template_data['title'],
229 - 'post_status' => 'publish',
230 - 'post_type' => 'templately_library',
231 - ] );
232 -
233 - if ( is_wp_error( $template ) ) {
234 - return $template;
235 - }
236 -
237 - $template->import( array_merge( $template_data, [
238 - 'import_settings' => [
239 - 'title' => $template_data['title'],
240 - 'type' => $type,
241 - ]
242 - ] ) );
243 -
244 - $post_id = $template->get_main_id();
245 -
246 - // Companion content for archive/fluent types — same side effects (Shop page,
247 - // page_for_posts, LearnDash courses slug, fluent single-page template) the FSI
248 - // Templates runner performs when importing these template types.
249 - Utils::create_companion_content( $type, $template_data['title'] ?? '', 'gutenberg' );
250 -
251 - // Mark user as having imported a template
252 - Options::get_instance()->set( 'has_imported_template', true );
253 -
254 - return [
255 - 'post_id' => $post_id,
256 - 'edit_link' => get_edit_post_link( $post_id, 'internal' ),
257 - 'visit' => get_permalink( $post_id ),
258 - ];
148 + public function insert( $data ){
149 + return $data;
259 150 }
260 -
261 - /**
262 - * AJAX handler to update the option `templately-gutenberg-hide-buttons`
263 - */
264 - public function update_gutenberg_hide_buttons() {
265 - // Check nonce for security
266 - check_ajax_referer( 'templately_nonce', 'nonce' );
267 -
268 - // Get the new value from the AJAX request
269 - $hide_buttons = isset($_GET['hide_buttons']) ? sanitize_text_field($_GET['hide_buttons']) : '';
270 -
271 - // Update the option
272 - update_option('templately-gutenberg-hide-buttons', $hide_buttons);
273 -
274 - $hide_buttons = get_option('templately-gutenberg-hide-buttons', 'no');
275 - $hide_buttons = $hide_buttons === 'yes' ? 'yes' : 'no';
276 - // Send a response back to the JavaScript
277 - wp_send_json_success([
278 - 'hide_buttons' => $hide_buttons,
279 - ]);
280 - }
281 -}
151 +}