PluginProbe
wpForo Forum / 3.0.9
wpForo Forum v3.0.9
3.1.5 3.1.4 3.1.2 3.1.1 3.1.0 3.0.9 3.0.8 3.0.7 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.10 1.4.11 1.4.12 1.4.13 1.4.2 All 137 releases
wpforo / modules / revisions / classes / Actions.php

Actions.php in wpForo Forum 3.0.9, at modules/revisions/classes/Actions.php

165 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace wpforo\modules\revisions\classes;
4
5 class Actions {
6 public function __construct() {
7 $this->init_hooks();
8 }
9
10 private function init_hooks() {
11 if( wpforo_setting( 'posting', 'is_preview_on' )
12 || wpforo_setting( 'posting', 'is_draft_on' )
13 ) {
14 if( wpforo_setting( 'posting', 'is_preview_on' ) ) {
15 add_action( 'wp_ajax_wpforo_post_preview', [ $this, 'ajax_post_preview' ] );
16 }
17
18 if( wpforo_setting( 'posting', 'is_draft_on' ) ) {
19 add_action( 'wpforo_after_add_topic', [ $this, 'after_submit' ] );
20 add_action( 'wpforo_after_add_post', [ $this, 'after_submit' ] );
21 add_action( 'wpforo_after_edit_topic', [ $this, 'after_submit' ] );
22 add_action( 'wpforo_after_edit_post', [ $this, 'after_submit' ] );
23
24 add_action( 'wp_ajax_wpforo_save_revision', [ $this, 'ajax_save_revision' ] );
25 add_action( 'wp_ajax_wpforo_get_revisions_history', [ $this, 'ajax_get_revisions_history' ] );
26 add_action( 'wp_ajax_wpforo_get_revision', [ $this, 'ajax_get_revision' ] );
27 add_action( 'wp_ajax_wpforo_delete_revision', [ $this, 'ajax_delete_revision' ] );
28
29 add_action( 'wp_ajax_nopriv_wpforo_save_revision', [ $this, 'ajax_save_revision' ] );
30 add_action( 'wp_ajax_nopriv_wpforo_get_revisions_history', [ $this, 'ajax_get_revisions_history' ] );
31 add_action( 'wp_ajax_nopriv_wpforo_get_revision', [ $this, 'ajax_get_revision' ] );
32 add_action( 'wp_ajax_nopriv_wpforo_delete_revision', [ $this, 'ajax_delete_revision' ] );
33 }
34 }
35 }
36
37 public function ajax_post_preview() {
38 wpforo_verify_nonce( 'wpforo_post_preview' );
39 $revision = WPF()->revision->parse_revision( $_POST );
40 ob_start();
41 WPF()->revision->Template->show_preview( $revision );
42 $html = trim( (string) ob_get_clean() );
43 if( $html ) {
44 wp_send_json_success( $html );
45 } else {
46 wp_send_json_error( $html );
47 }
48 }
49
50 public function ajax_save_revision() {
51 wpforo_verify_nonce( 'wpforo_save_revision' );
52 $args = [
53 'textareaid' => (string) wpfval( $_POST, 'textareaid' ),
54 'postid' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
55 'body' => (string) wpfval( $_POST, 'body' ),
56 ];
57
58 $revision = WPF()->revision->parse_revision( $args );
59 $revision['created'] = time();
60 $revision['url'] = WPF()->revision->get_current_url_query_vars_str();
61 $revision['userid'] = WPF()->current_userid;
62 $revision['email'] = WPF()->current_user_email;
63
64 if( $revisionid = (int) WPF()->revision->add( $revision ) ) {
65 $args = [
66 // 'textareaids_include' => $revision['textareaid'],
67 'postids_include' => $revision['postid'],
68 'userids_include' => $revision['userid'],
69 'emails_include' => $revision['email'],
70 'urls_include' => $revision['url'],
71 ];
72 $revisions_count = WPF()->revision->get_count( $args );
73 if( $revisions_count > wpforo_setting( 'posting', 'max_drafts_per_page' ) ) {
74 $sql = "DELETE FROM " . WPF()->tables->post_revisions . WPF()->revision->build_sql_where( $args ) . "
75 ORDER BY `revisionid` ASC LIMIT %d";
76 $sql = WPF()->db->prepare( $sql, ( $revisions_count - wpforo_setting( 'posting', 'max_drafts_per_page' ) ) );
77 if( WPF()->db->query( $sql ) !== false ) $revisions_count = wpforo_setting( 'posting', 'max_drafts_per_page' );
78 }
79 } else {
80 $revisions_count = 0;
81 $revisionid = 0;
82 }
83
84 $revision['revisionid'] = $revisionid;
85
86 $response = [
87 'revisionid' => $revisionid,
88 'revisions_count' => $revisions_count,
89 'revisionhtml' => WPF()->revision->Template->build_revision( $revision ),
90 ];
91 if( $revisionid ) {
92 wp_send_json_success( $response );
93 } else {
94 wp_send_json_error( $response );
95 }
96 }
97
98 public function ajax_get_revisions_history() {
99 wpforo_verify_nonce( 'wpforo_get_revisions_history' );
100 $args = [
101 // 'textareaids_include' => (string) wpfval( $_POST, 'textareaid' ),
102 'postids_include' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
103 'userids_include' => WPF()->current_userid,
104 'emails_include' => WPF()->current_user_email,
105 'urls_include' => WPF()->revision->get_current_url_query_vars_str(),
106 ];
107
108 $revisionhtml = '';
109 if( $revisions = WPF()->revision->get_revisions( $args ) ) {
110 foreach( $revisions as $revision ) $revisionhtml .= WPF()->revision->Template->build_revision( $revision );
111 }
112
113 $revisions_count = count( $revisions );
114 $response = [
115 'revisions_count' => $revisions_count,
116 'revisionhtml' => $revisionhtml,
117 ];
118 if( $revisions_count ) {
119 wp_send_json_success( $response );
120 } else {
121 wp_send_json_error( $response );
122 }
123 }
124
125 public function ajax_get_revision() {
126 wpforo_verify_nonce( 'wpforo_get_revision' );
127 if( $revisionid = wpforo_bigintval( wpfval( $_POST, 'revisionid' ) ) ) {
128 if( $revision = WPF()->revision->get_revision(
129 [
130 'include' => $revisionid,
131 'userids_include' => WPF()->current_userid,
132 'emails_include' => WPF()->current_user_email,
133 ]
134 ) ) {
135 wp_send_json_success( $revision );
136 }
137 }
138 wp_send_json_error();
139 }
140
141 public function ajax_delete_revision() {
142 wpforo_verify_nonce( 'wpforo_delete_revision' );
143 if( $revisionid = wpforo_bigintval( wpfval( $_POST, 'revisionid' ) ) ) {
144 if( WPF()->revision->delete( [ 'revisionid' => $revisionid, 'userid' => WPF()->current_userid, 'email' => WPF()->current_user_email ] ) ) {
145 $args = [
146 // 'textareaids_include' => (string) wpfval( $_POST, 'textareaid' ),
147 'postids_include' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
148 'userids_include' => WPF()->current_userid,
149 'emails_include' => WPF()->current_user_email,
150 'urls_include' => WPF()->revision->get_current_url_query_vars_str(),
151 ];
152 $revisions_count = WPF()->revision->get_count( $args );
153 wp_send_json_success( compact( 'revisions_count' ) );
154 }
155 }
156 wp_send_json_error();
157 }
158
159 public function after_submit() {
160 WPF()->revision->delete( [ 'userid' => WPF()->current_userid, 'email' => WPF()->current_user_email, 'url' => WPF()->revision->get_current_url_query_vars_str() ] );
161 $sql = "SELECT EXISTS( SELECT * FROM " . WPF()->tables->post_revisions . " ) AS is_exists";
162 if( ! WPF()->db->get_var( $sql ) ) WPF()->db->query( "TRUNCATE " . WPF()->tables->post_revisions );
163 }
164 }
165