public function save_layouts_css_framework_option_callback()
 {
     if (user_can_edit_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['set-layout-css-framework-nonce'], 'set-layout-css-framework-nonce')) {
         $framework_saved = $this->set_framework($_POST['css_framework']);
         $current = $this->get_current_framework_name();
         $send = wp_json_encode(array('message' => array('text' => sprintf(__('The CSS framework has been set to %s. Please make sure that your theme supports %s.', 'ddl-layouts'), $current, $current), 'is_saved' => $framework_saved)));
         $this->set_up_features();
         $this->options_manager->update_options(self::FRAMEWORK_SET, true, true);
     } else {
         $send = wp_json_encode(array('error' => __(sprintf('Nonce problem: apparently we do not know where the request comes from. %s', __METHOD__), 'ddl-layouts')));
     }
     die($send);
 }
 public function duplicate_layout_callback()
 {
     // Clear any errors that may have been rendered that we don't have control of.
     if (ob_get_length()) {
         ob_clean();
     }
     if (user_can_create_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['layout-duplicate-layout-nonce'], 'layout-duplicate-layout-nonce')) {
         global $wpdb, $wpddlayout;
         $result = $wpdb->get_row($wpdb->prepare("SELECT ID, post_name FROM {$wpdb->posts} WHERE post_type=%s AND ID=%d AND post_status = 'publish'", WPDDL_LAYOUTS_POST_TYPE, $_POST['layout_id']));
         if ($result) {
             $layout_json = WPDD_Layouts::get_layout_settings($result->ID);
             $layout_array = json_decode($layout_json, true);
             $layout_name_base = __('Copy of ', 'ddl-layouts') . str_replace('\\', '\\\\', $layout_array['name']);
             $layout_name = $layout_name_base;
             $count = 1;
             while ($wpddlayout->does_layout_with_this_name_exist($layout_name)) {
                 $layout_name = $layout_name_base . ' - ' . $count;
                 $count++;
             }
             $postarr = array('post_title' => $layout_name, 'post_content' => '', 'post_status' => 'publish', 'post_type' => WPDDL_LAYOUTS_POST_TYPE);
             $post_id = wp_insert_post($postarr);
             $post_slug = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM {$wpdb->posts} WHERE post_type=%s AND ID=%d", WPDDL_LAYOUTS_POST_TYPE, $post_id));
             $layout_array['name'] = $layout_name;
             $layout_array['slug'] = $post_slug;
             WPDD_Layouts::save_layout_settings($post_id, $layout_array);
             $wpddlayout->register_strings_for_translation($post_id);
         }
         $send = $wpddlayout->listing_page->get_send(isset($_GET['status']) && $_GET['status'] === 'trash' ? $_GET['status'] : 'publish', false, $post_id, $post_id, '', $_POST);
     } else {
         $send = wp_json_encode(array('error' => __(sprintf('Nonce problem: apparently we do not know where the request comes from. %s', __METHOD__), 'ddl-layouts')));
     }
     die($send);
 }
 function import_layouts_ajax_callback()
 {
     if (user_can_edit_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     //if ( !wp_verify_nonce($_POST['nonce'], 'layouts-import-nonce') ){
     if (!wp_verify_nonce($_POST['layouts-import-nonce'], 'layouts-import-nonce')) {
         die(WPDD_Utils::ajax_nonce_fail(__METHOD__));
     }
     /**
      * TODo:
      * Show message for old browsers
      ***/
     $message = '';
     $status = 'ok';
     $continue = 'false';
     $stop_file = '';
     $overwritten = 0;
     $deleted = 0;
     $saved_css = 0;
     $saved_layouts = 0;
     $next_file = '';
     $total_files = 0;
     $is_zip = 0;
     $file_name = '';
     $overwrite = $_POST['layouts_overwrite'] == 'false' ? false : true;
     $delete = $_POST['layouts_delete'] == 'false' ? false : true;
     $overwrite_assignment = $_POST['overwrite_layouts_assignment'] == 'false' ? false : true;
     if (isset($_FILES['import-file']) || isset($_POST['file'])) {
         $first_import = true;
         if (isset($_FILES['import-file'])) {
             $upload_dir = wp_upload_dir();
             $file_name = $upload_dir['path'] . '/' . $_FILES['import-file']['name'];
             move_uploaded_file($_FILES['import-file']['tmp_name'], $file_name);
             $file['tmp_name'] = $file_name;
         } else {
             $file['tmp_name'] = $_POST['file_name'];
             $first_import = false;
             $file_name = stripcslashes($_POST['file_name']);
             $next_file = stripcslashes($_POST['file']);
             if (isset($_POST['skip_file'])) {
                 $skip_file = $_POST['skip_file'];
             }
         }
         $info = pathinfo($file_name);
         if ($info['extension'] == 'zip') {
             //Return total and list of files from zip
             if (isset($_FILES['import-file'])) {
                 $zip_file_list = array();
                 $zip = zip_open($file['tmp_name']);
                 if (is_resource($zip)) {
                     $is_zip = 1;
                     while (($zip_entry = zip_read($zip)) !== false) {
                         if (self::get_extension(zip_entry_name($zip_entry)) === 'ddl' || self::get_extension(zip_entry_name($zip_entry)) === 'css') {
                             $total_files++;
                             $zip_file_list[] = zip_entry_name($zip_entry);
                         }
                     }
                 } else {
                     $message = __('Incorrect zip file.', 'ddl-layouts');
                     $status = 'error';
                 }
                 $out = array('message' => $message, 'status' => $status, 'total_files' => $total_files, 'file_name' => $file_name, 'file_list' => $zip_file_list);
                 die(wp_json_encode($out));
             }
             $zip = zip_open($file['tmp_name']);
             if (is_resource($zip)) {
                 if (isset($_POST['imported_layouts'])) {
                     $this->imported_layouts = $_POST['imported_layouts'];
                 }
                 while (($zip_entry = zip_read($zip)) !== false) {
                     if ($continue == 'true' && (self::get_extension(zip_entry_name($zip_entry)) === 'ddl' || self::get_extension(zip_entry_name($zip_entry)) === 'css')) {
                         zip_close($zip);
                         break;
                     }
                     if (!empty($next_file) && $next_file != zip_entry_name($zip_entry)) {
                         continue;
                     }
                     if (self::get_extension(zip_entry_name($zip_entry)) === 'ddl') {
                         $data = @zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                         $name = self::get_file_nicename(zip_entry_name($zip_entry));
                         $this->layout_handle_save($data, $name, $overwrite, $delete, $overwrite_assignment);
                         $message = __(sprintf('File %s processed', zip_entry_name($zip_entry)), 'ddl-layouts');
                     } elseif (self::get_extension(zip_entry_name($zip_entry)) === 'css') {
                         $data = @zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                         $this->save_css($data, $overwrite);
                         $message = __(sprintf('File %s processed', zip_entry_name($zip_entry)), 'ddl-layouts');
                     }
                     if (self::get_extension(zip_entry_name($zip_entry)) === 'ddl' || self::get_extension(zip_entry_name($zip_entry)) === 'css') {
                         $continue = 'true';
                         if (isset($_POST['last_file']) && $_POST['last_file'] == 1 && $delete) {
                             if ($delete) {
                                 $this->handle_layouts_to_be_deleted();
                             }
                             zip_close($zip);
                             if (file_exists($file_name)) {
                                 unlink($file_name);
                             }
                             break;
                         }
                     }
                 }
             } else {
                 $message = __('Incorrect zip file.', 'ddl-layouts');
                 $status = 'error';
             }
         } else {
             if ($info['extension'] == 'ddl') {
                 $result = $this->handle_single_layout($file, $info, $overwrite, $delete, $overwrite_assignment);
                 if ($delete) {
                     $this->handle_layouts_to_be_deleted();
                 }
                 if (file_exists($file_name)) {
                     unlink($file_name);
                 }
                 $message = "Working with " . $_FILES['import-file']['name'];
             } else {
                 if ($info['extension'] == 'css') {
                     global $wpddlayout;
                     $data = file_get_contents($file['tmp_name']);
                     $css = $wpddlayout->css_manager->get_layouts_css();
                     if ($data == $css) {
                         $message = __("The CSS you're trying to import is the same as saved in database.", 'ddl-layouts');
                         $status = 'error';
                     } elseif (!empty($data) && !$overwrite) {
                         $message = __("Layouts already has CSS styling. Check &quotOverwrite any layout if it already exists&quot, if you want to overwrite this CSS.", 'ddl-layouts');
                         $status = 'error';
                     } else {
                         $result = $this->handle_single_css($file, $overwrite);
                         if ($result === false) {
                             $message = __('There was a problem saving the CSS.', 'ddl-layouts');
                             $status = 'error';
                         } else {
                             if ($overwrite === false) {
                                 $css_message = __('The Layouts CSS was created.', 'ddl-layouts');
                             } else {
                                 $css_message = __('The Layouts CSS was overwritten.', 'ddl-layouts');
                             }
                             $message = $css_message;
                         }
                         $this->handle_messages($result, $overwrite || $overwrite_assignment, $delete, true, $info['extension']);
                     }
                     if (file_exists($file_name)) {
                         unlink($file_name);
                     }
                 } else {
                     $message = __('The file type is not compatible with layouts. The imported files should be a single .ddl file, a single .css file or a .zip archive of .ddl and .css files.', 'ddl-layouts');
                     $status = 'error';
                 }
             }
         }
     } else {
         $message = __('There was a problem uploading the file. Check the file and try again', 'ddl-layouts');
         $status = 'error';
     }
     if ($status == 'ok') {
     }
     $overwritten = $this->layouts_overwritten;
     $deleted = $this->layouts_deleted;
     $saved_css = $this->css_saved;
     $saved_layouts = $this->layouts_saved;
     $out = array('message' => $message, 'status' => $status, 'file_name' => $file_name, 'overwritten' => $overwritten, 'deleted' => $deleted, 'saved_css' => $saved_css, 'saved_layouts' => $saved_layouts, 'imported_layouts' => $this->imported_layouts);
     die(wp_json_encode($out));
 }
 function save_css_settings()
 {
     if ($_POST && $_POST['action'] == 'ddl_layout_save_css_settings') {
         if (user_can_edit_layouts() === false) {
             die(WPDD_Utils::ajax_caps_fail(__METHOD__));
         }
         if (!wp_verify_nonce($_POST['ddl_layout_css_settings_nonce'], 'ddl_layout_css_settings_nonce')) {
             die(WPDD_Utils::ajax_nonce_fail(__METHOD__));
         }
         $mode = $_POST['layout_css_option'];
         $save_in = $this->css_settings_handle_mode($mode);
         if (isset($save_in['db_ok']) && $save_in['db_ok'] === false) {
             die(wp_json_encode(array("error" => __("There are problems saving this option in the database.", 'ddl-layouts'))));
         } else {
             if (isset($save_in['db_ok']) && $save_in['db_ok']) {
                 $message = array("message" => __("CSS option saved.", 'ddl-layouts'));
             }
         }
         $copy_css = $save_in != $this->options_manager->get_options('mode');
         if ($copy_css) {
             // we need to copy the css.
             $css = $this->get_layouts_css();
         }
         $this->options_manager->update_options('mode', $save_in, true);
         if ($copy_css) {
             $this->handle_layout_css_save($css);
         }
         die(wp_json_encode($message));
     }
     die(wp_json_encode(array("error" => __("Something went wrong communicating with the server", 'ddl-layouts'))));
 }
 public function get_all_layouts_posts()
 {
     if (ob_get_length()) {
         ob_clean();
     }
     if (user_can_edit_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['nonce'], 'ddl_listing_show_posts_nonce')) {
         $data = json_decode(stripslashes($_POST['data']), true);
         $layout = (object) $data['layout'];
         $post_types = isset($data['post_types']) ? $data['post_types'] : array();
         $posts = $this->get_posts_where_used((object) $layout, $post_types);
         $send = wp_json_encode(array('Data' => array('posts' => $posts)));
     } else {
         $send = WPDD_Utils::ajax_nonce_fail(__METHOD__);
     }
     die($send);
 }
 public function ddl_switch_layout_from_post_callback()
 {
     if (WPDD_Utils::user_not_admin()) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if (wp_verify_nonce($_POST['ddl_switch_layout_from_post_nonce'], 'ddl_switch_layout_from_post_nonce')) {
         $this->post_id = $_POST['post_id'];
         $meta = $this->update_layout_for_page($_POST['layout_slug'], $_POST['post_id']);
         $send = wp_json_encode(array('message' => array('meta' => $meta, 'current' => $_POST['layout_id'], 'post_id' => $this->post_id, 'key' => WPDDL_LAYOUTS_META_KEY)));
     } else {
         $send = WPDD_Utils::ajax_nonce_fail(__METHOD__);
     }
     die($send);
 }
 public function set_layouts_post_types_on_usage_change()
 {
     if (user_can_assign_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['layout-set-change-post-types-nonce'], 'layout-set-change-post-types-nonce')) {
         $post_types = isset($_POST[self::POST_TYPES_OPTION_NAME]) && is_array($_POST[self::POST_TYPES_OPTION_NAME]) ? array_unique($_POST[self::POST_TYPES_OPTION_NAME]) : array();
         if (isset($_POST['extras'])) {
             $extras = $_POST['extras'];
             if (isset($extras['post_types']) && count($extras['post_types']) > 0) {
                 $types_to_batch = $extras['post_types'];
             }
         }
         if (isset($extras) && isset($types_to_batch)) {
             $send = wp_json_encode(array('message' => array('changed' => $this->handle_set_option_and_bulk_at_once($_POST['layout_id'], $post_types, null), 'done' => 'yes')));
         } else {
             $send = wp_json_encode(array('message' => array('changed' => $this->handle_post_type_data_save($_POST['layout_id'], $post_types, true), 'done' => 'yes')));
         }
     } else {
         $send = wp_json_encode(array('error' => __(sprintf('Nonce problem: apparently we do not know where the request comes from. %s', __METHOD__), 'ddl-layouts')));
     }
     die($send);
 }
 function get_posts_for_post_content_json()
 {
     if (user_can_edit_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['nonce'], 'ddl-post-content-post-type-select')) {
         $send = wp_json_encode(array('Data' => $this->show_posts_options($_POST['post_type'], get_ddl_name_attr('selected_post'), $_POST['selected'], $_POST['page'], $_POST['page'])));
     } else {
         $send = wp_json_encode(array('error' => __(sprintf('Nonce problem: apparently we do not know where the request comes from. %s', __METHOD__), 'ddl-layouts')));
     }
     die($send);
 }
 public static function ddl_set_max_posts_amount()
 {
     if (user_can_edit_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['ddl_max-posts-num_nonce'], 'ddl_max-posts-num_nonce')) {
         $update = false;
         $amount = isset($_POST['amount_posts']) ? $_POST['amount_posts'] : self::$max_posts_num_option;
         if ($amount !== self::$max_posts_num_option) {
             self::$max_posts_num_option = $amount;
             $update = self::set_option_max_num_posts($amount);
         }
         if ($update) {
             $send = wp_json_encode(array('Data' => array('message' => __('Updated option', 'ddl-layouts'), 'amount' => $amount)));
         } else {
             $send = wp_json_encode(array('Data' => array('error' => __('Option not updated', 'ddl-layouts'), 'amount' => $amount)));
         }
     } else {
         $send = wp_json_encode(array('error' => __(sprintf('Nonce problem: apparently we do not know where the request comes from. %s', __METHOD__), 'ddl-layouts')));
     }
     die($send);
 }
