Helix_Website/wp-content/plugins/wpforo/wpf-includes/class-actions.php

2297 lines
83 KiB
PHP

<?php
// Exit if accessed directly
if( !defined( 'ABSPATH' ) ) exit;
class wpForoAction {
/**
* wpForoAction constructor.
*/
public function __construct() {
$this->init_hooks();
}
/**
* method for initializing all necessary hooks
*/
public function init_hooks(){
add_action( 'wpforo_after_init', array( $this, 'do_actions' ), 999 );
add_action( 'deleted_user', array( $this, 'user_delete' ) );
add_action('wp_ajax_wpforo_deactivate', array($this, 'deactivate'));
if( !wpforo_is_admin() ){
add_action( 'wpforo_actions', array($this, 'init_default_attach_hooks') );
add_action( 'wpforo_actions', array($this, 'init_wp_emoji_hooks') );
add_action( 'wpforo_actions', array($this, 'feed_rss2') );
add_action( 'wpforo_actions', array($this, 'ucf_file_delete') );
add_action( 'wpforo_actions', array($this, 'mark_all_read') );
add_action( 'wpforo_actions', array($this, 'mark_notification_read') );
add_action( 'wpforo_action_wpforo_registration', array($this, 'registration') );
add_action( 'wpforo_action_wpforo_login', array($this, 'login') );
add_action( 'wpforo_action_wpforo_profile_update', array($this, 'profile_update') );
add_action( 'wpforo_action_wpforo_topic_add', array($this, 'topic_add') );
add_action( 'wpforo_action_wpforo_topic_edit', array($this, 'topic_edit') );
add_action( 'wpforo_action_wpforo_topic_move', array($this, 'topic_move') );
add_action( 'wpforo_action_wpforo_topic_merge', array($this, 'topic_merge') );
add_action( 'wpforo_action_wpforo_topic_split', array($this, 'topic_split') );
add_action( 'wpforo_action_wpforo_post_add', array($this, 'post_add') );
add_action( 'wpforo_action_wpforo_post_edit', array($this, 'post_edit') );
add_action( 'wpforo_action_sbscrbconfirm', array($this, 'subscription_confirmation') );
add_action( 'wpforo_action_unsbscrb', array($this, 'subscription_delete') );
add_action( 'wpforo_action_wpforo_subscribe_manager', array($this, 'subscribe_manager') );
## ajax actions ##
add_action( 'wp_ajax_wpforo_dissmiss_recaptcha_note', array($this, 'dissmiss_recaptcha_note') );
add_action( 'wp_ajax_wpforo_acp_toggle', array($this, 'acp_toggle') );
add_action( 'wp_ajax_wpforo_clear_all_notifications', array($this, 'clear_all_notifications') );
}else{
add_action( 'wpforo_actions', array($this, 'check_dashboard_permissions'), 1 );
add_action( 'wpforo_actions', array($this, 'repair_lost_main_shortcode_page') );
add_action( 'wpforo_action_wpforo_synch_user_profiles', array($this, 'synch_user_profiles') );
add_action( 'wpforo_action_wpforo_reset_user_cache', array($this, 'reset_user_cache') );
add_action( 'wpforo_action_wpforo_reset_forums_stats', array($this, 'reset_forums_stats') );
add_action( 'wpforo_action_wpforo_reset_topics_stats', array($this, 'reset_topics_stats') );
add_action( 'wpforo_action_wpforo_reset_users_stats', array($this, 'reset_users_stats') );
add_action( 'wpforo_action_wpforo_rebuild_threads', array($this, 'rebuild_threads') );
add_action( 'wpforo_action_wpforo_reset_phrase_cache', array($this, 'reset_phrase_cache') );
add_action( 'wpforo_action_wpforo_recrawl_phrases', array($this, 'recrawl_phrases') );
add_action( 'wpforo_action_wpforo_add_new_xml_translation', array($this, 'add_new_xml_translation') );
add_action( 'wpforo_action_wpforo_dashboard_options_save', array($this, 'dashboard_options_save') );
add_action( 'wpforo_action_wpforo_general_options_save', array($this, 'general_options_save') );
add_action( 'wpforo_action_wpforo_forum_options_save', array($this, 'forum_options_save') );
add_action( 'wpforo_action_wpforo_post_options_save', array($this, 'post_options_save') );
add_action( 'wpforo_action_wpforo_member_options_save', array($this, 'member_options_save') );
add_action( 'wpforo_action_wpforo_features_options_save', array($this, 'features_options_save') );
add_action( 'wpforo_action_wpforo_api_options_save', array($this, 'api_options_save') );
add_action( 'wpforo_action_wpforo_theme_style_options_save', array($this, 'theme_style_options_save') );
add_action( 'wpforo_action_wpforo_colors_css_download', array($this, 'colors_css_download') );
add_action( 'wpforo_action_wpforo_email_options_save', array($this, 'email_options_save') );
add_action( 'wpforo_action_wpforo_antispam_options_save', array($this, 'antispam_options_save') );
add_action( 'wpforo_action_wpforo_cleanup_options_save', array($this, 'cleanup_options_save') );
add_action( 'wpforo_action_wpforo_misc_options_save', array($this, 'misc_options_save') );
add_action( 'wpforo_action_wpforo_legal_options_save', array($this, 'legal_options_save') );
add_action( 'wpforo_action_wpforo_delete_spam_file', array($this, 'delete_spam_file') );
add_action( 'wpforo_action_wpforo_delete_all_spam_files', array($this, 'delete_all_spam_files') );
add_action( 'wpforo_action_wpforo_database_update', array($this, 'database_update') );
add_action( 'wpforo_action_wpforo_forum_add', array($this, 'forum_add') );
add_action( 'wpforo_action_wpforo_forum_edit', array($this, 'forum_edit') );
add_action( 'wpforo_action_wpforo_forum_delete', array($this, 'forum_delete') );
add_action( 'wpforo_action_wpforo_forum_hierarchy_save', array($this, 'forum_hierarchy_save') );
add_action( 'wpforo_action_wpforo_dashboard_post_unapprove', array($this, 'dashboard_post_unapprove') );
add_action( 'wpforo_action_wpforo_dashboard_post_approve', array($this, 'dashboard_post_approve') );
add_action( 'wpforo_action_wpforo_dashboard_post_delete', array($this, 'dashboard_post_delete') );
add_action( 'wpforo_action_wpforo_bulk_moderation', array($this, 'bulk_moderation') );
add_action( 'wpforo_action_wpforo_phrase_add', array($this, 'phrase_add') );
add_action( 'wpforo_action_wpforo_phrase_edit_form', array($this, 'phrase_edit_form') );
add_action( 'wpforo_action_wpforo_phrase_edit', array($this, 'phrase_edit') );
add_action( 'wpforo_action_wpforo_user_ban', array($this, 'user_ban') );
add_action( 'wpforo_action_wpforo_user_unban', array($this, 'user_unban') );
add_action( 'wpforo_action_wpforo_bulk_members', array($this, 'bulk_members') );
add_action( 'wpforo_action_wpforo_usergroup_add', array($this, 'usergroup_add') );
add_action( 'wpforo_action_wpforo_usergroup_edit', array($this, 'usergroup_edit') );
add_action( 'wpforo_action_wpforo_usergroup_delete', array($this, 'usergroup_delete') );
add_action( 'wpforo_action_wpforo_default_groupid_change', array($this, 'default_groupid_change') );
add_action( 'wpforo_action_wpforo_usergroup_delete_form', array($this, 'usergroup_delete_form') );
add_action( 'wpforo_action_wpforo_access_add', array($this, 'access_add') );
add_action( 'wpforo_action_wpforo_access_edit', array($this, 'access_edit') );
add_action( 'wpforo_action_wpforo_access_delete', array($this, 'access_delete') );
add_action( 'wpforo_action_wpforo_theme_activate', array($this, 'theme_activate') );
add_action( 'wpforo_action_wpforo_theme_install', array($this, 'theme_install') );
add_action( 'wpforo_action_wpforo_theme_delete', array($this, 'theme_delete') );
add_action( 'wpforo_action_wpforo_theme_reset', array($this, 'theme_reset') );
add_action( 'wpforo_action_wpforo_update_addons_css', array($this, 'update_addons_css') );
add_action( 'wpforo_action_wpforo_dissmiss_poll_version_is_old', array($this, 'dissmiss_poll_version_is_old') );
}
add_action( 'wpforo_action_wpforo_reset_all_caches', array($this, 'reset_all_caches') );
}
/**
* wpforo main actions doing place
*/
public function do_actions(){
do_action( 'wpforo_actions' );
$wpforo_actions = array_unique( array_merge((array) wpfval($_POST, 'wpfaction'), (array) wpfval(WPF()->GET, 'wpfaction')) );
foreach ($wpforo_actions as $wpforo_action){
$wpforo_action = sanitize_title($wpforo_action);
do_action("wpforo_action_{$wpforo_action}");
}
do_action( 'wpforo_actions_end' );
}
/**
* init wpforo default attachments system when wpforo advanced attachments addon has not exists
*/
public function init_default_attach_hooks(){
add_action( 'delete_attachment', 'wpforo_delete_attachment', 10 );
if( has_action('wpforo_topic_form_extra_fields_after', array(WPF()->tpl, 'add_default_attach_input')) ){
add_filter( 'wpforo_add_topic_data_filter', 'wpforo_add_default_attachment' );
add_filter( 'wpforo_edit_topic_data_filter', 'wpforo_add_default_attachment' );
add_filter( 'wpforo_add_post_data_filter', 'wpforo_add_default_attachment' );
add_filter( 'wpforo_edit_post_data_filter', 'wpforo_add_default_attachment' );
add_filter( 'wpforo_body_text_filter', 'wpforo_default_attachments_filter');
}
}
/**
* init wp emojis when wpforo emoticons addon has not exists
*/
public function init_wp_emoji_hooks(){
if( !class_exists('wpForoSmiles') ){
add_filter('wpforo_body_text_filter', 'wp_encode_emoji', 9);
add_filter('wpforo_body_text_filter', 'convert_smilies');
}
}
/**
* get request_uri redirect to url with concatenation of &can_do=do
* @return bool true if you can do action now | false if you can not do action now
*/
private function can_do(){
if( wpfval($_GET, 'can_do') === 'do' ) return true;
$refresh_url = preg_replace('#&can_do=?[^=?&\r\n]*#isu', '', wpforo_get_request_uri() );
$refresh_url .= '&can_do=do';
header( "refresh:0.1;url=" . $refresh_url );
add_filter('wpforo_admin_loading', '__return_true');
return false;
}
/**
* @return string $u_action return union bulk action
*/
private function get_current_bulk_action(){
$u_action = '';
if( !empty($_GET['action']) && $_GET['action'] !== '-1' ){
$u_action = sanitize_textarea_field($_GET['action']);
}elseif( !empty($_GET['action2']) && $_GET['action2'] !== '-1' ){
$u_action = sanitize_textarea_field($_GET['action2']);
}
return $u_action;
}
/**
* catch if rss url show rss feed for given arguments
*/
public function feed_rss2() {
if( wpfval(WPF()->GET, 'type') === 'rss2' ){
$forum_rss_items = 10;
$topic_rss_items = 10;
$forumid = intval(wpfval(WPF()->GET, 'forum'));
if (!$forumid) {
$forum = array();
$forum['forumurl'] = wpforo_home_url();
$forum['title'] = '';
} else {
$forum = wpforo_forum( $forumid );
$forum['forumurl'] = $forum['url'];
}
if ( wpfval(WPF()->GET, 'topic') ) {
$topicid = intval(WPF()->GET['topic']);
if (!$topicid) {
$posts = WPF()->post->get_posts( array(
'row_count' => $topic_rss_items,
'orderby' => '`created` DESC, `postid` DESC',
'check_private' => true
) );
$topic['title'] = '';
$topic['topicurl'] = wpforo_home_url();
} else {
$topic = wpforo_topic( $topicid );
$topic['topicurl'] = ( $topic['url'] ) ? $topic['url'] : WPF()->topic->get_topic_url( $topicid );
$posts = WPF()->post->get_posts( array(
'topicid' => $topicid,
'row_count' => $topic_rss_items,
'orderby' => '`created` DESC, `postid` DESC',
'check_private' => true
) );
}
foreach ( $posts as $key => $post ) {
$member = wpforo_member( $post );
$posts[ $key ]['description'] = wpforo_text( trim( strip_tags( $post['body'] ) ), 190, false );
$posts[ $key ]['content'] = trim( $post['body'] );
$posts[ $key ]['posturl'] = WPF()->post->get_post_url( $post['postid'] );
$posts[ $key ]['author'] = $member['display_name'];
}
WPF()->feed->rss2_topic( $forum, $topic, $posts );
} else {
if ( !$forumid ) {
$topics = WPF()->topic->get_topics( array(
'row_count' => $forum_rss_items,
'orderby' => 'created',
'order' => 'DESC'
) );
} else {
$topics = WPF()->topic->get_topics( array(
'forumid' => $forumid,
'row_count' => $forum_rss_items,
'orderby' => 'created',
'order' => 'DESC'
) );
}
foreach ( $topics as $key => $topic ) {
$post = wpforo_post( $topic['first_postid'] );
$member = wpforo_member( $topic );
$topics[ $key ]['description'] = wpforo_text( trim( strip_tags( $post['body'] ) ), 190, false );
$topics[ $key ]['content'] = trim( $post['body'] );
$topics[ $key ]['topicurl'] = WPF()->topic->get_topic_url( $topic['topicid'] );
$topics[ $key ]['author'] = $member['display_name'];
}
WPF()->feed->rss2_forum( $forum, $topics );
}
exit();
}
}
/**
* ucf_file_delete delete /wp-content/uploads/UCFFILENAME
*/
public function ucf_file_delete() {
if( wpfval(WPF()->GET, 'foro_f') && wpfval(WPF()->GET, 'foro_u') && wpfval(WPF()->GET, 'foro_n') ){
if( wp_verify_nonce(WPF()->GET['foro_n'], 'wpforo_delete_profile_field') ){
$userid = intval( WPF()->GET['foro_u'] );
$field = sanitize_title( WPF()->GET['foro_f'] );
$wpudir = wp_upload_dir();
if( $file = WPF()->member->get_custom_field( $userid, $field ) ){
$file = $wpudir['basedir'] . $file;
$result = WPF()->member->update_custom_field( $userid, $field, '' );
if( $result ){
@unlink($file);
WPF()->phrase->clear_cache();
WPF()->notice->add('Deleted Successfully!', 'success');
} else {
WPF()->notice->clear();
WPF()->notice->add('Sorry, this file cannot be deleted', 'error');
}
}
}
}
}
/**
* mark all bold forum topics as read
*/
public function mark_all_read() {
if( wpfval(WPF()->GET, 'foro') === 'allread' ){
if( wpfval(WPF()->GET, 'foro_n') && wp_verify_nonce(WPF()->GET['foro_n'], 'wpforo_mark_all_read') ){
WPF()->log->mark_all_read();
$current_url = wpforo_get_request_uri();
$current_url = strtok( $current_url, '?');
wp_redirect($current_url);
exit();
}
}
}
/**
* Open/Close Frontend Admin CPanel
*/
public function acp_toggle() {
$toggle_status = wpfval($_POST, 'toggle_status');
if( in_array($toggle_status, array('open','close')) ){
update_user_meta(WPF()->current_userid, 'wpf-acp-toggle', $toggle_status);
echo 1;
}else{
echo 0;
}
exit();
}
/**
* set a notification read
*/
public function mark_notification_read(){
if( wpfval(WPF()->GET, '_nread') && is_user_logged_in() ){
if( wpfval(WPF()->GET, 'foro_n') && wp_verify_nonce(WPF()->GET['foro_n'], 'wpforo_mark_notification_read') ){
$id = intval( WPF()->GET['_nread'] );
WPF()->activity->read_notification( $id );
$current_url = wpforo_get_request_uri();
$current_url = strtok( $current_url, '?');
wp_redirect($current_url);
exit();
}
}
}
/**
* clear all notifications
*/
public function clear_all_notifications(){
if( wpfval($_POST, 'foro_n') && wp_verify_nonce($_POST['foro_n'], 'wpforo_clear_notifications') ){
WPF()->activity->clear_notifications();
echo WPF()->activity->get_no_notifications_html();
}
exit();
}
/**
* registration form submit action
*/
public function registration(){
if( !empty($_POST['wpfreg']) && $userid = WPF()->member->create($_POST) ){
wpforo_verify_form('ref');
WPF()->member->reset($userid);
if( WPF()->member->options['redirect_url_after_register'] ){
$redirect_url = WPF()->member->options['redirect_url_after_register'];
}elseif( is_wpforo_url() ){
$redirect_url = preg_replace('#\?.*$#is', '', wpforo_get_request_uri());
}else{
$redirect_url = ( wpforo_feature('user-register-email-confirm') ? wpforo_home_url() : WPF()->member->get_profile_url( $userid, 'account' ) );
}
wp_redirect($redirect_url);
exit();
}
}
/**
* login form submit action
*/
public function login(){
if(isset($_POST['wpforologin']) && isset($_POST['log']) && isset($_POST['pwd'])){
wpforo_verify_form('ref');
if ( !is_wp_error( $user = wp_signon() ) ) {
$wpf_login_times = intval( get_user_meta($user->ID, '_wpf_login_times', true) );
if( isset($user->ID) && $wpf_login_times >= 1) {
$name = ( isset($user->data->display_name) ) ? $user->data->display_name : '';
WPF()->notice->add( 'Welcome back %s!', 'success', $name);
}
else{
WPF()->notice->add('Welcome to our Community!', 'success');
}
$wpf_login_times++;
update_user_meta( $user->ID, '_wpf_login_times', $wpf_login_times );
if( WPF()->member->options['redirect_url_after_login'] ){
$redirect_url = WPF()->member->options['redirect_url_after_login'];
}elseif( is_wpforo_url() ){
$redirect_url = preg_replace('#\?.*$#is', '', wpforo_get_request_uri());
}else{
$redirect_url = wpforo_home_url();
}
wp_redirect($redirect_url);
exit();
}else{
$args = array();
foreach($user->errors as $u_err) $args[] = $u_err[0];
WPF()->notice->add($args, 'error');
wp_redirect( wpforo_get_request_uri() );
exit();
}
}
}
/**
* profile_update form submit action
*/
public function profile_update(){
if( wpfval($_POST, 'member', 'userid') ){
wpforo_verify_form();
$uid = intval($_POST['member']['userid']);
if( !( $uid === WPF()->current_userid ||
( WPF()->perm->usergroup_can('em') && WPF()->perm->user_can_manage_user( WPF()->current_userid, $uid )) ) ){
WPF()->notice->clear();
WPF()->notice->add('Permission denied', 'error');
wp_redirect(wpforo_get_request_uri());
exit();
}
if( $user = WPF()->member->update($_POST) ){
$uid = ( wpfval($user, 'user_nicename') ) ? $user['user_nicename'] : $uid;
if( $profile_url = WPF()->member->get_profile_url( $uid, 'account') ){
wp_redirect($profile_url);
exit();
}
}
}
wp_redirect(wpforo_get_request_uri());
exit();
}
/**
* topic_add form submit action
*/
public function topic_add(){
wpforo_verify_form();
$args = $_REQUEST['topic'];
$args['postmetas'] = (array) wpfval($_REQUEST, 'data');
if( $topicid = WPF()->topic->add($args) ){
wp_redirect( WPF()->topic->get_topic_url($topicid) );
exit();
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* topic_edit form submit action
*/
public function topic_edit(){
wpforo_verify_form();
$args = $_REQUEST['topic'];
$args['postmetas'] = (array) wpfval($_REQUEST, 'data');
if( $topicid = WPF()->topic->edit($args) ){
wp_redirect( WPF()->topic->get_topic_url($topicid) );
exit();
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* post_add form submit action
*/
public function post_add(){
wpforo_verify_form();
$args = $_REQUEST['post'];
$args['postmetas'] = (array) wpfval($_REQUEST, 'data');
if( $postid = WPF()->post->add($args) ){
wp_redirect( WPF()->post->get_post_url( $postid ) );
exit();
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* post_edit form submit action
*/
public function post_edit(){
wpforo_verify_form();
$args = $_REQUEST['post'];
$args['postmetas'] = (array) wpfval($_REQUEST, 'data');
if( $postid = WPF()->post->edit($args) ){
wp_redirect( WPF()->post->get_post_url( $postid ) );
exit();
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* topic_move form submit action
*/
public function topic_move(){
if( !empty($_POST['topic_move']) ){
wpforo_verify_form();
$topicid = intval( wpfval($_POST['topic_move'], 'topicid') );
$forumid = intval( wpfval($_POST['topic_move'], 'forumid') );
if( $topicid && $forumid ){
WPF()->topic->move($topicid, $forumid);
wp_redirect( WPF()->topic->get_topic_url($topicid) );
exit();
}
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* topic_merge form submit action
*/
public function topic_merge(){
wpforo_verify_form();
$redirect_to = wpforo_get_request_uri();
if( WPF()->current_object['topic'] && !empty($_POST['wpforo']) && !empty($_POST['wpforo']['target_topic_url']) ){
$target_slug = esc_url($_POST['wpforo']['target_topic_url']);
if( preg_match('#^[\r\n\t\s]*https?://[^\r\n\t\s]+?/[^/]+?/([^/]+?)(?:/'. wpforo_get_template_slug('paged') .'/\d+/?)?(?:/?\#post-\d+)?/?[\r\n\t\s]*$#isu', $target_slug, $match) ){
if( is_wpforo_url($target_slug) ) $target_slug = $match[1];
}
if ( strpos($target_slug, '/') === false && $target = WPF()->topic->get_topic($target_slug) ){
$append = (empty($_POST['wpforo']['update_date_and_append']) ? 0 : 1);
$to_target_title = (empty($_POST['wpforo']['to_target_title']) ? 0 : 1);
if( WPF()->topic->merge( WPF()->current_object['topic'], $target, array(), $to_target_title, $append ) )
$redirect_to = WPF()->topic->get_topic_url($target);
}else{
WPF()->notice->add('Target Topic not found', 'error');
}
}
wp_redirect($redirect_to);
exit();
}
/**
* topic_split form submit action
*/
public function topic_split(){
wpforo_verify_form();
$redirect_to = wpforo_get_request_uri();
if( WPF()->current_object['topic'] && !empty($_POST['wpforo']) ){
if( !empty($_POST['wpforo']['create_new']) ){
$args = array(
'title' => sanitize_text_field( $_POST['wpforo']['new_topic_title']),
'forumid' => intval( $_POST['wpforo']['new_topic_forumid']),
'postids' => array_map( 'intval', $_POST['wpforo']['posts'] )
);
$to_target_title = (empty($_POST['wpforo']['to_target_title']) ? 0 : 1);
if( $topicid = WPF()->topic->split($args, $to_target_title) )
$redirect_to = WPF()->topic->get_topic_url($topicid);
}else{
if( !empty($_POST['wpforo']['target_topic_url']) && !empty($_POST['wpforo']['posts']) ){
$target_slug = esc_url( $_POST['wpforo']['target_topic_url'] );
if( preg_match('#^[\r\n\t\s]*https?://[^\r\n\t\s]+?/[^/]+?/([^/]+?)(?:/'. wpforo_get_template_slug('paged') .'/\d+/?)?(?:/?\#post-\d+)?/?[\r\n\t\s]*$#isu', $target_slug, $match) )
if( is_wpforo_url($target_slug) ) $target_slug = $match[1];
if ( strpos($target_slug, '/') === false && $target = WPF()->topic->get_topic($target_slug) ){
$append = (empty($_POST['wpforo']['update_date_and_append']) ? 0 : 1);
$to_target_title = (empty($_POST['wpforo']['to_target_title']) ? 0 : 1);
$posts = array_map( 'intval', $_POST['wpforo']['posts']);
if( WPF()->topic->merge( WPF()->current_object['topic'], $target, $posts, $to_target_title, $append ) )
$redirect_to = WPF()->topic->get_topic_url($target);
}else{
WPF()->notice->add('Target Topic not found', 'error');
}
}
}
}
wp_redirect($redirect_to);
exit();
}
/**
* subscription_confirmation form submit action
*/
public function subscription_confirmation(){
if( $sbs_key = wpfval(WPF()->GET, 'key') ){
$sbs_key = sanitize_text_field($sbs_key);
WPF()->sbscrb->edit($sbs_key);
$redirect_url = wpforo_home_url( preg_replace('#\?.*$#is', '', WPF()->current_url) );
if( WPF()->member->options['redirect_url_after_confirm_sbscrb'] ) $redirect_url = WPF()->member->options['redirect_url_after_confirm_sbscrb'];
wp_redirect($redirect_url);
exit();
}
}
/**
* subscription_delete form submit action
*/
public function subscription_delete(){
if( $sbs_key = wpfval(WPF()->GET, 'key') ){
$sbs_key = sanitize_text_field($sbs_key);
WPF()->sbscrb->delete($sbs_key);
$redirect_url = wpforo_home_url( preg_replace('#\?.*$#is', '', WPF()->current_url) );
if( WPF()->member->options['redirect_url_after_confirm_sbscrb'] ) $redirect_url = WPF()->member->options['redirect_url_after_confirm_sbscrb'];
wp_redirect($redirect_url);
exit();
}
}
/**
* subscribe_manager form submit action
*/
public function subscribe_manager(){
$data = ( !empty($_POST['wpforo']['forums']) ? array_map( 'sanitize_title', $_POST['wpforo']['forums'] ) : array() );
$all = ( !empty($_POST['wpforo']['check_all']) ? sanitize_title($_POST['wpforo']['check_all']) : '' );
WPF()->sbscrb->reset($data, $all);
wp_redirect( wpforo_home_url(wpforo_get_template_slug('subscriptions')) );
exit();
}
/**
* action to synchronize wp_users to wp_wpforo_profiles
*/
public function synch_user_profiles(){
check_admin_referer( 'wpforo_synch_user_profiles' );
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $this->can_do() ){
wpforo_set_max_execution_time();
wp_raise_memory_limit();
if( WPF()->member->synchronize_users( apply_filters('wpforo_rebuild_per_request', 200) ) ){
WPF()->member->clear_db_cache();
wpforo_clean_cache();
WPF()->notice->add('Synched Successfully!', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
}else{
wp_redirect( htmlspecialchars_decode( wp_nonce_url( admin_url( 'admin.php?page=wpforo-community&wpfaction=wpforo_synch_user_profiles' ), 'wpforo_synch_user_profiles' ) ) );
}
exit();
}
}
/**
* reset user caches
*/
public function reset_user_cache(){
check_admin_referer('wpforo_reset_user_cache');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time();
wp_raise_memory_limit();
WPF()->member->clear_db_cache();
WPF()->notice->add('Deleted Successfully!', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
exit();
}
/**
* rebuild forums statistics first|last posts etc.
*/
public function reset_forums_stats(){
check_admin_referer('wpforo_reset_forums_stat');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time();
wp_raise_memory_limit();
$forumids = WPF()->db->get_col("SELECT `forumid` FROM ".WPF()->tables->forums." WHERE `is_cat` = 0 ORDER BY `forumid` ASC");
if(!empty($forumids)){
foreach($forumids as $forumid){
WPF()->forum->rebuild_stats($forumid);
}
WPF()->db->query("DELETE FROM `" . WPF()->db->options."` WHERE `option_name` LIKE 'wpforo_stat%'" );
WPF()->forum->delete_tree_cache();
WPF()->notice->add('Updated Successfully!', 'success');
}
wp_redirect(admin_url('admin.php?page=wpforo-community'));
exit();
}
/**
* rebuild topics statistics first|last posts etc.
*/
public function reset_topics_stats(){
check_admin_referer( 'wpforo_reset_topics_stat' );
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $this->can_do() ){
wpforo_set_max_execution_time();
wp_raise_memory_limit();
$lastid = (int) wpfval($_GET, 'topic_lastid');
$sql = "SELECT `topicid` FROM ".WPF()->tables->topics." WHERE `topicid` > %d ORDER BY `topicid` ASC LIMIT %d";
$topicids = WPF()->db->get_col( WPF()->db->prepare($sql, $lastid, apply_filters('wpforo_rebuild_per_request', 200)) );
if( $topicids ){
foreach($topicids as $topicid){
$topic = WPF()->topic->get_topic($topicid);
WPF()->topic->rebuild_first_last($topic);
WPF()->topic->rebuild_stats($topic);
}
wp_redirect( htmlspecialchars_decode( wp_nonce_url( admin_url( 'admin.php?page=wpforo-community&wpfaction=wpforo_reset_topics_stats&topic_lastid=' . end($topicids) ), 'wpforo_reset_topics_stat' ) ) );
}else{
@WPF()->db->query( "UPDATE `".WPF()->tables->topics."` t
INNER JOIN `".WPF()->tables->posts."` p ON p.`topicid` = t.`topicid` AND p.`is_answer` = 1
SET t.`solved` = 1
WHERE t.`solved` = 0" );
WPF()->db->query("DELETE FROM `" . WPF()->db->options."` WHERE `option_name` LIKE 'wpforo_stat%'" );
WPF()->notice->add('Updated Successfully!', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
}
exit();
}
}
/**
* rebuild users statistics etc.
*/
public function reset_users_stats(){
check_admin_referer('wpforo_reset_users_stat');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $this->can_do() ){
wpforo_set_max_execution_time();
wp_raise_memory_limit();
$lastid = (int) wpfval($_GET, 'user_lastid');
$sql = "SELECT `userid` FROM ".WPF()->tables->profiles." WHERE `userid` > %d ORDER BY `userid` ASC LIMIT %d";
$userids = WPF()->db->get_col( WPF()->db->prepare($sql, $lastid, apply_filters('wpforo_rebuild_per_request', 200)) );
if($userids){
foreach($userids as $userid){
$posts = WPF()->member->get_replies_count( $userid );
$answers = WPF()->member->get_answers_count( $userid );
$questions = WPF()->member->get_questions_count( $userid );
$comments = WPF()->member->get_question_comments_count( $userid );
WPF()->db->update(
WPF()->tables->profiles,
array(
'posts' => $posts,
'answers' => $answers,
'questions' => $questions,
'comments' => $comments
),
array('userid' => $userid),
array('%d','%d','%d','%d'),
array('%d')
);
}
wp_redirect( htmlspecialchars_decode( wp_nonce_url( admin_url( 'admin.php?page=wpforo-community&wpfaction=wpforo_reset_users_stats&user_lastid=' . end($userids) ), 'wpforo_reset_users_stat' ) ) );
}else{
WPF()->notice->add('Updated Successfully!', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
}
exit();
}
}
/**
* rebuild 4 layout forum topics threads root
*/
public function rebuild_threads(){
check_admin_referer('wpforo_rebuild_threads');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time(3600);
wp_raise_memory_limit();
WPF()->topic->rebuild_forum_threads();
wpforo_clean_cache();
WPF()->notice->add('Threads rebuilt successfully', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
exit();
}
/**
* reset phrases cache from db
*/
public function reset_phrase_cache(){
check_admin_referer('wpforo_reset_phrase_cache');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time();
wp_raise_memory_limit();
WPF()->phrase->clear_cache();
WPF()->notice->add('Deleted Successfully!', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
exit();
}
/**
* recrawling phrases from all wpforo, wpforo-addons code files
*/
public function recrawl_phrases(){
check_admin_referer('wpforo_recrawl_phrases');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time();
wp_raise_memory_limit();
WPF()->phrase->crawl_phrases();
WPF()->phrase->clear_cache();
WPF()->notice->clear();
WPF()->notice->add('Rebuilt Successfully!', 'success');
wp_redirect(admin_url('admin.php?page=wpforo-community'));
exit();
}
/**
* reset wpforo all caches (phrase, user, forum, post, stats) etc.
*/
public function reset_all_caches(){
check_admin_referer('wpforo_reset_cache');
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time();
wp_raise_memory_limit();
WPF()->phrase->clear_cache();
WPF()->member->clear_db_cache();
wpforo_clean_cache();
WPF()->notice->add('Deleted Successfully!', 'success');
$redirect = ( is_admin() ) ? admin_url('admin.php?page=wpforo-community') : wpforo_home_url();
wp_redirect( $redirect );
exit();
}
/**
* dashboard_options_save form submit action
*/
public function dashboard_options_save(){
if(!current_user_can('administrator')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $dashboard_count_per_page = (int) wpfval($_POST, 'wpforo_dashboard_count_per_page') ){
update_option('wpforo_count_per_page', $dashboard_count_per_page );
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* checking accesses to forum admin menu pages settings etc...
*/
public function check_dashboard_permissions(){
$page = wpfval(WPF()->GET, 'page');
if( $page === 'wpforo-settings' ){
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
}
}
/**
* check if [wpforo] page has been deleted, restore or create new [wpforo] page
*/
public function repair_lost_main_shortcode_page(){
if( in_array( wpfval(WPF()->GET, 'page'), array('wpforo-community', 'wpforo-settings') ) ){
$sql = "SELECT `ID` FROM `".WPF()->db->posts."`
WHERE `ID` = ".intval(WPF()->pageid)."
AND `post_content` LIKE '%[wpforo%'
AND `post_status` LIKE 'publish'
AND `post_type` IN('". implode("','", wpforo_get_blog_content_types()) ."')";
if( !WPF()->pageid || !WPF()->db->get_var($sql) ){
wpforo_create_forum_page();
}
}
}
/**
* general_options_save from submit action
*/
public function general_options_save(){
check_admin_referer( 'wpforo-settings-general' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if ( !wpfkey( $_POST, 'reset' ) ) {
if ( isset( $_POST['wpforo_use_home_url'] ) && $_POST['wpforo_use_home_url'] ) {
$wpforo_use_home_url = 1;
if ( isset($_POST['wpforo_excld_urls']) ) {
update_option( 'wpforo_excld_urls', sanitize_textarea_field( $_POST['wpforo_excld_urls'] ) );
}
} else {
$wpforo_use_home_url = 0;
}
update_option( 'wpforo_use_home_url', $wpforo_use_home_url );
if ( isset( $_POST['wpforo_url'] ) && $permastruct = utf8_uri_encode( $_POST['wpforo_url'] ) ) {
$permastruct = preg_replace( '#^/?index\.php/?#isu', '', trim($permastruct) );
if( $permastruct = trim( $permastruct, '/' ) ){
if ( update_option( 'wpforo_url', esc_url( home_url( $permastruct ) ) )
&& update_option( 'wpforo_permastruct', $permastruct ) ) {
WPF()->notice->add( 'Forum Base URL successfully updated', 'success' );
} else {
WPF()->notice->add( 'Successfully updated', 'success' );
}
WPF()->permastruct = $permastruct;
flush_rewrite_rules( false );
nocache_headers();
}
}
if ( $wpforo_use_home_url == 0 && ! isset( $_POST['wpforo_url'] ) ) {
WPF()->permastruct = trim( get_wpf_option( 'wpforo_permastruct' ), '/\\' );
WPF()->permastruct = preg_replace( '#^/?index\.php/?#isu', '', WPF()->permastruct );
WPF()->permastruct = trim( WPF()->permastruct, '/\\' );
WPF()->pageid = get_wpf_option( 'wpforo_pageid' );
flush_rewrite_rules( false );
nocache_headers();
}
$general_options = array(
'title' => sanitize_text_field( stripslashes($_POST['wpforo_general_options']['title']) ),
'description' => sanitize_text_field( stripslashes($_POST['wpforo_general_options']['description']) ),
'menu_position' => intval( $_POST['wpforo_general_options']['menu_position'] ),
'lang' => intval( $_POST['wpforo_general_options']['lang'] )
);
if ( update_option( 'wpforo_general_options', $general_options ) ) {
WPF()->notice->add( 'General options successfully updated', 'success' );
} else {
WPF()->notice->add( 'Successfully updated', 'success' );
}
if ( ! empty( $_POST['wpforo_tpl_slugs'] ) ) {
$wpforo_tpl_slugs = array_filter( array_map( 'sanitize_title', $_POST['wpforo_tpl_slugs'] ) );
$wpforo_tpl_slugs = array_merge( WPF()->tpl->slugs, $wpforo_tpl_slugs );
$wpforo_tpl_slugs = array_intersect_key($wpforo_tpl_slugs, WPF()->tpl->default->slugs);
if ( $wpforo_tpl_slugs == array_unique( $wpforo_tpl_slugs ) ) {
update_option( 'wpforo_tpl_slugs', $wpforo_tpl_slugs );
} else {
WPF()->notice->add( 'Please save "Forum template slugs" uniqueness', 'error' );
}
}
}else{
delete_option( 'wpforo_excld_urls' );
delete_option( 'wpforo_use_home_url' );
delete_option( 'wpforo_url' );
delete_option( 'wpforo_permastruct' );
delete_option( 'wpforo_general_options' );
delete_option( 'wpforo_tpl_slugs' );
WPF()->notice->add( 'General options reset successfully', 'success' );
}
WPF()->member->clear_db_cache();
wpforo_clean_cache();
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=general' ) );
exit();
}
/**
* add_new_xml_translation form submit action
*/
public function add_new_xml_translation(){
check_admin_referer( 'wpforo-settings-language' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_FILES['add_lang']) ){
WPF()->phrase->add_lang();
wpforo_clean_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=general' ) );
exit();
}
/**
* forum_options_save form submit action
*/
public function forum_options_save(){
check_admin_referer( 'wpforo-settings-forums' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['wpforo_forum_options']) ){
if ( !wpfkey( $_POST, 'reset' ) ) {
if ( update_option( 'wpforo_forum_options', array_map( 'intval', $_POST['wpforo_forum_options'] ) ) ) {
WPF()->notice->add( 'Forum options successfully updated', 'success' );
} else {
WPF()->notice->add( 'Forum options successfully updated, but previous value not changed', 'success' );
}
} else {
delete_option( 'wpforo_forum_options' );
WPF()->notice->add( 'Forum options reset successfully', 'success' );
}
wpforo_clean_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=forums' ) );
exit();
}
/**
* post_options_save form submit action
*/
public function post_options_save(){
check_admin_referer( 'wpforo-settings-posts' );
if( !WPF()->perm->usergroup_can('ms') ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( isset($_POST['wpforo_post_options']) && isset($_POST['wpforo_form_options']) && isset($_POST['wpforo_revision_options']) ){
if( !wpfkey( $_POST, 'reset' ) ){
$_POST['wpforo_post_options']['eot_durr'] = intval( $_POST['wpforo_post_options']['eot_durr'] ) * 60;
$_POST['wpforo_post_options']['dot_durr'] = intval( $_POST['wpforo_post_options']['dot_durr'] ) * 60;
$_POST['wpforo_post_options']['eor_durr'] = intval( $_POST['wpforo_post_options']['eor_durr'] ) * 60;
$_POST['wpforo_post_options']['dor_durr'] = intval( $_POST['wpforo_post_options']['dor_durr'] ) * 60;
$_POST['wpforo_post_options']['max_upload_size'] = intval( wpforo_human_size_to_bytes( $_POST['wpforo_post_options']['max_upload_size'] . 'M' ) );
$_POST['wpforo_post_options']['attach_cant_view_msg'] = wp_unslash( $_POST['wpforo_post_options']['attach_cant_view_msg'] );
update_option( 'wpforo_post_options', $_POST['wpforo_post_options'] );
update_option('wpforo_form_options', $_POST['wpforo_form_options']);
update_option('wpforo_revision_options', $_POST['wpforo_revision_options']);
WPF()->notice->add( 'Post options successfully updated', 'success' );
}else{
delete_option( 'wpforo_post_options' );
delete_option( 'wpforo_form_options' );
delete_option( 'wpforo_revision_options' );
WPF()->notice->add( 'Post options reset successfully', 'success' );
}
wpforo_clean_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=posts' ) );
exit();
}
/**
* member_options_save form submit action
*/
public function member_options_save(){
check_admin_referer( 'wpforo-settings-members' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( isset($_POST['wpforo_member_options']) ){
if( !wpfkey( $_POST, 'reset' ) ){
$_POST['wpforo_member_options']['online_status_timeout'] = intval( wpfval($_POST['wpforo_member_options'], 'online_status_timeout') ) * 60;
$_POST['wpforo_member_options']['url_structure'] = sanitize_title( (string) wpfval($_POST['wpforo_member_options'], 'url_structure') );
$_POST['wpforo_member_options']['search_type'] = sanitize_title( (string) wpfval($_POST['wpforo_member_options'], 'search_type') );
$_POST['wpforo_member_options']['login_url'] = esc_url_raw( (string) wpfval($_POST['wpforo_member_options'], 'login_url') );
$_POST['wpforo_member_options']['register_url'] = esc_url_raw( (string) wpfval($_POST['wpforo_member_options'], 'register_url') );
$_POST['wpforo_member_options']['lost_password_url'] = esc_url_raw( (string) wpfval($_POST['wpforo_member_options'], 'lost_password_url') );
$_POST['wpforo_member_options']['redirect_url_after_login'] = esc_url_raw( (string) wpfval($_POST['wpforo_member_options'], 'redirect_url_after_login') );
$_POST['wpforo_member_options']['redirect_url_after_register'] = esc_url_raw( (string) wpfval($_POST['wpforo_member_options'], 'redirect_url_after_register') );
$_POST['wpforo_member_options']['redirect_url_after_confirm_sbscrb'] = esc_url_raw( (string) wpfval($_POST['wpforo_member_options'], 'redirect_url_after_confirm_sbscrb') );
$_POST['wpforo_member_options']['custom_title_is_on'] = intval( wpfval($_POST['wpforo_member_options'], 'custom_title_is_on') );
$_POST['wpforo_member_options']['default_title'] = sanitize_text_field( (string) wpfval($_POST['wpforo_member_options'], 'default_title') );
$_POST['wpforo_member_options']['rating_title_ug'] = array_map( 'intval', (array) wpfval($_POST['wpforo_member_options'], 'rating_title_ug') );
$_POST['wpforo_member_options']['rating_badge_ug'] = array_map( 'intval', (array) wpfval($_POST['wpforo_member_options'], 'rating_badge_ug') );
$_POST['wpforo_member_options']['title_usergroup'] = array_map( 'intval', (array) wpfval($_POST['wpforo_member_options'], 'title_usergroup') );
$_POST['wpforo_member_options']['title_second_usergroup'] = array_map( 'intval', (array) wpfval($_POST['wpforo_member_options'], 'title_second_usergroup') );
if( !empty($_POST['wpforo_member_options']['rating']) ){
foreach ( $_POST['wpforo_member_options']['rating'] as $key => $rating ) {
$_POST['wpforo_member_options']['rating'][ $key ] = array_map( 'sanitize_text_field', (array) $rating );
$_POST['wpforo_member_options']['rating'][ $key ]['points'] = intval( wpfval($rating, 'points') );
}
}
if ( update_option( 'wpforo_member_options', $_POST['wpforo_member_options'] ) ) {
WPF()->notice->add( 'Member options successfully updated', 'success' );
} else {
WPF()->notice->add( 'Member options successfully updated, but previous value not changed', 'success' );
}
}else{
delete_option( 'wpforo_member_options' );
$exlude = array( 'rating_title_ug', 'rating_badge_ug' );
wpforo_update_options( 'wpforo_member_options', WPF()->member->default->options, $exlude );
WPF()->notice->add( 'Member options reset successfully', 'success' );
}
wpforo_clean_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=members' ) );
exit();
}
/**
* features_options_save form submit action
*/
public function features_options_save(){
check_admin_referer( 'wpforo-features' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( isset($_POST['wpforo_features']) ){
if ( !wpfkey( $_POST, 'reset' ) ) {
if ( update_option( 'wpforo_features', array_map( 'intval', $_POST['wpforo_features'] ) ) ) {
WPF()->notice->add( 'Features successfully updated', 'success' );
} else {
WPF()->notice->add( 'Features successfully updated, but previous value not changed', 'success' );
}
} else {
delete_option( 'wpforo_features' );
WPF()->notice->add( 'Features reset successfully', 'success' );
}
wpforo_clean_cache();
WPF()->seo->clear_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=features' ) );
exit();
}
/**
* api_options_save form submit action
*/
public function api_options_save(){
check_admin_referer( 'wpforo-settings-api' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( isset($_POST['wpforo_api_options']) ){
if( !wpfkey( $_POST, 'reset' ) ){
if ( update_option( 'wpforo_api_options', $_POST['wpforo_api_options'] ) ) {
WPF()->notice->add( 'API options successfully updated', 'success' );
} else {
WPF()->notice->add( 'API options successfully updated, but previous value not changed', 'success' );
}
}else{
delete_option( 'wpforo_api_options' );
WPF()->notice->add( 'API options reset successfully', 'success' );
}
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=api' ) );
exit();
}
/**
* theme_style_options_save form submit action
*/
public function theme_style_options_save(){
check_admin_referer( 'wpforo-settings-styles' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( isset($_POST['wpforo_theme_options']) && isset($_POST['wpforo_style_options']) ){
if( !wpfkey( $_POST, 'reset' ) ){
//Theme Options//////////////////////////////////////////////////////////////////////
$_POST['wpforo_theme_options']['style'] = sanitize_title($_POST['wpforo_theme_options']['style']);
foreach($_POST['wpforo_theme_options']['styles'] as $key => $rating){
$_POST['wpforo_theme_options']['styles'][$key] = array_map('sanitize_text_field', $rating);
}
WPF()->tpl->options['style'] = sanitize_text_field($_POST['wpforo_theme_options']['style']);
WPF()->tpl->options['styles'] = $_POST['wpforo_theme_options']['styles'];
//Style Options/////////////////////////////////////////////////////////////////////
$_POST['wpforo_style_options']['font_size_forum'] = intval($_POST['wpforo_style_options']['font_size_forum']);
$_POST['wpforo_style_options']['font_size_topic'] = intval($_POST['wpforo_style_options']['font_size_topic']);
$_POST['wpforo_style_options']['font_size_post_content'] = intval($_POST['wpforo_style_options']['font_size_post_content']);
$_POST['wpforo_style_options']['custom_css'] = sanitize_textarea_field($_POST['wpforo_style_options']['custom_css']);
////////////////////////////////////////////////////////////////////////////////////
update_option('wpforo_style_options', $_POST['wpforo_style_options']);
update_option('wpforo_theme_options', WPF()->tpl->options);
WPF()->notice->add('Theme options successfully updated', 'success');
}else{
delete_option( 'wpforo_style_options' );
delete_option( 'wpforo_theme_options' );
WPF()->notice->add( 'Theme options reset successfully', 'success' );
}
wpforo_clean_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=styles' ) );
exit();
}
/**
* colors.css download action
*/
public function colors_css_download(){
check_admin_referer('dynamic_css_download');
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$dynamic_css = WPF()->tpl->generate_dynamic_css();
header('Content-Type: application/download');
header('Content-Disposition: attachment; filename="colors.css"');
header('Content-Transfer-Encoding: binary');
header("Content-Length: " . strlen($dynamic_css));
echo $dynamic_css;
exit();
}
/**
* email_options_save form submit action
*/
public function email_options_save(){
check_admin_referer( 'wpforo-settings-emails' );
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $options = wpfval($_POST, 'wpforo_email_options') ){
if( !wpfkey( $_POST, 'reset' ) ){
$options['from_name'] = sanitize_text_field( $options['from_name'] );
$options['from_email'] = sanitize_text_field( $options['from_email'] );
$options['admin_emails'] = sanitize_text_field( $options['admin_emails'] );
$options['new_topic_notify'] = intval( $options['new_topic_notify'] );
$options['new_reply_notify'] = intval( $options['new_reply_notify'] );
$options['confirmation_email_subject'] = sanitize_text_field( $options['confirmation_email_subject'] );
$options['confirmation_email_message'] = wpforo_kses( $options['confirmation_email_message'], 'email' );
$options['new_topic_notification_email_subject'] = sanitize_text_field( $options['new_topic_notification_email_subject'] );
$options['new_topic_notification_email_message'] = wpforo_kses( $options['new_topic_notification_email_message'], 'email' );
$options['new_post_notification_email_subject'] = sanitize_text_field( $options['new_post_notification_email_subject'] );
$options['new_post_notification_email_message'] = wpforo_kses( $options['new_post_notification_email_message'], 'email' );
$options['report_email_subject'] = sanitize_text_field( $options['report_email_subject'] );
$options['report_email_message'] = wpforo_kses( $options['report_email_message'], 'email' );
$options['overwrite_new_user_notification_admin'] = intval( $options['overwrite_new_user_notification_admin'] );
$options['wp_new_user_notification_email_admin_subject'] = sanitize_text_field( $options['wp_new_user_notification_email_admin_subject'] );
$options['wp_new_user_notification_email_admin_message'] = wpforo_kses( $options['wp_new_user_notification_email_admin_message'], 'email' );
$options['overwrite_new_user_notification'] = intval( $options['overwrite_new_user_notification'] );
$options['wp_new_user_notification_email_subject'] = sanitize_text_field( $options['wp_new_user_notification_email_subject'] );
$options['wp_new_user_notification_email_message'] = wpforo_kses( $options['wp_new_user_notification_email_message'], 'email' );
$options['overwrite_reset_password_email_message'] = intval( $options['overwrite_reset_password_email_message'] );
$options['reset_password_email_message'] = wpforo_kses( $options['reset_password_email_message'], 'email' );
$options['user_mention_notify'] = intval( $options['user_mention_notify'] );
$options['user_mention_email_subject'] = sanitize_text_field( $options['user_mention_email_subject'] );
$options['user_mention_email_message'] = wpforo_kses( $options['user_mention_email_message'], 'email' );
if ( update_option( 'wpforo_subscribe_options', $options ) ) {
WPF()->notice->add( 'Email options successfully updated', 'success' );
} else {
WPF()->notice->add( 'Email options successfully updated, but previous value not changed', 'success' );
}
}else{
delete_option( 'wpforo_subscribe_options' );
WPF()->notice->add( 'Email options reset successfully', 'success' );
}
wpforo_clean_cache();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=emails' ) );
exit();
}
/**
* antispam_options_save form submit action
*/
public function antispam_options_save(){
check_admin_referer( 'wpforo-tools-antispam' );
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if ( ! wpfkey( $_POST, 'reset' ) ) {
if ( $options = wpfval( $_POST, 'wpforo_tools_antispam' ) ) {
$options['spam_filter'] = intval( $options['spam_filter'] );
$options['spam_user_ban'] = intval( $options['spam_user_ban'] );
$options['spam_user_ban_notification'] = intval( $options['spam_user_ban_notification'] );
$options['spam_filter_level_topic'] = intval( $options['spam_filter_level_topic'] );
$options['spam_filter_level_post'] = intval( $options['spam_filter_level_post'] );
$options['new_user_max_posts'] = intval( $options['new_user_max_posts'] );
$options['min_number_post_to_attach'] = intval( $options['min_number_post_to_attach'] );
$options['min_number_post_to_link'] = intval( $options['min_number_post_to_link'] );
$options['limited_file_ext'] = sanitize_textarea_field( $options['limited_file_ext'] );
$options['rc_site_key'] = sanitize_text_field( $options['rc_site_key'] );
$options['rc_secret_key'] = sanitize_text_field( $options['rc_secret_key'] );
$options['rc_theme'] = sanitize_text_field( $options['rc_theme'] );
$options['rc_topic_editor'] = intval( $options['rc_topic_editor'] );
$options['rc_post_editor'] = intval( $options['rc_post_editor'] );
$options['rc_wpf_login_form'] = intval( $options['rc_wpf_login_form'] );
$options['rc_wpf_reg_form'] = intval( $options['rc_wpf_reg_form'] );
$options['rc_wpf_lostpass_form'] = intval( $options['rc_wpf_lostpass_form'] );
$options['rc_login_form'] = intval( $options['rc_login_form'] );
$options['rc_reg_form'] = intval( $options['rc_reg_form'] );
$options['rc_lostpass_form'] = intval( $options['rc_lostpass_form'] );
$options['html'] = sanitize_textarea_field( $options['html'] );
$options['spam_file_scanner'] = intval( $options['spam_file_scanner'] );
$options['exclude_file_ext'] = sanitize_textarea_field( $options['exclude_file_ext'] );
if ( update_option( 'wpforo_tools_antispam', $options ) ) {
WPF()->notice->add( 'Settings successfully updated', 'success' );
}
}
} else {
delete_option( 'wpforo_tools_antispam' );
WPF()->notice->add( 'Antispam options reset successfully', 'success' );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=antispam' ) );
exit();
}
/**
* cleanup_options_save form submit action
*/
public function cleanup_options_save(){
check_admin_referer( 'wpforo-tools-cleanup' );
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if ( ! wpfkey( $_POST, 'reset' ) ) {
if ( $options = wpfval( $_POST, 'wpforo_tools_cleanup' ) ) {
if ( update_option( 'wpforo_tools_cleanup', $options ) ) {
WPF()->notice->add( 'Settings successfully updated', 'success' );
}
}
} else {
delete_option( 'wpforo_tools_cleanup' );
WPF()->notice->add( 'Cleanup options reset successfully', 'success' );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=cleanup' ) );
exit();
}
/**
* misc_options_save form submit action
*/
public function misc_options_save(){
check_admin_referer( 'wpforo-tools-misc' );
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if ( ! wpfkey( $_POST, 'reset' ) ) {
if ( $options = wpfval( $_POST, 'wpforo_tools_misc' ) ) {
$options['dofollow'] = sanitize_textarea_field( $options['dofollow'] );
$options['noindex'] = sanitize_textarea_field( $options['noindex'] );
$options['admin_note'] = wpforo_kses( $options['admin_note'] );
$options['admin_note_groups'] = ( wpfval( $_POST, 'wpforo_tools_misc', 'admin_note_groups' ) ) ? array_map( 'intval', $options['admin_note_groups'] ) : array();
$options['admin_note_pages'] = ( wpfval( $_POST, 'wpforo_tools_misc', 'admin_note_pages' ) ) ? array_map( 'sanitize_textarea_field', $options['admin_note_pages'] ) : array();
if ( update_option( 'wpforo_tools_misc', $options ) ) {
wpforo_clean_cache( 'forum-soft' );
WPF()->notice->add( 'Settings successfully updated', 'success' );
}
}
} else {
delete_option( 'wpforo_tools_misc' );
WPF()->notice->add( 'Misc options reset successfully', 'success' );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=misc' ) );
exit();
}
/**
* legal_options_save form submit action
*/
public function legal_options_save(){
check_admin_referer( 'wpforo-tools-legal' );
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if ( ! wpfkey( $_POST, 'reset' ) ) {
if ( $options = wpfval( $_POST, 'wpforo_tools_legal' ) ) {
$options['contact_page_url'] = esc_url( $options['contact_page_url'] );
$options['checkbox_terms_privacy'] = intval( $options['checkbox_terms_privacy'] );
$options['checkbox_email_password'] = intval( $options['checkbox_email_password'] );
$options['page_terms'] = esc_url( $options['page_terms'] );
$options['page_privacy'] = esc_url( $options['page_privacy'] );
$options['checkbox_forum_privacy'] = intval( $options['checkbox_forum_privacy'] );
$options['forum_privacy_text'] = wpforo_kses( $options['forum_privacy_text'], 'post' );
$options['checkbox_fb_login'] = intval( $options['checkbox_fb_login'] );
$options['cookies'] = intval( $options['cookies'] );
$options['rules_checkbox'] = intval( $options['rules_checkbox'] );
$options['rules_text'] = wpforo_kses( $options['rules_text'], 'post' );
if ( update_option( 'wpforo_tools_legal', $options ) ) {
WPF()->notice->add( 'Settings successfully updated', 'success' );
}
}
} else {
delete_option( 'wpforo_tools_legal' );
WPF()->notice->add( 'Settings reset successfully', 'success' );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=legal' ) );
exit();
}
/**
* delete detected spam file
*/
public function delete_spam_file(){
check_admin_referer( 'wpforo_tools_antispam_files');
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $filename = trim(wpfval($_GET, 'sfname')) ){
$filename = str_replace( array('../', './', '/'), '', sanitize_file_name($filename) );
$filename = urldecode( $filename );
if($filename){
$upload_dir = wp_upload_dir();
$default_attachments_dir = $upload_dir['basedir'] . '/wpforo/default_attachments/';
$file = $default_attachments_dir . $filename;
$attachmentid = WPF()->post->get_attachment_id( '/' . $filename );
if ( !wp_delete_attachment( $attachmentid ) ){
@unlink($file);
}
WPF()->notice->add( 'Deleted', 'success' );
}
}
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=antispam' ) );
exit();
}
/**
* delete_all_spam_files all detected spam file using level attribute
*/
public function delete_all_spam_files(){
check_admin_referer( 'wpforo_tools_antispam_files');
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( $delete_level = intval(wpfval($_GET, 'level')) ){
$upload_dir = wp_upload_dir();
$default_attachments_dir = $upload_dir['basedir'] . '/wpforo/default_attachments/';
if(is_dir($default_attachments_dir)){
if ($handle = opendir($default_attachments_dir)){
while (false !== ($filename = readdir($handle))){
if( $filename === '.' || $filename === '..') continue;
if( !$level = WPF()->moderation->spam_file($filename) ) continue;
if( $delete_level === $level ){
$attachmentid = WPF()->post->get_attachment_id( '/' . $filename );
if ( !wp_delete_attachment( $attachmentid ) ){
$file = $default_attachments_dir . $filename;
@unlink($file);
}
}
}
closedir($handle);
WPF()->notice->add( 'Deleted', 'success' );
}
}
}
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=antispam' ) );
exit();
}
/**
* do database alter fixing using install.sql db-strukture
*/
public function database_update(){
check_admin_referer( 'wpforo_update_database' );
if(!WPF()->perm->usergroup_can('mt')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
wpforo_set_max_execution_time(3600);
wpforo_update_db();
wp_redirect( admin_url( 'admin.php?page=wpforo-tools&tab=debug&view=tables' ) );
exit();
}
/**
* forum_add form submit action
*/
public function forum_add(){
check_admin_referer( 'wpforo-forum-add' );
if( !WPF()->forum->manage() ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_REQUEST['forum']) ){
WPF()->forum->add();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
exit();
}
/**
* forum_edit form submit action
*/
public function forum_edit(){
check_admin_referer( 'wpforo-forum-edit' );
if( !WPF()->forum->manage() ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_REQUEST['forum']) ){
WPF()->forum->edit();
}
wp_redirect( wpforo_get_request_uri() );
exit();
}
/**
* forum_delete form submit action
*/
public function forum_delete(){
check_admin_referer( 'wpforo-forum-delete' );
if( !WPF()->forum->manage() ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$delete = (int) wpfval($_REQUEST, 'forum', 'delete');
if( $delete === 1 ){
WPF()->forum->delete();
}elseif( $delete === 0 ){
WPF()->forum->merge();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
exit();
}
/**
* forum_hierarchy_save form submit action
*/
public function forum_hierarchy_save(){
check_admin_referer( 'wpforo-forums-hierarchy' );
if( !WPF()->forum->manage() ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_REQUEST['forum']) ){
WPF()->forum->update_hierarchy();
wpforo_clean_cache('forum');
}
wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
exit();
}
/**
* dashboard_post_unapprove action
*/
public function dashboard_post_unapprove(){
$postid = wpfval($_GET, 'postid');
check_admin_referer( "wpforo-unapprove-post-{$postid}" );
if(!WPF()->perm->usergroup_can('aum')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
WPF()->moderation->post_unapprove($postid);
wpforo_clean_cache('post', $postid);
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* dashboard_post_approve action
*/
public function dashboard_post_approve(){
$postid = wpfval($_GET, 'postid');
check_admin_referer( "wpforo-approve-post-{$postid}" );
if(!WPF()->perm->usergroup_can('aum')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
WPF()->moderation->post_approve($postid);
wpforo_clean_cache('post', $postid);
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* dashboard_post_delete action
*/
public function dashboard_post_delete(){
$postid = wpfval($_GET, 'postid');
check_admin_referer( "wpforo-delete-post-{$postid}" );
if(!WPF()->perm->usergroup_can('aum')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
WPF()->post->delete($postid);
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* doing bulk moderation actions ( approve, unapprove, delete )
*/
public function bulk_moderation(){
check_admin_referer('bulk-moderations');
if(!WPF()->perm->usergroup_can('aum')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$u_action = $this->get_current_bulk_action();
$postids = (array) wpfval($_GET, 'postids');
if( $u_action && !empty($postids) ) {
if ($u_action === 'delete') {
foreach($postids as $postid) WPF()->post->delete($postid);
} elseif ($u_action === 'approve') {
foreach($postids as $postid) {
if( $postid ){
WPF()->moderation->post_approve($postid);
//Email Notification ////////////////////////////////////////////////////////////
$post = WPF()->post->get_post($postid);
wpforo_clean_cache('post', $postid, $post);
if( !empty($post) && isset($post['is_first_post']) && $post['is_first_post'] ){
wpforo_send_mail_to_mentioned_users( $post );
if( isset($post['topicid']) && $post['topicid'] ){
$topic = WPF()->topic->get_topic($post['topicid']);
if( !empty($topic) ){
wpforo_forum_subscribers_mail_sender( $topic );
}
}
}
/////////////////////////////////////////////////////////////////////////////////
}
}
} elseif ($u_action === 'unapprove') {
foreach ($postids as $postid) {
WPF()->moderation->post_unapprove($postid);
wpforo_clean_cache('post', $postid);
}
}
}
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* phrase_add form submit action
*/
public function phrase_add(){
check_admin_referer( 'wpforo-phrase-add' );
if(!WPF()->perm->usergroup_can('mp')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['phrase']) ){
WPF()->phrase->add();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-phrases' ) );
exit();
}
/**
* phrase_edit_form action redirect to phrases list page when phraseid(s) not choosed
*/
public function phrase_edit_form(){
$phraseids = array_filter( array_map('intval', array_merge((array) wpfval($_GET, 'phraseid'), (array) wpfval($_GET, 'phraseids')) ) );
if( !$phraseids ){
wp_redirect( admin_url( 'admin.php?page=wpforo-phrases' ) );
exit();
}
}
/**
* phrase_edit form submit action
*/
public function phrase_edit(){
check_admin_referer( 'wpforo-phrases-edit' );
if(!WPF()->perm->usergroup_can('mp')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['phrases']) ){
WPF()->phrase->edit();
}
wp_redirect( admin_url( 'admin.php?page=wpforo-phrases' ) );
exit();
}
/**
* user_ban action
*/
public function user_ban(){
$userid = intval( wpfval($_GET, 'userid') );
check_admin_referer( 'wpforo-user-ban-' . $userid );
if( !WPF()->perm->usergroup_can('vm') || !WPF()->perm->usergroup_can('bm') || intval($userid) === intval(WPF()->current_userid) ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
WPF()->member->ban($userid);
wpforo_clean_cache('user');
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* user_unban action
*/
public function user_unban(){
$userid = intval( wpfval($_GET, 'userid') );
check_admin_referer( 'wpforo-user-unban-' . $userid );
if( !WPF()->perm->usergroup_can('vm') || !WPF()->perm->usergroup_can('bm') || intval($userid) === intval(WPF()->current_userid) ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
WPF()->member->unban($userid);
wpforo_clean_cache('user');
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* action after wordpress native deleted_user hook
* @param int $userid already deleted user ID
*/
public function user_delete($userid){
$reassign_userid = wpforo_bigintval( wpfval($_REQUEST, 'wpforo_reassign_user') );
if( wpfval($_REQUEST, 'wpforo_user_delete_option') === 'reassign' && $reassign_userid ){
WPF()->member->delete( $userid, $reassign_userid );
}else{
WPF()->member->delete( $userid );
}
WPF()->notice->clear();
}
/**
* doing bulk member actions ( ban, unban, delete )
*/
public function bulk_members(){
check_admin_referer('bulk-members');
if( !WPF()->perm->usergroup_can('vm') ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$new_groupid = -1;
if( !empty($_GET['new_groupid']) && $_GET['new_groupid'] !== '-1' ){
$new_groupid = intval($_GET['new_groupid']);
}elseif( !empty($_GET['new_groupid2']) && $_GET['new_groupid2'] !== '-1' ){
$new_groupid = intval($_GET['new_groupid2']);
}
$u_action = $this->get_current_bulk_action();
if( in_array($u_action, array('ban', 'unban')) && !WPF()->perm->usergroup_can('bm') ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}elseif ( $u_action === 'delete' && !WPF()->perm->usergroup_can('dm') ){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$userids = (array) wpfval($_GET, 'userids');
$userids = array_filter( array_map('wpforo_bigintval', $userids) );
$userids = array_diff($userids, (array) WPF()->current_userid);
if( $u_action && !empty($userids) ) {
if ($u_action === 'delete') {
$url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) );
$url = str_replace( '&amp;', '&', wp_nonce_url( $url, 'bulk-users' ) );
wp_redirect( $url );
exit();
} elseif ($u_action === 'ban') {
foreach($userids as $userid) {
WPF()->member->ban($userid);
}
} elseif ($u_action === 'unban') {
foreach ($userids as $userid) {
WPF()->member->unban($userid);
}
}
}elseif( !$u_action && wpfkey($_GET, 'change_group') ){
if( !empty($userids) && $new_groupid !== -1 ){
$status = WPF()->usergroup->set_users_groupid(array($new_groupid => $userids));
if( $status['success'] ) WPF()->notice->add('Usergroup is successfully changed for selected users', 'success');
}else{
WPF()->notice->add('Please select users and usergroup', 'error');
}
}
wpforo_clean_cache('user');
wp_safe_redirect( wp_get_referer() );
exit();
}
/**
* usergroup_add form submit action
*/
public function usergroup_add(){
check_admin_referer('wpforo-usergroup-add');
if(!WPF()->perm->usergroup_can('vmg')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['usergroup']) ){
$group = WPF()->usergroup->fix_group($_POST['usergroup']);
$color = wpfval( $group, 'wpfugc' ) ? '' : sanitize_text_field( $group['color'] );
$groupid = WPF()->usergroup->add( $group['name'], $group['cans'], $group['description'], $group['role'], $group['access'], $color, $group['visible'], $group['secondary'] );
if($groupid) wpforo_clean_cache( 'loop', $groupid );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-usergroups' ) );
exit();
}
/**
* usergroup_edit form submit action
*/
public function usergroup_edit(){
check_admin_referer('wpforo-usergroup-edit');
if(!WPF()->perm->usergroup_can('vmg')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['usergroup']) ){
$group = WPF()->usergroup->fix_group($_POST['usergroup']);
$color = wpfval( $group, 'wpfugc' ) ? '' : sanitize_text_field( $group['color'] );
WPF()->usergroup->edit( $group['groupid'], $group['name'], $group['cans'], $group['description'], $group['role'], NULL, $color, $group['visible'], $group['secondary'] );
wpforo_clean_cache( 'loop', $group['groupid'] );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-usergroups' ) );
exit();
}
/**
* usergroup_delete form submit action
*/
public function usergroup_delete(){
check_admin_referer('wpforo-usergroup-delete');
if(!WPF()->perm->usergroup_can('vmg')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( wpfval($_POST, 'usergroup', 'delete') ){
$args = array('groupid' => wpfval($_POST, 'usergroup', 'groupid'));
if( $userids = WPF()->member->get_userids($args) ){
$redirect_to = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) );
$redirect_to = str_replace( '&amp;', '&', wp_nonce_url($redirect_to, 'bulk-users') );
wp_redirect($redirect_to);
exit();
}
}
if( !empty($_POST['usergroup']) ){
WPF()->usergroup->delete(wpfval($_POST['usergroup'], 'groupid'), wpfval($_POST['usergroup'], 'mergeid'));
wpforo_clean_cache('user');
}
wp_redirect( admin_url( 'admin.php?page=wpforo-usergroups' ) );
exit();
}
/**
* default_groupid_change action
*/
public function default_groupid_change(){
$default_groupid = intval( wpfval($_GET, 'default_groupid') );
check_admin_referer('wpforo-default-groupid-change-' . $default_groupid);
if(!WPF()->perm->usergroup_can('vmg')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if($default_groupid) update_option('wpforo_default_groupid', $default_groupid);
wp_redirect( admin_url( 'admin.php?page=wpforo-usergroups' ) );
exit();
}
/**
* prevent to show usergroup delete form when !$groupid || $groupid <= 5
*/
public function usergroup_delete_form() {
if( intval(wpfval($_GET, 'groupid')) <= 5 ){
wp_redirect( admin_url( 'admin.php?page=wpforo-usergroups' ) );
exit();
}
}
/**
* access_add form submit action
*/
public function access_add(){
check_admin_referer('wpforo-access-add');
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['access']) ){
WPF()->perm->add( WPF()->perm->fix_access($_POST['access']) );
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=accesses' ) );
exit();
}
/**
* access_edit form submit action
*/
public function access_edit(){
check_admin_referer('wpforo-access-edit');
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
if( !empty($_POST['access']) ){
WPF()->perm->edit( WPF()->perm->fix_access($_POST['access']) );
wpforo_clean_cache('loop');
}
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=accesses' ) );
exit();
}
/**
* access_delete form submit action
*/
public function access_delete(){
$accessid = intval(wpfval($_GET, 'accessid'));
check_admin_referer('wpforo-access-delete-' . $accessid);
if(!WPF()->perm->usergroup_can('ms')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
WPF()->perm->delete($accessid);
wpforo_clean_cache( 'loop' );
wp_redirect( admin_url( 'admin.php?page=wpforo-settings&tab=accesses' ) );
exit();
}
/**
* theme_activate action
*/
public function theme_activate(){
check_admin_referer('wpforo-theme-activate');
if(!WPF()->perm->usergroup_can('mth')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$notice = __('Theme activate error', 'wpforo');
$notice_type = 'error';
if( $theme = wpfval($_GET, 'theme') ){
$theme = trim(sanitize_text_field($theme));
if( $theme && WPF()->tpl->theme !== $theme ){
$new_theme = get_option( 'wpforo_theme_archive_' . $theme );
if( !empty($new_theme) ){
update_option( 'wpforo_theme_options', $new_theme );
update_option( 'wpforo_theme_archive_' . WPF()->tpl->theme, WPF()->tpl->options );
$notice = __('Theme activate success', 'wpforo');
$notice_type = 'success';
}
}
}
WPF()->notice->add($notice, $notice_type);
wp_redirect( admin_url( 'admin.php?page=wpforo-themes' ) );
exit();
}
/**
* theme_install action
*/
public function theme_install(){
check_admin_referer('wpforo-theme-install');
if(!WPF()->perm->usergroup_can('mth')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$notice = __('Theme install error', 'wpforo');
$notice_type = 'error';
if( $theme = wpfval($_GET, 'theme') ){
$theme = trim(sanitize_text_field($theme));
if( $theme && WPF()->tpl->theme !== $theme ){
$new_theme = WPF()->tpl->find_theme($theme);
if( !empty($new_theme) ){
update_option( 'wpforo_theme_options', $new_theme );
update_option( 'wpforo_theme_archive_' . WPF()->tpl->theme, WPF()->tpl->options );
$notice = __('Theme install success', 'wpforo');
$notice_type = 'success';
}
}
}
WPF()->notice->add($notice, $notice_type);
wp_redirect( admin_url( 'admin.php?page=wpforo-themes' ) );
exit();
}
/**
* theme_delete action
*/
public function theme_delete(){
check_admin_referer('wpforo-theme-delete');
if(!WPF()->perm->usergroup_can('mth')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$notice = __('Theme delete error', 'wpforo');
$notice_type = 'error';
if( $theme = wpfval($_GET, 'theme') ){
$theme = trim(sanitize_text_field($theme));
if( $theme && WPF()->tpl->theme !== $theme ){
$remove_dir = WPFORO_THEME_DIR . '/' . $theme;
if( is_dir($remove_dir) ){
wpforo_remove_directory($remove_dir);
$notice = __('Theme delete success', 'wpforo');
$notice_type = 'success';
}
}
}
WPF()->notice->add($notice, $notice_type);
wp_redirect( admin_url( 'admin.php?page=wpforo-themes' ) );
exit();
}
/**
* theme_reset action
*/
public function theme_reset(){
check_admin_referer('wpforo-theme-reset');
if(!WPF()->perm->usergroup_can('mth')){
WPF()->notice->add('Permission denied', 'error');
wp_redirect(admin_url());
exit();
}
$notice = __('Theme reset error', 'wpforo');
$notice_type = 'error';
if( $theme = wpfval($_GET, 'theme') ){
$theme = trim(sanitize_text_field($theme));
if( $theme && WPF()->tpl->theme === $theme ){
$new_theme = WPF()->tpl->find_theme($theme);
if( !empty($new_theme) ) update_option( 'wpforo_theme_options', $new_theme );
delete_option( 'wpforo_theme_archive_' . $theme );
$notice = __('Theme reset success', 'wpforo');
$notice_type = 'success';
}
}
WPF()->notice->add($notice, $notice_type);
wp_redirect( admin_url( 'admin.php?page=wpforo-themes' ) );
exit();
}
/**
* update wpForo addons CSS style to make compatible with the current version of wpForo
*/
function update_addons_css(){
check_admin_referer('wpforo-update-addons-css');
wpforo_wrap_in_all_addons_css();
wp_redirect( admin_url( 'admin.php?page=wpforo-community' ) );
exit();
}
/**
* dissmiss the poll version is old notification for admins
*/
public function dissmiss_poll_version_is_old() {
check_admin_referer('wpforo-dissmiss-poll-version-is-old');
WPF()->dissmissed['poll_version_is_old'] = 1;
update_option('wpforo_dissmissed', WPF()->dissmissed);
wp_redirect( admin_url( 'admin.php?page=wpforo-community' ) );
exit();
}
/**
* dissmiss the recaptcha not configured notification for admins
*/
public function dissmiss_recaptcha_note() {
if( wpfval($_POST, 'backend') ){
WPF()->dissmissed['recaptcha_backend_note'] = 1;
}else{
WPF()->dissmissed['recaptcha_note'] = 1;
}
$response = update_option('wpforo_dissmissed', WPF()->dissmissed);
echo intval($response);
exit();
}
/**
* wpforo before deactivate action
*/
public function deactivate(){
$response = array('code' => 0);
$json = filter_input(INPUT_POST, 'deactivateData');
if ($json) {
parse_str($json, $data);
$blogTitle = get_option('blogname');
$to = 'feedback@wpforo.com';
$subject = '[wpForo Feedback - ' . WPFORO_VERSION . ']';
$headers = array();
$contentType = 'text/html';
$fromName = apply_filters('wp_mail_from_name', $blogTitle);
$fromName = html_entity_decode($fromName, ENT_QUOTES);
$siteUrl = get_site_url();
$parsedUrl = parse_url($siteUrl);
$domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : '';
$fromEmail = 'no-reply@' . $domain;
$headers[] = "Content-Type: $contentType; charset=UTF-8";
$headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n";
$message = "Dismiss and never show again";
if(isset($data['never_show']) && ($v = intval($data['never_show']))){
update_option('wpforo_deactivation_dialog_never_show', $v);
$response['code'] = 'dismiss_and_deactivate';
}elseif(isset($data['deactivation_reason']) && ($reason = trim($data['deactivation_reason']))){
$subject .= ' - ' . $reason;
$message = "<strong>Deactivation reason:</strong> " . $reason . "\r\n" . "<br/>";
if (isset($data['deactivation_reason_desc']) && ($reasonDesc = trim($data['deactivation_reason_desc']))) {
$message .= "<strong>Deactivation reason description:</strong> " . $reasonDesc . "\r\n" . "<br/>";
}
if (isset($data['deactivation_feedback_email']) && ($feedback_email = trim($data['deactivation_feedback_email']))) {
$to = 'support@wpforo.com';
$message .= "<strong>Feedback Email:</strong> " . $feedback_email . "\r\n" . "<br/>";
}
$subject = html_entity_decode($subject, ENT_QUOTES);
$message = html_entity_decode($message, ENT_QUOTES);
$response['code'] = 'send_and_deactivate';
}
wp_mail($to, $subject, $message, $headers);
}
wp_die(json_encode($response));
}
}