table = $wpdb->prefix . 'e2pdf_revisions'; } // load public function load($template_id, $full = true, $revision_id = 0) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $template = $wpdb->get_row($wpdb->prepare('SELECT * FROM `' . $this->get_table() . '` WHERE template_id = %d AND revision_id = %d', $template_id, $revision_id), ARRAY_A); if ($template && $revision_id) { $this->template = $template; $extension = new Model_E2pdf_Extension(); if ($this->get('extension')) { $extension->load($this->get('extension')); } if ($this->get('item')) { $extension->set('item', $this->get('item')); } if ($this->get('template_id')) { $extension->set('template_id', $this->get('template_id')); } $this->extension = $extension; if ($full) { $this->set('fonts', $this->helper->load('convert')->unserialize($template['fonts'])); $this->set('permissions', $this->helper->load('convert')->unserialize($template['permissions'])); $this->set('properties', $this->helper->load('convert')->unserialize($template['properties'])); $this->set('actions', $this->helper->load('convert')->unserialize($template['actions'])); $model_e2pdf_page = new Model_E2pdf_Page(); $this->set('pages', $model_e2pdf_page->get_pages($this->get('template_id'), $revision_id)); } return true; } return false; } public function revision($template_id = false) { global $wpdb; if ($template_id) { $template = $wpdb->get_row($wpdb->prepare('SELECT * FROM `' . $wpdb->prefix . 'e2pdf_templates` WHERE ID = %d', $template_id), ARRAY_A); if ($template) { $this->template = $template; $this->set('fonts', $this->helper->load('convert')->unserialize($template['fonts'])); $this->set('permissions', $this->helper->load('convert')->unserialize($template['permissions'])); $this->set('properties', $this->helper->load('convert')->unserialize($template['properties'])); $this->set('actions', $this->helper->load('convert')->unserialize($template['actions'])); $this->set('template_id', $template_id); $condition = array( 'template_id' => array( 'condition' => '=', 'value' => $this->get('template_id'), 'type' => '%d', ), ); $where = $this->helper->load('db')->prepare_where($condition); // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $wpdb->query($wpdb->prepare('UPDATE `' . $wpdb->prefix . 'e2pdf_elements` set revision_id = revision_id + 1 ' . $where['sql'] . '', $where['filter'])); $wpdb->query($wpdb->prepare('UPDATE `' . $wpdb->prefix . 'e2pdf_pages` set revision_id = revision_id + 1 ' . $where['sql'] . '', $where['filter'])); $wpdb->query($wpdb->prepare('UPDATE `' . $wpdb->prefix . 'e2pdf_revisions` set revision_id = revision_id + 1 ' . $where['sql'] . '', $where['filter'])); // phpcs:enable $this->save(); } } return false; } public function pre_save() { $template = array( 'template_id' => $this->get('template_id'), 'revision_id' => '1', 'title' => $this->get('title'), 'pdf' => $this->get('pdf'), 'updated_at' => current_time('mysql', 1), 'flatten' => $this->get('flatten'), 'tab_order' => $this->get('tab_order'), 'format' => $this->get('format'), 'resample' => $this->get('resample'), 'compression' => $this->get('compression'), 'optimization' => $this->get('optimization'), 'appearance' => $this->get('appearance'), 'width' => $this->get('width'), 'height' => $this->get('height'), 'extension' => $this->get('extension'), 'item' => $this->get('item'), 'item1' => $this->get('item1'), 'item2' => $this->get('item2'), 'dataset_title' => $this->get('dataset_title'), 'dataset_title1' => $this->get('dataset_title1'), 'dataset_title2' => $this->get('dataset_title2'), 'button_title' => $this->get('button_title'), 'dpdf' => $this->get('dpdf'), 'inline' => $this->get('inline'), 'auto' => $this->get('auto'), 'rtl' => $this->get('rtl'), 'font_processor' => $this->get('font_processor'), 'name' => $this->get('name'), 'savename' => $this->get('savename'), 'password' => $this->get('password'), 'owner_password' => $this->get('owner_password'), 'permissions' => serialize($this->get('permissions')), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize 'hooks' => $this->get('hooks'), 'meta_title' => $this->get('meta_title'), 'meta_subject' => $this->get('meta_subject'), 'meta_author' => $this->get('meta_author'), 'meta_keywords' => $this->get('meta_keywords'), 'lang_code' => $this->get('lang_code'), 'fonts' => serialize($this->get('fonts')), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize 'font' => $this->get('font'), 'font_size' => $this->get('font_size'), 'font_color' => $this->get('font_color'), 'line_height' => $this->get('line_height'), 'text_align' => $this->get('line_height'), 'author' => $this->get('author'), 'properties' => serialize($this->get('properties')), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize 'actions' => serialize($this->get('actions')), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize 'attachments' => $this->get('attachments'), 'created_at' => $this->get('created_at'), ); return $template; } // template public function template() { return $this->template; } // extension public function extension() { return $this->extension; } // set public function set($key, $value) { switch ($key) { case 'format': if (in_array($value, array('pdf', 'jpg'), true)) { $this->template[$key] = $value; return true; } else { return false; } break; case 'permissions': if (!is_array($value)) { $this->template[$key] = array('printing'); } else { $this->template[$key] = $value; } break; case 'fonts': case 'properties': case 'actions': if (!is_array($value)) { $this->template[$key] = array(); } else { $this->template[$key] = $value; } break; default: $this->template[$key] = $value; break; } return true; } // get public function get($key) { if (isset($this->template[$key])) { $value = $this->template[$key]; return $value; } else { switch ($key) { case 'title': $value = __('(no title)', 'e2pdf'); break; case 'width': case 'height': case 'inline': case 'auto': case 'trash': case 'locked': case 'activated': case 'revision_id': case 'rtl': case 'tab_order': $value = '0'; break; case 'flatten': case 'appearance': $value = '1'; break; case 'compression': $value = '-1'; break; case 'optimization': $value = '-1'; break; case 'format': $value = 'pdf'; break; case 'resample': $value = '100'; break; case 'text_align': $value = 'left'; break; case 'permissions': $value = array( 'printing', ); break; case 'fonts': case 'properties': case 'actions': $value = array(); break; case 'pages': case 'revisions': $value = array(); break; case 'font_processor': $value = get_option('e2pdf_font_processor', '0'); break; default: $value = ''; break; } return $value; } } // get table public function get_table() { return $this->table; } // delete public function delete() { global $wpdb; if ($this->get('template_id') && $this->get('revision_id')) { if ($this->get('pdf')) { $pdf_dir = $this->helper->get('pdf_dir') . $this->get('pdf') . '/'; $this->helper->delete_dir($pdf_dir); } $where = array( 'template_id' => $this->get('template_id'), 'revision_id' => $this->get('revision_id'), ); $wpdb->delete($this->get_table(), $where); foreach ($this->get('pages') as $page) { $model_e2pdf_page = new Model_E2pdf_Page(); $model_e2pdf_page->load($page['page_id'], $page['template_id'], $page['revision_id']); $model_e2pdf_page->delete(); } } } // save public function save() { global $wpdb; $show_errors = false; if ($wpdb->show_errors) { $wpdb->show_errors(false); $show_errors = true; } if ($this->get('template_id')) { $template = $this->pre_save(); $success = $wpdb->insert($this->get_table(), $template); if ($success === false) { $this->helper->load('db')->db_init($wpdb->prefix); $wpdb->insert($this->get_table(), $template); } } if ($show_errors) { $wpdb->show_errors(); } } // flush public function flush() { if ($this->get('template_id')) { $revisions_limit = max(1, (int) get_option('e2pdf_revisions_limit', '3')); foreach ($this->revisions($this->get('template_id')) as $revision) { if ($revision['revision_id'] > $revisions_limit) { $this->load($this->get('template_id'), true, $revision['revision_id']); $this->delete(); } } } } // revisions public function revisions($template_id = false) { global $wpdb; $revisions = array(); if ($template_id) { $condition = array( 'template_id' => array( 'condition' => '=', 'value' => $template_id, 'type' => '%d', ), ); $where = $this->helper->load('db')->prepare_where($condition); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $revisions = $wpdb->get_results($wpdb->prepare('SELECT `revision_id`, `updated_at` FROM `' . $this->get_table() . '`' . $where['sql'] . ' ORDER BY revision_id ASC', $where['filter']), ARRAY_A); } return $revisions; } }