Esempio n. 10
0
 public function view_layout_from_editor_callback()
 {
     global $wpddlayout;
     if (user_can_assign_layouts() === false) {
         die(WPDD_Utils::ajax_caps_fail(__METHOD__));
     }
     if ($_POST && wp_verify_nonce($_POST['ddl-view-layout-nonce'], 'ddl-view-layout-nonce')) {
         $layout = WPDD_Layouts::get_layout_settings($_POST['layout_id'], true);
         if ($layout && isset($layout->has_child) && ($layout->has_child === 'true' || $layout->has_child === true)) {
             $send = wp_json_encode(array('message' => __("This layout contains a child layout and can't be viewed directly.", 'ddl-layouts') . '<br />' . __("You'll need to switch to one of the child layouts and view it.", 'ddl-layouts')));
         } else {
             $items = $this->get_where_used_x_amount_of_posts($_POST['layout_id'], false, 3);
             $posts = $items->posts;
             $layout_post_types = $wpddlayout->post_types_manager->get_layout_post_types($_POST['layout_id']);
             $loops = $wpddlayout->layout_post_loop_cell_manager->get_layout_loops($_POST['layout_id']);
             if (count($posts) === 0 && count($loops) === 0 && count($layout_post_types) === 0) {
                 $send = wp_json_encode(array('message' => __(sprintf("This layout is not assigned to any content. %sFirst, assign it to content and then you can view it on the site's front-end. %sYou can assign this layout to content at the bottom of the layout editor.", '<br>', '<br>'), 'ddl-layouts')));
             } else {
                 $items = array();
                 foreach ($layout_post_types as $post_type) {
                     $push = $this->get_x_posts_of_type($post_type, $_POST['layout_id'], 1);
                     if (is_array($push)) {
                         $posts = array_merge($posts, $push);
                     }
                 }
                 foreach ($posts as $post) {
                     $post_types = $wpddlayout->post_types_manager->get_post_types_from_wp();
                     $label = $post_types[$post->post_type]->labels->singular_name;
                     $labels = $post_types[$post->post_type]->labels->name;
                     $item = array('href' => get_permalink($post->ID), 'title' => $post->post_title, 'type' => $label, 'types' => $labels);
                     if (in_array($item, $items) === false) {
                         $items[] = $item;
                     }
                 }
                 foreach ($loops as $loop) {
                     $push = $wpddlayout->layout_post_loop_cell_manager->get_loop_display_object($loop);
                     if (null !== $push) {
                         array_push($items, $push);
                     }
                 }
                 $send = wp_json_encode(array('Data' => $items, 'message' => __(sprintf("This layout is not assigned to any content. %sFirst, assign it to content and then you can view it on the site's front-end. %sYou can assign this layout to content at the bottom of the layout editor.", '<br>', '<br>'), 'ddl-layouts'), 'no_preview_message' => __('No previews available', 'ddl-layouts')));
             }
         }
     } else {
         $send = wp_json_encode(array('error' => __(sprintf('Nonce problem: apparently we do not know where the request comes from. %s', __METHOD__), 'ddl-layouts')));
     }
     die($send);
 }