import { __ } from '@wordpress/i18n'; const { themeStatus } = starterTemplates; import apiFetch from '@wordpress/api-fetch'; export const getDemo = async ( id, storedState ) => { const [ { currentIndex }, dispatch ] = storedState; const generateData = new FormData(); generateData.append( 'action', 'astra-sites-api-request' ); generateData.append( 'url', 'astra-sites/' + id ); generateData.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: generateData, } ) .then( ( response ) => response.json() ) .then( ( response ) => { if ( response.success ) { const isEcommerce = response?.data[ 'required-plugins' ]?.some( ( plugin ) => plugin?.slug === 'surecart' || plugin?.slug === 'woocommerce' ); starterTemplates.previewUrl = 'https:' + response.data[ 'astra-site-url' ]; dispatch( { type: 'set', templateId: id, templateResponse: response.data, importErrorMessages: {}, importErrorResponse: [], importError: false, isEcommerce, } ); } else { let errorMessages = {}; if ( undefined !== response.data.response_code ) { const code = response.data.code.toString(); switch ( code ) { case '401': case '404': errorMessages = { primaryText: astraSitesVars?.server_import_primary_error, secondaryText: '', errorCode: code, errorText: response.data.message, solutionText: '', tryAgain: true, }; break; case '500': errorMessages = { primaryText: astraSitesVars?.server_import_primary_error, secondaryText: '', errorCode: code, errorText: response.data.message, solutionText: astraSitesVars?.ajax_request_failed_secondary, tryAgain: true, }; break; case 'WP_Error': errorMessages = { primaryText: astraSitesVars?.client_import_primary_error, secondaryText: '', errorCode: code, errorText: response.data.message, solutionText: '', tryAgain: true, }; break; case 'Cloudflare': errorMessages = { primaryText: astraSitesVars?.cloudflare_import_primary_error, secondaryText: '', errorCode: code, errorText: response.data.message, solutionText: '', tryAgain: true, }; break; default: errorMessages = { primaryText: __( 'Fetching related demo failed.', 'astra-sites' ), secondaryText: '', errorCode: '', errorText: response.data, solutionText: astraSitesVars?.ajax_request_failed_secondary, tryAgain: false, }; break; } dispatch( { type: 'set', importError: true, importErrorMessages: errorMessages, importErrorResponse: response.data, templateResponse: null, currentIndex: currentIndex + 3, } ); } } } ) .catch( ( error ) => { dispatch( { type: 'set', importError: true, importErrorMessages: { primaryText: __( 'Fetching related demo failed.', 'astra-sites' ), secondaryText: astraSitesVars?.ajax_request_failed_secondary, errorCode: '', errorText: error, solutionText: '', tryAgain: false, }, } ); } ); }; export const getAiDemo = async ( { businessName, selectedTemplate }, storedState, websiteInfo ) => { const [ , dispatch ] = storedState; const { uuid } = websiteInfo; const aiResponse = await apiFetch( { path: 'zipwp/v1/ai-site', method: 'POST', data: { template: selectedTemplate, business_name: businessName, uuid, }, } ); if ( aiResponse.success ) { dispatch( { type: 'set', templateId: selectedTemplate, templateResponse: aiResponse.data?.data, importErrorMessages: {}, importErrorResponse: [], importError: false, } ); return { success: true, data: aiResponse.data?.data }; } dispatch( { type: 'set', importError: true, importErrorMessages: { primaryText: __( 'Fetching related demo failed.', 'astra-sites' ), secondaryText: '', errorCode: '', errorText: typeof aiResponse.data === 'string' ? aiResponse.data : aiResponse?.data?.data ?? '', solutionText: '', tryAgain: false, }, } ); return { success: false, data: aiResponse.data }; }; export const checkRequiredPlugins = async ( storedState ) => { const [ { enabledFeatureIds, selectedEcommercePlugin }, dispatch ] = storedState; const reqPlugins = new FormData(); reqPlugins.append( 'action', 'astra-sites-required_plugins' ); reqPlugins.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); if ( enabledFeatureIds.length !== 0 ) { const featurePlugins = getFeaturePluginList( enabledFeatureIds, selectedEcommercePlugin ); reqPlugins.append( 'feature_plugins', JSON.stringify( featurePlugins ) ); } await fetch( ajaxurl, { method: 'post', body: reqPlugins, } ) .then( ( response ) => response.json() ) .then( ( response ) => { if ( response.success ) { const rPlugins = response.data?.required_plugins; const notInstalledPlugin = rPlugins.notinstalled || ''; const notActivePlugins = rPlugins.inactive || ''; dispatch( { type: 'set', requiredPlugins: response.data, notInstalledList: notInstalledPlugin, notActivatedList: notActivePlugins, } ); } } ); }; function getFeaturePluginList( features, selectedEcommercePlugin ) { const requiredPlugins = []; features?.forEach( ( feature ) => { switch ( feature ) { case 'ecommerce': if ( selectedEcommercePlugin === 'surecart' ) { requiredPlugins.push( { name: 'SureCart', slug: 'surecart', init: 'surecart/surecart.php', } ); } else if ( selectedEcommercePlugin === 'woocommerce' ) { requiredPlugins.push( { name: 'WooCommerce', slug: 'woocommerce', init: 'woocommerce/woocommerce.php', } ); requiredPlugins.push( { name: 'Checkout Plugins Stripe Woo', slug: 'checkout-plugins-stripe-woo', init: 'checkout-plugins-stripe-woo/checkout-plugins-stripe-woo.php', } ); } break; case 'donations': requiredPlugins.push( { name: 'SureCart', slug: 'surecart', init: 'surecart/surecart.php', } ); break; case 'automation-integrations': requiredPlugins.push( { name: 'SureTriggers', slug: 'suretriggers', init: 'suretriggers/suretriggers.php', } ); break; case 'smtp': requiredPlugins.push( { name: 'Suremail', slug: 'suremails', init: 'suremails/suremails.php', } ); break; case 'sales-funnels': requiredPlugins.push( { name: 'CartFlows', slug: 'cartflows', init: 'cartflows/cartflows.php', } ); requiredPlugins.push( { name: 'Woocommerce Cart Abandonment Recovery', slug: 'woo-cart-abandonment-recovery', init: 'woo-cart-abandonment-recovery/woo-cart-abandonment-recovery.php', } ); break; case 'video-player': requiredPlugins.push( { name: 'Preso Player', slug: 'presto-player', init: 'presto-player/presto-player.php', } ); break; case 'appointment-bookings': requiredPlugins.push( { name: 'Latepoint', slug: 'latepoint', init: 'latepoint/latepoint.php', } ); break; case 'live-chat': requiredPlugins.push( { name: 'WP Live Chat Support', slug: 'wp-live-chat-support', init: 'wp-live-chat-support/wp-live-chat-support.php', } ); break; default: break; } } ); return requiredPlugins; } export const activateAstra = ( storedState ) => { const [ , dispatch ] = storedState; const data = new FormData(); data.append( 'action', 'astra-sites-activate_theme' ); data.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); fetch( ajaxurl, { method: 'post', body: data, } ) .then( ( response ) => response.json() ) .then( ( response ) => { if ( response.success ) { dispatch( { type: 'set', themeStatus: response, importStatus: __( 'Astra Theme Installed.', 'astra-sites' ), } ); } else { dispatch( { type: 'set', importError: true, importErrorMessages: { primaryText: __( 'Astra theme installation failed.', 'astra-sites' ), secondaryText: '', errorCode: '', errorText: response.data, solutionText: '', tryAgain: true, }, } ); } } ) .catch( ( error ) => { /* eslint-disable-next-line no-console -- We are displaying errors in the console. */ console.error( error ); } ); }; export const installAstra = ( storedState ) => { const [ { importPercent }, dispatch ] = storedState; const themeSlug = 'astra'; let percentage = importPercent; if ( 'not-installed' === themeStatus ) { if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) { wp.updates.requestFilesystemCredentials(); } percentage += 5; dispatch( { type: 'set', importPercent: percentage, importStatus: __( 'Installing Astra Theme…', 'astra-sites' ), } ); wp.updates.installTheme( { slug: themeSlug, ajax_nonce: astraSitesVars?._ajax_nonce, } ); // eslint-disable-next-line no-undef jQuery( document ).on( 'wp-theme-install-success', function () { dispatch( { type: 'set', importStatus: __( 'Astra Theme Installed.', 'astra-sites' ), } ); activateAstra( storedState ); } ); } if ( 'installed-but-inactive' === themeStatus ) { // WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that. setTimeout( () => activateAstra( storedState ), 3000 ); } if ( 'installed-and-active' === themeStatus ) { dispatch( { type: 'set', themeStatus: true, } ); } }; export const setSiteLogo = async ( logo ) => { if ( '' === logo.id ) { return; } const data = new FormData(); data.append( 'action', 'astra-sites-set_site_data' ); data.append( 'param', 'site-logo' ); data.append( 'logo', logo.id ); data.append( 'logo-width', logo.width ); data.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: data, } ); }; export const setColorPalettes = async ( palette ) => { if ( ! palette ) { return; } const data = new FormData(); data.append( 'action', 'astra-sites-set_site_data' ); data.append( 'param', 'site-colors' ); data.append( 'palette', palette ); data.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: data, } ); }; export const setSiteTitle = async ( businessName ) => { if ( ! businessName ) { return; } const data = new FormData(); data.append( 'action', 'astra-sites-set_site_data' ); data.append( 'param', 'site-title' ); data.append( 'business-name', businessName ); data.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: data, } ); }; export const setSiteLanguage = async ( siteLanguage = 'en_US' ) => { if ( ! siteLanguage ) { return; } const data = new FormData(); data.append( 'action', 'astra-sites-site-language' ); data.append( 'language', siteLanguage ); data.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: data, } ); }; export const saveTypography = async ( selectedValue ) => { const data = new FormData(); data.append( 'action', 'astra-sites-set_site_data' ); data.append( 'param', 'site-typography' ); data.append( 'typography', JSON.stringify( selectedValue ) ); data.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: data, } ); }; export const divideIntoChunks = ( chunkSize, inputArray ) => { const values = Object.keys( inputArray ); const final = []; let counter = 0; let portion = {}; for ( const key in inputArray ) { if ( counter !== 0 && counter % chunkSize === 0 ) { final.push( portion ); portion = {}; } portion[ key ] = inputArray[ values[ counter ] ]; counter++; } final.push( portion ); return final; }; export const checkFileSystemPermissions = async ( [ , dispatch ] ) => { try { const formData = new FormData(); formData.append( 'action', 'astra-sites-filesystem_permission' ); formData.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); const response = await fetch( astraSitesVars?.ajaxurl, { method: 'POST', body: formData, } ); const data = await response.json(); dispatch( { type: 'set', fileSystemPermissions: data.data, } ); } catch ( error ) { /* eslint-disable-next-line no-console -- We are displaying errors in the console. */ console.error( error ); } }; export const generateAnalyticsLead = async ( tryAgainCount, status, templateId, builder ) => { const importContent = new FormData(); importContent.append( 'action', 'astra-sites-generate-analytics-lead' ); importContent.append( 'status', status ); importContent.append( 'id', templateId ); importContent.append( 'try-again-count', tryAgainCount ); importContent.append( 'type', 'astra-sites' ); importContent.append( 'page-builder', builder ); importContent.append( '_ajax_nonce', astraSitesVars?._ajax_nonce ); await fetch( ajaxurl, { method: 'post', body: importContent, } ); }; { "content": [ { "id": "1c48978", "settings": [], "elements": [ { "id": "77622f0b", "settings": { "_column_size": 100, "_inline_size": null }, "elements": [ { "id": "2c978c75", "settings": { "title": "Conditional Logic Quiz", "title_color": "#0D1427", "typography_typography": "custom", "typography_font_family": "IBM Plex Sans", "typography_font_size": { "unit": "px", "size": 26, "sizes": [] }, "typography_font_weight": "bold" }, "elements": [], "isInner": false, "widgetType": "heading", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "327cbb3f", "settings": [], "elements": [ { "id": "115538d5", "settings": { "_column_size": 100, "_inline_size": null }, "elements": [ { "id": "2ec99a5e", "settings": { "title": "Customer Communication and Booking Strategies", "title_color": "#54565C", "typography_typography": "custom", "typography_font_family": "IBM Plex Sans", "typography_font_size": { "unit": "px", "size": 16, "sizes": [] }, "typography_font_weight": "normal" }, "elements": [], "isInner": false, "widgetType": "heading", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "1abc5ff8", "settings": [], "elements": [ { "id": "33366c77", "settings": { "_column_size": 100, "_inline_size": null }, "elements": [ { "id": "6aa6134d", "settings": { "text": "Divider", "color": "#EAECF1", "gap": { "unit": "px", "size": 20, "sizes": [] } }, "elements": [], "isInner": false, "widgetType": "divider", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "3ea6b611", "settings": { "structure": "30" }, "elements": [ { "id": "46beb71e", "settings": { "_column_size": 33, "_inline_size": null }, "elements": [ { "id": "4850e007", "settings": { "mf_input_label": "Name", "mf_input_name": "mf-first-name", "mf_input_placeholder": "First name", "mf_input_validation_warning_message": "This field is required.", "mf_conditional_logic_form_list": [], "mf_input_label_color": "#0D1427", "mf_input_label_typography_typography": "custom", "mf_input_label_typography_font_family": "IBM Plex Sans", "mf_input_label_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_label_typography_font_weight": "500", "mf_input_place_holder_typography_typography": "custom", "mf_input_place_holder_typography_font_family": "IBM Plex Sans", "mf_input_place_holder_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_place_holder_typography_font_weight": "normal", "mf_input_placeholder_color": "#878990", "mf_input_border_radius": { "unit": "px", "size": 4, "sizes": [] }, "mf_input_required": "yes" }, "elements": [], "isInner": false, "widgetType": "mf-text", "elType": "widget" } ], "isInner": false, "elType": "column" }, { "id": "35bc2215", "settings": { "_column_size": 33, "_inline_size": null }, "elements": [ { "id": "2cedf7ba", "settings": { "mf_input_label": "", "mf_input_name": "mf-last-name", "mf_input_placeholder": "Last name", "mf_input_validation_warning_message": "This field is required.", "mf_conditional_logic_form_list": [], "mf_input_label_padding": { "unit": "px", "top": "8", "right": "8", "bottom": "8", "left": "8", "isLinked": true }, "mf_input_place_holder_typography_typography": "custom", "mf_input_place_holder_typography_font_family": "IBM Plex Sans", "mf_input_place_holder_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_place_holder_typography_font_weight": "normal", "mf_input_placeholder_color": "#878990", "mf_input_border_radius": { "unit": "px", "size": 4, "sizes": [] }, "_margin": { "unit": "px", "top": "0", "right": "0", "bottom": "0", "left": "-12", "isLinked": false }, "_margin_mobile": { "unit": "px", "top": "0", "right": "0", "bottom": "0", "left": "0", "isLinked": true } }, "elements": [], "isInner": false, "widgetType": "mf-text", "elType": "widget" } ], "isInner": false, "elType": "column" }, { "id": "5810f728", "settings": { "_column_size": 33, "_inline_size": null }, "elements": [ { "id": "24b40507", "settings": { "mf_input_label": "Date", "mf_input_name": "mf-date", "mf_input_placeholder": "DD - MM - YYYY", "mf_input_validation_warning_message": "This field is required.", "mf_input_disable_date_list": [], "mf_conditional_logic_form_list": [], "mf_input_label_color": "#0D1427", "mf_input_label_typography_typography": "custom", "mf_input_label_typography_font_family": "IBM Plex Sans", "mf_input_label_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_label_typography_font_weight": "500", "mf_input_place_holder_typography_typography": "custom", "mf_input_place_holder_typography_font_family": "IBM Plex Sans", "mf_input_place_holder_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_place_holder_typography_font_weight": "normal", "mf_input_placeholder_color": "#878990", "mf_input_border_radius": { "unit": "px", "size": 4, "sizes": [] } }, "elements": [], "isInner": false, "widgetType": "mf-date", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "1147b78d", "settings": { "structure": "20", "margin": { "unit": "px", "top": "16", "right": 0, "bottom": "0", "left": 0, "isLinked": false } }, "elements": [ { "id": "61e3298a", "settings": { "_column_size": 50, "_inline_size": 57.201 }, "elements": [ { "id": "3c8c63ed", "settings": { "mf_input_label": "Select the quiz you would like to take. ", "mf_input_name": "mf-radio", "mf_input_display_option": "block", "mf_input_list": [ { "mf_input_option_text": "Quiz 1", "mf_input_option_value": "Quiz 1", "_id": "1b5235e" }, { "mf_input_option_text": "Quiz 3", "mf_input_option_value": "Quiz 3", "_id": "5d02d48" }, { "mf_input_option_text": "Quiz 5", "mf_input_option_value": "Quiz 5", "_id": "9e0ed1b" }, { "_id": "b4c8f6d", "mf_input_option_text": "Quiz 7", "mf_input_option_value": "Quiz 7" }, { "_id": "77f837f", "mf_input_option_text": "Quiz 9", "mf_input_option_value": "Quiz 9" } ], "mf_input_validation_warning_message": "This field is required.", "mf_conditional_logic_form_list": [], "mf_input_label_color": "#401B34", "mf_input_label_typography_typography": "custom", "mf_input_label_typography_font_family": "IBM Plex Sans", "mf_input_label_typography_font_size": { "unit": "px", "size": 16, "sizes": [] }, "mf_input_label_typography_font_weight": "500", "mf_input_option_color": "#0D1427", "mf_input_option_icon_color": "#BCBEC0", "mf_input_typgraphy_text_typography": "custom", "mf_input_typgraphy_text_font_family": "IBM Plex Sans", "mf_input_typgraphy_text_font_size": { "unit": "px", "size": 16, "sizes": [] }, "mf_input_typgraphy_text_font_weight": "normal", "mf_input_required": "yes", "mf_input_warning_text_typography_typography": "custom", "mf_input_warning_text_typography_font_family": "Roboto", "mf_input_warning_text_typography_font_weight": "600" }, "elements": [], "isInner": false, "widgetType": "mf-radio", "elType": "widget" } ], "isInner": false, "elType": "column" }, { "id": "538dd02f", "settings": { "_column_size": 50, "_inline_size": 42.659 }, "elements": [ { "id": "726a2e47", "settings": { "mf_input_label": "", "mf_input_name": "mf-radio", "mf_input_display_option": "block", "mf_input_list": [ { "mf_input_option_text": "Quiz 2", "mf_input_option_value": "Quiz 2", "_id": "d268a7f" }, { "mf_input_option_text": "Quiz 4", "mf_input_option_value": "Quiz 4", "_id": "4376a76" }, { "mf_input_option_text": "Quiz 6", "mf_input_option_value": "Quiz 6", "_id": "73737fc" }, { "_id": "4755744", "mf_input_option_text": "Quiz 8", "mf_input_option_value": "Quiz 8" }, { "_id": "90d21bd", "mf_input_option_text": "Quiz 10", "mf_input_option_value": "Quiz 10" } ], "mf_input_validation_warning_message": "This field is required.", "mf_conditional_logic_form_list": [], "mf_input_option_color": "#0D1427", "mf_input_option_icon_color": "#BCBEC0", "mf_input_typgraphy_text_typography": "custom", "mf_input_typgraphy_text_font_family": "IBM Plex Sans", "mf_input_typgraphy_text_font_size": { "unit": "px", "size": 16, "sizes": [] }, "mf_input_typgraphy_text_font_weight": "normal", "mf_input_label_typography_typography": "custom", "mf_input_label_typography_font_family": "Roboto", "mf_input_label_typography_font_weight": "normal", "_margin": { "unit": "px", "top": "20", "right": "0", "bottom": "0", "left": "-265", "isLinked": false }, "_margin_tablet": { "unit": "px", "top": "20", "right": "0", "bottom": "0", "left": "-130", "isLinked": false }, "_margin_mobile": { "unit": "px", "top": "-175", "right": "0", "bottom": "0", "left": "185", "isLinked": true } }, "elements": [], "isInner": false, "widgetType": "mf-radio", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "2d6aa6f8", "settings": [], "elements": [ { "id": "4bb3d44d", "settings": { "_column_size": 100, "_inline_size": null }, "elements": [ { "id": "68bca320", "settings": { "title": "If you are not sure what you should be doing when you come in, how would you find your assigned tasks?", "title_color": "#0D1427", "typography_typography": "custom", "typography_font_family": "IBM Plex Sans", "typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "typography_font_weight": "500", "_margin": { "unit": "px", "top": "15", "right": "0", "bottom": "0", "left": "0", "isLinked": false }, "_element_width": "initial", "_element_custom_width": { "unit": "px", "size": 499, "sizes": [] }, "_element_custom_width_mobile": { "unit": "px", "size": 310, "sizes": [] } }, "elements": [], "isInner": false, "widgetType": "heading", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "4a2346a9", "settings": [], "elements": [ { "id": "7e8968f4", "settings": { "_column_size": 100, "_inline_size": null }, "elements": [ { "id": "51db6a4", "settings": { "mf_input_label": "", "mf_input_name": "mf-textarea", "mf_input_placeholder": "Enter your answer", "mf_input_validation_warning_message": "This field is required.", "mf_conditional_logic_form_list": [], "mf_input_label_typography_typography": "custom", "mf_input_label_typography_font_family": "IBM Plex Sans", "mf_input_label_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_label_typography_font_weight": "500", "mf_input_border_radius": { "unit": "px", "size": 4, "sizes": [] }, "mf_input_place_holder_typography_typography": "custom", "mf_input_place_holder_typography_font_family": "IBM Plex Sans", "mf_input_place_holder_typography_font_size": { "unit": "px", "size": 14, "sizes": [] }, "mf_input_place_holder_typography_font_weight": "normal", "mf_input_placeholder_color": "#878990", "_element_width_tablet": "initial" }, "elements": [], "isInner": false, "widgetType": "mf-textarea", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" }, { "id": "4c0b886f", "settings": [], "elements": [ { "id": "43c0a53b", "settings": { "_column_size": 100, "_inline_size": null }, "elements": [ { "id": "2299c61d", "settings": { "mf_btn_text": "Submit", "mf_btn_align": "left", "mf_conditional_logic_form_list": [], "mf_hidden_input": [], "mf_btn_text_padding": { "unit": "px", "top": "16", "right": "26", "bottom": "17", "left": "26", "isLinked": false }, "mf_btn_box_shadow_group_box_shadow_type": "yes", "mf_btn_box_shadow_group_box_shadow": { "horizontal": 0, "vertical": 0, "blur": 0, "spread": 0, "color": "rgba(0,0,0,0.5)" }, "_margin": { "unit": "px", "top": "0", "right": "0", "bottom": "0", "left": "0", "isLinked": true }, "_element_width": "initial", "_element_custom_width": { "unit": "%", "size": 100.281 }, "_flex_size": "none" }, "elements": [], "isInner": false, "widgetType": "mf-button", "elType": "widget" } ], "isInner": false, "elType": "column" } ], "isInner": false, "elType": "section" } ], "page_settings": [], "version": "0.4", "title": "condition logic", "type": "page" } Agostinho Ponte – PLTopograficos
Skip to content

Bem-vindo ao website da PLT - Projetos Levantamentos Topográficos

+351 291 862 736plt@pltopograficos.comSegunda – Sexta 9h – 18h
PLTopograficos
PLTopograficos
  • Início
  • Sobre nós
  • Serviços
    • Topografia
    • Engenharia
    • Construção Civil
  • Contactos
  • Início
  • Sobre nós
  • Serviços
    • Topografia
    • Engenharia
    • Construção Civil
  • Contactos

Agostinho Ponte

You are here:
  1. Home
  2. Teammate
  3. Agostinho Ponte

Submitclear

PLT

2017 © Todos os Direitos Reservados


Desenvolvido por:
ajudaCreativa
ajudacreativa
Contactos
  • Horário
    Segunda – Sexta : 9h – 18h
    Sábado - Domingo : Fechado
  • Morada:
    Edifício Alfa Sala I - 1º Andar
    9240-225 São Vicente Madeira - Portugal
Social