PluginProbe
Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! / 3.6.8
Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! v3.6.8
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/Plugin.php +121 -1 3.1.103.6.8 View file →
@@ -9,8 +9,12 @@
9 9 */
10 10
11 11 namespace Templately;
12 12
13 +use Templately\Admin\API\Settings as APISettings;
14 +use Templately\Admin\Settings;
15 +use Templately\API\AIContent;
16 +use Templately\API\LogoGeneration;
13 17 use Templately\API\Conditions;
14 18 use Templately\API\ThemeBuilderApi;
15 19 use Templately\Builder\ThemeBuilder;
16 20 use Templately\Core\Importer\FullSiteImport;
@@ -22,8 +26,9 @@
22 26
23 27 use Templately\API\Tags;
24 28 use Templately\API\Items;
25 29 use Templately\API\Login;
30 +use Templately\API\Checkout;
26 31 use Templately\API\SignUp;
27 32 use Templately\API\Profile;
28 33 use Templately\API\Import;
29 34 use Templately\API\MyClouds;
@@ -31,8 +36,10 @@
31 36 use Templately\API\Categories;
32 37 use Templately\API\Dependencies;
33 38 use Templately\API\TemplateTypes;
34 39 use Templately\API\SavedTemplates;
40 +use Templately\API\Sites;
41 +use Templately\API\Tour;
35 42 use Templately\Core\Maintenance;
36 43 use Templately\Core\Migrator;
37 44 use Templately\Core\Platform\Gutenberg;
38 45 use Templately\Core\Platform\Elementor;
@@ -37,11 +44,12 @@
37 44 use Templately\Core\Platform\Gutenberg;
38 45 use Templately\Core\Platform\Elementor;
39 46
40 47 final class Plugin extends Base {
41 - public $version = '3.1.10';
48 + public $version = '3.6.8';
42 49
43 50 public $admin;
51 + public $settings;
44 52 /**
45 53 * Enqueue class responsible for assets
46 54 * @var Enqueue
47 55 */
@@ -52,8 +60,13 @@
52 60 */
53 61 public $theme_builder;
54 62
55 63 /**
64 + * @var Developer
65 + */
66 + public $developer;
67 +
68 + /**
56 69 * Plugin constructor.
57 70 * Initializing Templately plugin.
58 71 *
59 72 * @access private
@@ -65,12 +78,19 @@
65 78 Maintenance::init();
66 79
67 80 $this->assets = Enqueue::get_instance( TEMPLATELY_URL, TEMPLATELY_PATH, $this->version );
68 81 $this->admin = Admin::get_instance();
82 + $this->settings = Settings::get_instance();
69 83 $this->theme_builder = ThemeBuilder::get_instance();
70 84
85 + // Initialize developer functionality if available
86 + $this->init_developer_functionality();
87 +
71 88 add_action( 'plugins_loaded', [ $this, 'plugins_loaded' ] );
72 89 add_action( 'rest_api_init', [ $this, 'register_routes' ] );
90 +
91 + add_action( 'init', [ $this, 'google_login_handler' ] );
92 +
73 93 /**
74 94 * Initialize.
75 95 */
76 96 do_action( 'templately_init' );
@@ -114,8 +134,38 @@
114 134 FullSiteImport::get_instance();
115 135 }
116 136
117 137 /**
138 + * Initialize developer functionality if available
139 + *
140 + * This method safely loads developer functionality only if the developer
141 + * directory and class exist, preventing fatal errors in production builds.
142 + *
143 + * @return void
144 + */
145 + private function init_developer_functionality() {
146 + $developer_file = TEMPLATELY_PATH . 'includes/Core/Developer/Developer.php';
147 +
148 + // Check if developer file exists before attempting to load
149 + if ( file_exists( $developer_file ) ) {
150 + // Include the developer class file
151 + require_once $developer_file;
152 +
153 + // Check if the class exists after including the file
154 + if ( class_exists( '\\Templately\\Core\\Developer\\Developer' ) ) {
155 + $this->developer = \Templately\Core\Developer\Developer::get_instance();
156 + }
157 + }
158 +
159 + // If developer functionality is not available, set to null
160 + if ( ! isset( $this->developer ) ) {
161 + $this->developer = null;
162 + }
163 + }
164 +
165 +
166 +
167 + /**
118 168 * Initialize all platforms
119 169 * @return void
120 170 */
121 171 public function platforms() {
@@ -135,17 +185,25 @@
135 185 Dependencies::get_instance();
136 186 Tags::get_instance();
137 187 ThemeBuilderApi::get_instance();
138 188
189 + AIContent::get_instance();
190 + LogoGeneration::get_instance();
139 191 Items::get_instance();
140 192 SavedTemplates::get_instance();
141 193
142 194 Login::get_instance();
195 + Checkout::get_instance();
143 196 SignUp::get_instance();
144 197 Import::get_instance();
145 198 Profile::get_instance();
146 199 MyClouds::get_instance();
147 200 WorkSpaces::get_instance();
201 + Sites::get_instance();
202 + Tour::get_instance();
203 +
204 + APISettings::get_instance();
205 + // Note: DeveloperSettings::get_instance() is called in Developer::init_modules() when developer functionality is available and enabled
148 206 }
149 207
150 208 /**
151 209 * Register all REST API endpoints
@@ -204,6 +262,68 @@
204 262 *
205 263 */
206 264 public function load_textdomain() {
207 265 load_plugin_textdomain( 'templately', false, dirname( TEMPLATELY_PLUGIN_BASENAME ) . '/languages' );
266 + }
267 +
268 + public function google_login_handler() {
269 + // Stop if not a templately google login request
270 + if ( empty( $_GET['templately_google_login'] ) ) {
271 + return;
272 + }
273 +
274 + $redirect_url = remove_query_arg( [ 'templately_google_login', 'api_key', 'error', 'state', 'redirect-to' ] );
275 +
276 + if ( ! empty( $_GET['error'] ) ) {
277 + $error_message = sanitize_text_field( $_GET['error'] );
278 + } elseif ( ! empty( $_GET['api_key'] ) ) {
279 + $request = new \WP_REST_Request( 'POST', '/templately/v1/login' );
280 + $request->set_param( 'viaAPI', true );
281 + $request->set_param( 'api_key', sanitize_text_field( $_GET['api_key'] ) );
282 +
283 + /**
284 + * @var Login $login
285 + */
286 + $login = Login::get_instance();
287 + $login->permission_check( $request );
288 + $response = $login->login();
289 +
290 + if ( ! is_wp_error( $response ) && ! empty( $response['user'] ) ) {
291 + $redirect_path = ! empty( $_GET['redirect-to'] ) ? sanitize_text_field( wp_unslash( $_GET['redirect-to'] ) ) : '';
292 + if ( ! empty( $redirect_path ) ) {
293 + if ( filter_var( $redirect_path, FILTER_VALIDATE_URL ) ) {
294 + $redirect_url = $redirect_path;
295 + } else {
296 + $is_templately = strpos( $redirect_url, 'page=templately' ) !== false;
297 + $is_elementor = strpos( $redirect_url, 'action=elementor' ) !== false;
298 + // Gutenberg editor usually has action=edit or is a block editor page
299 + $is_gutenberg = ( strpos( $redirect_url, 'action=edit' ) !== false || strpos( $redirect_url, 'post_type=' ) !== false ) && ! $is_elementor;
300 +
301 + if ( $is_templately || $is_elementor || $is_gutenberg ) {
302 + $redirect_url = add_query_arg( 'path', ltrim( $redirect_path, '/' ), $redirect_url );
303 +
304 + // Always open the modal in editors after google login
305 + if ( $is_elementor || $is_gutenberg ) {
306 + $redirect_url = add_query_arg( 'templately_open_modal', '1', $redirect_url );
307 + }
308 + }
309 + }
310 + }
311 +
312 + wp_safe_redirect( $redirect_url );
313 + exit;
314 + } else {
315 + $error_message = ( is_wp_error( $response ) ) ? $response->get_error_message() : __( 'Login failed.', 'templately' );
316 + }
317 + } else {
318 + $error_message = __( 'Missing API Key.', 'templately' );
319 + }
320 +
321 + $redirect_url = add_query_arg( [
322 + 'templately_error' => 'login_failed',
323 + 'error_message' => urlencode( $error_message ),
324 + ], $redirect_url );
325 +
326 + wp_safe_redirect( $redirect_url );
327 + exit;
208 328 }
209 329 }