protected function add_edit_menu()
 {
     if (user_can_edit_layouts() === false) {
         return array();
     }
     return array('dd_layouts_edit' => array('title' => __('Edit layout', 'ddl-layouts'), 'function' => array($this, 'dd_layouts_edit')));
 }
 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);
 }
 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);
 }
 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);
 }
 function update_wpml_state()
 {
     if (user_can_edit_layouts() === false) {
         die(__("You don't have permission to perform this action!", 'ddl-layouts'));
     }
     if (!isset($_POST['wpnonce']) || !wp_verify_nonce($_POST['wpnonce'], 'ddl_layout_view_nonce')) {
         die;
     }
     global $wpddlayout;
     $layout = $wpddlayout->get_layout_from_id($_POST['layout_id']);
     if ($_POST['register_strings'] == 'true') {
         $layout->register_strings_for_translation();
     }
     do_action('WPML_show_package_language_ui', $layout->get_string_context());
     die;
 }