| Server IP : 121.121.20.254 / Your IP : 216.73.216.202 Web Server : Microsoft-IIS/10.0 System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64 User : IUSR ( 0) PHP Version : 8.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/forum/wp-content/plugins/simplepress/admin/library/ |
Upload File : |
<?php
/*
Simple:Press
Admin Support Routines
$LastChangedDate: 2018-08-15 07:59:04 -0500 (Wed, 15 Aug 2018) $
$Rev: 15704 $
*/
if ( ! defined( 'ABSPATH' ) ) {
die('Access denied - you cannot directly call this file');
}
require_once 'spa-iconsets.php';
function spa_enqueue_color_picker() {
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_style( 'wp-color-picker' );
}
add_action( 'admin_enqueue_scripts', 'spa_enqueue_color_picker' );
function spa_get_forums_in_group($groupid) {
return SP()->DB->table(SPFORUMS, "group_id=$groupid", '', 'forum_seq');
}
function spa_get_group_forums_by_parent($groupid, $parentid) {
return SP()->DB->table(SPFORUMS, "group_id=$groupid AND parent=$parentid", '', 'forum_seq');
}
function spa_get_forums_all() {
return SP()->DB->select('SELECT forum_id, forum_name, forum_status, forum_disabled, '.SPGROUPS.'.group_id, group_name
FROM '.SPFORUMS.'
JOIN '.SPGROUPS.' ON '.SPFORUMS.'.group_id = '.SPGROUPS.'.group_id
ORDER BY group_seq, forum_seq');
}
function spa_create_group_select($groupid = 0, $label = false) {
$groups = SP()->DB->table(SPGROUPS, '', '', 'group_seq');
if ($groups) {
if ($label) {
echo '<option value="">'.esc_html(SP()->primitives->admin_text('Select forum group:')).'</option>';
}
foreach ($groups as $group) {
echo '<option '.selected($group->group_id, $groupid).' value="'.esc_attr($group->group_id).'">'.esc_html(SP()->displayFilters->title($group->group_name)).'</option>'."\n";
}
}
}
function spa_create_forum_select($forumid) {
$forums = spa_get_forums_all();
$out = '';
if ($forums) {
foreach ($forums as $forum) {
$out .= '<option '.selected($forum->forum_id, $fourmid).'value="'.esc_attr($forum->forum_id).'">--??---'.SP()->displayFilters->title($forum->forum_name).'</option>'."\n";
$default = '';
}
}
return $out;
}
function spa_update_check_option($key) {
if (isset($_POST[$key])) {
SP()->options->update($key, true);
} else {
SP()->options->update($key, false);
}
}
function spa_get_usergroups_all($usergroupid = null) {
$where = '';
if (!is_null($usergroupid)) $where = "usergroup_id=$usergroupid";
return SP()->DB->table(SPUSERGROUPS, $where);
}
function spa_get_usergroups_row($usergroup_id) {
return SP()->DB->table(SPUSERGROUPS, "usergroup_id=$usergroup_id", 'row');
}
function spa_create_usergroup_row($usergroupname, $usergroupdesc, $usergroupbadge, $usergroupjoin, $hide_stats, $usergroupismod, $report_failure = false) {
# first check to see if user group name exists
$exists = SP()->DB->table(SPUSERGROUPS, "usergroup_name='$usergroupname'", 'usergroup_id');
if ($exists) {
if ($report_failure == true) {
return false;
} else {
return $exists;
}
}
# go on and create the new user group
$sql = 'INSERT INTO '.SPUSERGROUPS.' (usergroup_name, usergroup_desc, usergroup_badge, usergroup_join, hide_stats, usergroup_is_moderator) ';
$sql .= "VALUES ('$usergroupname', '$usergroupdesc', '$usergroupbadge', '$usergroupjoin', '$hide_stats', '$usergroupismod')";
if (SP()->DB->execute($sql)) {
return SP()->rewrites->pageData['insertid'];
} else {
return false;
}
}
function spa_remove_permission_data($permission_id) {
return SP()->DB->execute('DELETE FROM '.SPPERMISSIONS." WHERE permission_id=$permission_id");
}
function spa_create_role_row($role_name, $role_desc, $auths, $report_failure = false) {
# first check to see if rolename exists
$exists = SP()->DB->table(SPROLES, "role_name='$role_name'", 'role_id');
if ($exists) {
if ($report_failure == true) {
return false;
} else {
return $exists;
}
}
# go on and create the new role
$sql = 'INSERT INTO '.SPROLES.' (role_name, role_desc, role_auths) ';
$sql .= "VALUES ('$role_name', '$role_desc', '$auths')";
if (SP()->DB->execute($sql)) {
return SP()->rewrites->pageData['insertid'];
} else {
return false;
}
}
function spa_get_role_row($role_id) {
return SP()->DB->table(SPROLES, "role_id=$role_id", 'row');
}
function spa_get_defpermissions($group_id) {
return SP()->DB->select('SELECT permission_id, '.SPUSERGROUPS.'.usergroup_id, permission_role, usergroup_name
FROM '.SPDEFPERMISSIONS.'
JOIN '.SPUSERGROUPS.' ON '.SPDEFPERMISSIONS.'.usergroup_id = '.SPUSERGROUPS.".usergroup_id
WHERE group_id=$group_id");
}
function spa_get_defpermissions_role($group_id, $usergroup_id) {
return SP()->DB->table(SPDEFPERMISSIONS, "group_id=$group_id AND usergroup_id=$usergroup_id", 'permission_role');
}
function spa_display_usergroup_select($filter = false, $forum_id = 0, $showSelect = true) {
$usergroups = spa_get_usergroups_all();
if ($showSelect) {
?>
<label><?php SP()->primitives->admin_etext('Select usergroup'); ?></label>
<select class='sfacontrol' name='usergroup_id'>
<?php
}
$out = '<option value="-1">'.SP()->primitives->admin_text('Select usergroup').'</option>';
if ($filter) $perms = sp_get_forum_permissions($forum_id);
foreach ($usergroups as $usergroup) {
$disabled = '';
if ($filter == 1 && $perms) {
foreach ($perms as $perm) {
if ($perm->usergroup_id == $usergroup->usergroup_id) {
$disabled = 'disabled="disabled" ';
continue;
}
}
}
$out .= '<option '.$disabled.'value="'.esc_attr($usergroup->usergroup_id).'">'.SP()->displayFilters->title($usergroup->usergroup_name).'</option>'."\n";
}
echo wp_kses(
$out,
array(
'option' => array(
'value' => true,
'disabled' => true,
),
// allow text nodes (default)
)
);
if ($showSelect) {
?>
</select>
<?php
}
}
function spa_display_permission_select($cur_perm = 0, $showSelect = true) {
?>
<?php $roles = sp_get_all_roles(); ?>
<?php if ($showSelect) { ?>
<select class='sfacontrol' name='role'>
<?php
}
$out = '';
if ($cur_perm == 0) $out .= '<option value="-1">'.SP()->primitives->admin_text('Select permission set').'</option>';
foreach ($roles as $role) {
$selected = '';
if ($cur_perm == $role->role_id) $selected = 'selected="selected" ';
$out .= '<option '.esc_attr($selected).'value="'.esc_attr($role->role_id).'">'.SP()->displayFilters->title($role->role_name).'</option>'."\n";
}
echo wp_kses(
$out,
array(
'option' => array(
'value' => true,
'disabled' => true,
),
// allow text nodes (default)
)
);
if ($showSelect) {
?>
</select>
<?php
}
}
/**
* Get all custom icons in a directory
*
* @param string $path
* @param string $url_base
*
* @return array
*/
function spa_get_custom_icons( $path = '', $url_base = '' ) {
if( !$path ) {
$path = SP_STORE_DIR.'/'.SP()->plugin->storage['custom-icons'];
}
if( !$url_base ) {
$url_base = SPCUSTOMURL;
}
$icons = array();
$images = array_map('basename', glob("{$path}/{*.jpg,*.jpeg,*.png,*.gif,*.svg,*.webp,*.JPG,*.JPEG,*.PNG,*.GIF,*.SVG,*.WEBP}", GLOB_BRACE) );
sort( $images );
foreach( $images as $image ) {
$icons[ $image ] = $url_base . $image . "?{$image}";
}
return array( 'icons' => $icons );
}
/**
* Adds font icon picker
*
* @param string $name
* @param string $label
* @param array $extra_icon_groups
* @param string $selected
* @param boolean $show_label
*/
function spa_select_iconset_icon_picker( $name, $label, $extra_icon_groups = array() ,$selected = '', $show_label = true, $css_classes = '' ) {
$iconsets = array_merge( $extra_icon_groups, spa_get_all_active_iconsets() );
global $tab;
$selected_icon = array();
if( !empty( $selected ) && is_array( json_decode( $selected, true ) ) && ( json_last_error() == JSON_ERROR_NONE ) ) {
$ar_icon = json_decode( $selected, true );
$selected_icon['icon'] = isset( $ar_icon['i'] ) ? $ar_icon['i'] : '';
$selected_icon['color'] = isset( $ar_icon['c'] ) ? $ar_icon['c'] : '';
$size_ar = isset( $ar_icon['s'] ) ? spa_iconset_parse_size( $ar_icon['s'] ) : array();
if( !empty( $size_ar ) ) {
$selected_icon['size'] = isset( $size_ar['size'] ) ? $size_ar['size'] : '';
$selected_icon['size_type'] = isset( $size_ar['size_type'] ) ? $size_ar['size_type'] : '';
}
} else {
$selected_icon['icon'] = $selected;
$selected_icon['color'] = '';
$selected_icon['size'] = '';
$selected_icon['size_type'] = '';
}
if( $show_label ) {
echo "<div class='sf-form-row ". esc_attr($css_classes) ."'>\n";
echo "<label class='sp-label-40'>". esc_html($label) ."</label>\n";
}
$icon_picker_id = 'icon_picker_' . wp_rand(111111, 999999);
$icon_color_id = $icon_picker_id . '_color';
$icon_size_id = $icon_picker_id . '_size';
echo '<div class="sf-icon-picker-row sf-select-wrap">';
printf( '<input type="hidden" name="%s" value="%s" class="icon_value" />', esc_attr($name), esc_attr( json_encode( $selected_icon ) ) );
printf( '<select class="wp-core-ui sp-input-60" tabindex="%s" id="%s">', esc_attr($tab), esc_attr($icon_picker_id) );
$tab++;
foreach( $iconsets as $iconset_name => $iconset ) {
echo '<optgroup label="'.esc_attr($iconset_name).'">';
printf( '<option value=""></option>', esc_html($iconset_name) );
foreach ( $iconset['icons'] as $icon_id => $icon ) {
$icon_id = is_int( $icon_id ) ? $icon : $icon_id;
$_selected = $selected_icon['icon'] && $selected_icon['icon'] === $icon_id ? ' selected="selected"' : '';
printf( '<option value="%s"%s>%s</option>', esc_attr($icon), esc_attr($_selected), esc_html($icon_id) );
}
echo '</optgroup>';
}
echo "</select>\n";
echo '<div class="clearboth"></div>';
echo '</div>';
echo '<div class="clearboth"></div>';
if( $show_label ) {
echo '</div>';
}
$color_field = sprintf( '<input type="text" class="wp-core-ui font-style-color" value="%s" id="%s" />', isset($selected_icon['color'])? esc_attr($selected_icon['color']) : '', esc_attr($icon_color_id) );
$size_input_field = sprintf( '<input type="number" placeholder="Size" class="wp-core-ui font-style-size" value="%s" id="%s" />', isset($selected_icon['size']) ? esc_attr($selected_icon['size']) : '', esc_attr($icon_size_id) );
$size_type_dropdown = spa_iconset_size_type_field( isset($selected_icon['size_type']) ? esc_attr($selected_icon['size_type']) : '' );
$font_style_fields = '<div class="font-style-container">\
<div class="font-color-container">'.wp_kses_post($color_field).'</div>\
<div class="font-size-container">'.wp_kses_post($size_input_field).wp_kses_post($size_type_dropdown).'</div>\
<div class="clear wp-clearfix"></div>\
</div>';
?>
<script>
jQuery(document).ready(function($) {
var _icon_ins = $('#<?php echo esc_js($icon_picker_id); ?>').fontIconPicker({
theme: 'fip-bootstrap',
iconsPerPage: 30,
allCategoryText : 'From All Libraries',
iconGenerator: function( icon ) {
// A random number that will be used to break caching.
break_cache = Math.random();
break_cache = break_cache.toString();
if( icon.match(/\.(jpeg|jpg|gif|png|svg|webp)$/) != null ) {
// The use of break_cache below uses "&" instead of "?" because the icon variable already has an "?" in it for some reason.
// Probably because the iconpicker is trying to break the cache as well - except it uses a fixed string and caches that cache the querystring will not break with that.
// So we're still going to add in our break_cache var with an "&".
return '<i class="sf-iconset-icon"><img class="sf-iconset-icon-img" src="' + icon + '&break_cache=' + break_cache + '" /></i>';
} else {
return '<i class="'+icon+' sf-iconset-icon"></i>';
}
}
}).on( 'change', function( e ) {
spj.UpdateFontIcon( '<?php echo esc_attr($icon_picker_id); ?>' );
});
$( '<?php echo esc_js($font_style_fields); ?>' ).insertBefore( _icon_ins.closest('.sf-icon-picker-row').find('.selector-popup .fip-icons-container') );
$( '#<?php echo esc_js($icon_picker_id); ?>').closest('.sf-icon-picker-row').find('.font-style-size, .font-style-size_type').on( 'change', function() {
spj.UpdateFontIcon( '<?php echo esc_attr($icon_picker_id); ?>' );
});
$('#<?php echo esc_js($icon_color_id); ?>').wpColorPicker({
change : function(a, b) {
spj.UpdateFontIcon( '<?php echo esc_attr($icon_picker_id); ?>' );
},
clear : function(a, b) {
spj.UpdateFontIcon( '<?php echo esc_attr($icon_picker_id); ?>', true );
}
});
_icon_ins.change();
});
</script>
<?php
}
/**
* Get selected icon and type
*
* @param string $icon
*
* @return array
*/
function spa_get_selected_icon( $icon, $filter = 'title' ) {
$color = '';
$size = '';
$size_type = '';
if( $icon ) {
$icon_args = json_decode( html_entity_decode( stripslashes ( $icon ) ), true );
if( $icon_args ) {
$icon = isset( $icon_args['icon'] ) ? $icon_args['icon'] : '';
$color = isset( $icon_args['color'] ) ? $icon_args['color'] : '';
$size = isset( $icon_args['size'] ) ? $icon_args['size'] : '';
$size = $size && is_numeric( $size ) && $size > 0 ? $size : '';
$default_size_units = spa_iconset_icon_size_units();
$size_type = isset( $icon_args['size_type'] ) ? $icon_args['size_type'] : '';
$size_type = !$size_type || !in_array( $size_type , $default_size_units ) ? 'px' : $size_type;
}
}
$file = wp_parse_url( $icon, PHP_URL_QUERY );
$type = 'font';
if( $file ) {
$type = 'file';
$icon = $file;
}
$icon = call_user_func( array( SP()->saveFilters, $filter ), trim( $icon ) );
$value_args = array( 'i' => $icon, 'c' => $color );
if( $size ) {
$value_args['s'] = $size . $size_type;
}
$value = addslashes( json_encode( $value_args ) );
$data = array( 'type' => $type, 'icon' => $icon, 'color' => $color, 'value' => $value, 'size' => $size, 'size_type' => $size_type );
return $data;
}
function spa_select_icon_dropdown($name, $label, $path, $cur, $showSelect = true, $width = 0) {
# Open folder and get cntents for matching
global $wp_filesystem;
if ( empty( $wp_filesystem ) ) {
require_once( ABSPATH . '/wp-admin/includes/file.php' );
// Initialize the WP_Filesystem. This will prompt for credentials if needed.
// For most common scenarios, 'direct' method is preferred if available.
$creds = request_filesystem_credentials( site_url() . '/wp-admin/', '', false, false, null );
// If we can't get credentials, or if the filesystem cannot be initialized, return early.
if ( ! WP_Filesystem( $creds ) ) {
// Log an error for debugging, but don't expose sensitive info to the user.
error_log( 'WP_Filesystem could not be initialized for path: ' . $path );
return array();
}
}
$dir_contents = $wp_filesystem->dirlist( $path, false, false );
$files = [];
if ( ! empty( $dir_contents ) ) {
foreach ( $dir_contents as $item_name => $item_data ) {
// Exclude '.' and '..'
if ( $item_name != '.' && $item_name != '..' ) {
$files[] = $item_name;
}
}
}
$w = '';
if ($width > 0) $w = 'width:'.$width.'px;';
if ($showSelect) echo '<select name="'.esc_attr($name).'" class="sfcontrol sf-vert-align-middle" '.esc_attr($w).'">';
if ($cur != '') $label = SP()->primitives->admin_text('Remove');
echo '<option value="">'.esc_html($label).'</option>';
foreach ($files as $file) {
$selected = '';
if ($file == $cur) $selected = ' selected="selected"';
echo '<option'.esc_attr($selected).' value="'.esc_attr($file).'">'.esc_html($file).'</option>';
}
if ($showSelect) echo '</select>';
}
# 5.2 add new auth categories for grouping of auths
# 6.0 updated for new instals only
function spa_setup_auth_cats() {
# have the auths tables been created?
$auths = SP()->DB->tableExists(SPAUTHS);
# default auths
SP()->auths->create_cat(SP()->primitives->admin_text('General'), SP()->primitives->admin_text('auth category for general auths'), 1);
# viewing auths
SP()->auths->create_cat(SP()->primitives->admin_text('Viewing'), SP()->primitives->admin_text('auth category for viewing auths'), 2);
# creating auths
SP()->auths->create_cat(SP()->primitives->admin_text('Creating'), SP()->primitives->admin_text('auth category for creating auths'), 3);
# editing auths
SP()->auths->create_cat(SP()->primitives->admin_text('Editing'), SP()->primitives->admin_text('auth category for editing auths'), 4);
# deleting auths
SP()->auths->create_cat(SP()->primitives->admin_text('Deleting'), SP()->primitives->admin_text('auth category for deleting auths'), 5);
# moderation auths
SP()->auths->create_cat(SP()->primitives->admin_text('Moderation'), SP()->primitives->admin_text('auth category for moderation auths'), 6);
# tools auths
SP()->auths->create_cat(SP()->primitives->admin_text('Tools'), SP()->primitives->admin_text('auth category for tools auths'), 7);
# uploading auths
SP()->auths->create_cat(SP()->primitives->admin_text('Uploading'), SP()->primitives->admin_text('auth category for uploading auths'), 8);
}
function spa_setup_auths() {
# create the auths
SP()->auths->add('view_forum', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view a forum')), 1, 0, 0, 0, 2, '');
SP()->auths->add('view_forum_lists', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view a list of forums only')), 1, 0, 0, 0, 2, '');
SP()->auths->add('view_forum_topic_lists', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view a list of forums and list of topics only')), 1, 0, 0, 0, 2, '');
SP()->auths->add('view_admin_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view posts by an administrator')), 1, 0, 0, 0, 2, '');
SP()->auths->add('view_own_admin_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view only own posts and admin/mod posts')), 1, 1, 0, 1, 2, '');
SP()->auths->add('view_email', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view email and IP addresses of members')), 1, 1, 0, 0, 2, '');
SP()->auths->add('view_profiles', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view profiles of members')), 1, 0, 0, 0, 2, '');
SP()->auths->add('view_members_list', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view the members lists')), 1, 0, 0, 0, 2, '');
SP()->auths->add('view_links', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view links within posts')), 1, 0, 0, 0, 2, '');
SP()->auths->add('start_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can start new topics in a forum')), 1, 0, 0, 0, 3, '');
SP()->auths->add('reply_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can reply to existing topics in a forum')), 1, 0, 0, 0, 3, '');
SP()->auths->add('reply_own_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can only reply to own topics')), 1, 1, 0, 1, 3, '');
SP()->auths->add('bypass_flood_control', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can bypass wait time between posts')), 1, 0, 0, 0, 3, '');
SP()->auths->add('use_spoilers', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can use spoilers in posts in posts')), 1, 0, 0, 0, 3, '');
SP()->auths->add('use_signatures', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can attach a signature to posts')), 1, 1, 0, 0, 3, '');
SP()->auths->add('create_links', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can create links in posts')), 1, 0, 0, 0, 3, '');
SP()->auths->add('can_use_smileys', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can use smileys in posts')), 1, 0, 0, 0, 3, '');
SP()->auths->add('can_use_iframes', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can use iframes in posts')), 1, 1, 0, 0, 3, SP()->primitives->admin_text('*** WARNING *** The use of iframes is dangerous. Allowing users to create iframes enables them to launch a potential security threat against your website. Enabling iframes requires your trust in your users. Turn on with care.'));
SP()->auths->add('can_use_object_tag', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can use OBJECT and EMBED tags in posts')), 1, 1, 0, 0, 3, SP()->primitives->admin_text('*** WARNING *** The use of the OBJECT and EMBEG tags is dangerous. Allowing users to embed objects enables them to launch a potential security threat against your website. Enabling the OBJECT and EMBED tags requires your trust in your users. Turn on with care.'));
SP()->auths->add('edit_own_topic_titles', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can edit own topic titles')), 1, 1, 0, 0, 4, '');
SP()->auths->add('edit_any_topic_titles', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can edit any topic title')), 1, 1, 0, 0, 4, '');
SP()->auths->add('edit_own_posts_for_time', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can edit own posts for time period')), 1, 1, 0, 0, 4, '');
SP()->auths->add('edit_own_posts_forever', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can edit own posts forever')), 1, 1, 0, 0, 4, '');
SP()->auths->add('edit_own_posts_reply', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can edit own posts until there has been a reply')), 1, 1, 0, 0, 4, '');
SP()->auths->add('edit_any_post', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can edit any post')), 1, 1, 0, 0, 4, '');
SP()->auths->add('delete_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can delete topics in forum')), 1, 1, 0, 0, 5, '');
SP()->auths->add('delete_own_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can delete own posts')), 1, 1, 0, 0, 5, '');
SP()->auths->add('delete_any_post', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can delete any post')), 1, 1, 0, 0, 5, '');
SP()->auths->add('bypass_math_question', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can bypass the math question')), 1, 0, 0, 0, 6, '');
SP()->auths->add('bypass_moderation', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can bypass all post moderation')), 1, 0, 0, 0, 6, '');
SP()->auths->add('bypass_moderation_once', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can bypass first post moderation')), 1, 0, 0, 0, 6, '');
SP()->auths->add('moderate_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can moderate pending posts')), 1, 1, 0, 0, 6, '');
SP()->auths->add('pin_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can pin topics in a forum')), 1, 0, 0, 0, 7, '');
SP()->auths->add('move_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can move topics from a forum')), 1, 0, 0, 0, 7, '');
SP()->auths->add('move_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can move posts from a topic')), 1, 0, 0, 0, 7, '');
SP()->auths->add('lock_topics', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can lock topics in a forum')), 1, 0, 0, 0, 7, '');
SP()->auths->add('pin_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can pin posts within a topic')), 1, 0, 0, 0, 7, '');
SP()->auths->add('reassign_posts', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can reassign posts to a different user')), 1, 0, 0, 0, 7, '');
SP()->auths->add('upload_avatars', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can upload avatars')), 1, 1, 1, 0, 8, '');
SP()->auths->add('can_view_images', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view images in posts')), 1, 0, 0, 0, 2, '');
SP()->auths->add('can_view_media', SP()->filters->esc_sql(SP()->primitives->admin_text_noesc('Can view media in posts')), 1, 0, 0, 0, 2, '');
}
function spa_setup_permissions() {
# Create default role data
$role_name = 'No Access';
$role_desc = 'Permission with no access to any Forum features';
$new_actions = 'a:40:{i:1;i:0;i:2;i:0;i:3;i:0;i:4;i:0;i:5;i:0;i:6;i:0;i:7;i:0;i:8;i:0;i:9;i:0;i:10;i:0;i:11;i:0;i:12;i:0;i:13;i:0;i:14;i:0;i:15;i:0;i:16;i:0;i:17;i:0;i:18;i:0;i:19;i:0;i:20;i:0;i:21;i:0;i:22;i:0;i:23;i:0;i:24;i:0;i:25;i:0;i:26;i:0;i:27;i:0;i:28;i:0;i:29;i:0;i:30;i:0;i:31;i:0;i:32;i:0;i:33;i:0;i:34;i:0;i:35;i:0;i:36;i:0;i:37;i:0;i:38;i:0;i:39;i:0;i:40;i:0;}';
spa_create_role_row($role_name, $role_desc, $new_actions);
$role_name = 'Read Only Access';
$role_desc = 'Permission with access to only view the Forum';
$new_actions = 'a:40:{i:1;i:1;i:2;i:0;i:3;i:0;i:4;i:1;i:5;i:0;i:6;i:0;i:7;i:0;i:8;i:0;i:9;i:1;i:10;i:0;i:11;i:0;i:12;i:0;i:13;i:0;i:14;i:1;i:15;i:0;i:16;i:0;i:17;i:0;i:18;i:0;i:19;i:0;i:20;i:0;i:21;i:0;i:22;i:0;i:23;i:0;i:24;i:0;i:25;i:0;i:26;i:0;i:27;i:0;i:28;i:0;i:29;i:0;i:30;i:0;i:31;i:0;i:32;i:0;i:33;i:0;i:34;i:0;i:35;i:0;i:36;i:0;i:37;i:0;i:38;i:0;i:39;i:1;i:40;i:1;}';
spa_create_role_row($role_name, $role_desc, $new_actions);
$role_name = 'Limited Access';
$role_desc = 'Permission with access to reply and start topics but with limited features';
$new_actions = 'a:40:{i:1;i:1;i:2;i:0;i:3;i:0;i:4;i:1;i:5;i:0;i:6;i:0;i:7;i:1;i:8;i:1;i:9;i:1;i:10;i:1;i:11;i:1;i:12;i:0;i:13;i:0;i:14;i:1;i:15;i:0;i:16;i:1;i:17;i:1;i:18;i:0;i:19;i:0;i:20;i:0;i:21;i:0;i:22;i:0;i:23;i:0;i:24;i:0;i:25;i:0;i:26;i:0;i:27;i:0;i:28;i:0;i:29;i:0;i:30;i:0;i:31;i:0;i:32;i:0;i:33;i:0;i:34;i:0;i:35;i:0;i:36;i:0;i:37;i:0;i:38;i:1;i:39;i:1;i:40;i:1;}';
spa_create_role_row($role_name, $role_desc, $new_actions);
$role_name = 'Standard Access';
$role_desc = 'Permission with access to reply and start topics with advanced features such as signatures';
$new_actions = 'a:40:{i:1;i:1;i:2;i:0;i:3;i:0;i:4;i:1;i:5;i:0;i:6;i:0;i:7;i:1;i:8;i:1;i:9;i:1;i:10;i:1;i:11;i:1;i:12;i:0;i:13;i:0;i:14;i:1;i:15;i:1;i:16;i:1;i:17;i:1;i:18;i:0;i:19;i:0;i:20;i:0;i:21;i:0;i:22;i:0;i:23;i:1;i:24;i:0;i:25;i:0;i:26;i:0;i:27;i:0;i:28;i:0;i:29;i:1;i:30;i:1;i:31;i:0;i:32;i:0;i:33;i:0;i:34;i:0;i:35;i:0;i:36;i:0;i:37;i:0;i:38;i:1;i:39;i:1;i:40;i:1;}';
spa_create_role_row($role_name, $role_desc, $new_actions);
$role_name = 'Full Access';
$role_desc = 'Permission with Standard Access features and math question bypass';
$new_actions = 'a:40:{i:1;i:1;i:2;i:0;i:3;i:0;i:4;i:1;i:5;i:0;i:6;i:0;i:7;i:1;i:8;i:1;i:9;i:1;i:10;i:1;i:11;i:1;i:12;i:0;i:13;i:1;i:14;i:1;i:15;i:1;i:16;i:1;i:17;i:1;i:18;i:0;i:19;i:1;i:20;i:0;i:21;i:0;i:22;i:1;i:23;i:1;i:24;i:0;i:25;i:0;i:26;i:0;i:27;i:0;i:28;i:1;i:29;i:1;i:30;i:1;i:31;i:0;i:32;i:0;i:33;i:0;i:34;i:0;i:35;i:0;i:36;i:0;i:37;i:0;i:38;i:1;i:39;i:1;i:40;i:1;}';
spa_create_role_row($role_name, $role_desc, $new_actions);
$role_name = 'Moderator Access';
$role_desc = 'Permission with access to all Forum features';
$new_actions = 'a:40:{i:1;i:1;i:2;i:0;i:3;i:0;i:4;i:1;i:5;i:0;i:6;i:1;i:7;i:1;i:8;i:1;i:9;i:1;i:10;i:1;i:11;i:1;i:12;i:0;i:13;i:1;i:14;i:1;i:15;i:1;i:16;i:1;i:17;i:1;i:18;i:0;i:19;i:1;i:20;i:1;i:21;i:0;i:22;i:1;i:23;i:1;i:24;i:1;i:25;i:1;i:26;i:0;i:27;i:1;i:28;i:1;i:29;i:1;i:30;i:1;i:31;i:1;i:32;i:1;i:33;i:1;i:34;i:1;i:35;i:1;i:36;i:1;i:37;i:1;i:38;i:1;i:39;i:1;i:40;i:1;}';
spa_create_role_row($role_name, $role_desc, $new_actions);
}
# 5.0 set up stuff for new profile tabs
function spa_new_profile_setup() {
# set up tabs and menus
SP()->profile->add_tab('Profile');
SP()->profile->add_menu('Profile', 'Overview', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-overview.php');
SP()->profile->add_menu('Profile', 'Edit Profile', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-profile.php');
SP()->profile->add_menu('Profile', 'Edit Identities', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-identities.php');
SP()->profile->add_menu('Profile', 'Edit Avatar', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-avatar.php');
SP()->profile->add_menu('Profile', 'Edit Signature', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-signature.php', 0, 1, 'use_signatures');
SP()->profile->add_menu('Profile', 'Edit Photos', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-photos.php');
SP()->profile->add_menu('Profile', 'Account Settings', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-account.php');
SP()->profile->add_tab('Options');
SP()->profile->add_menu('Options', 'Edit Global Options', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-global-options.php');
SP()->profile->add_menu('Options', 'Edit Posting Options', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-posting-options.php');
SP()->profile->add_menu('Options', 'Edit Display Options', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-display-options.php');
SP()->profile->add_tab('Usergroups');
SP()->profile->add_menu('Usergroups', 'Show Memberships', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-memberships.php');
SP()->profile->add_tab('Permissions');
SP()->profile->add_menu('Permissions', 'Show Permissions', SP_PLUGIN_DIR.'/forum/profile/forms/sp-form-permissions.php');
# overview message
$spProfile = SP()->options->get('sfprofile');
if (empty($spProfile['sfprofiletext'])) {
$spProfile['sfprofiletext'] = 'Welcome to the User Profile Overview Panel. From here you can view and update your profile and options as well as view your Usergroup Memberships and Permissions.';
SP()->options->update('sfprofile', $spProfile);
}
}
# 5.5.6
function sp_add_caps() {
global $wp_roles;
if (class_exists('WP_Roles') && !isset($wp_roles)) $wp_roles = new WP_Roles();
$wp_roles->add_cap('administrator', 'SPF Manage Options', false);
$wp_roles->add_cap('administrator', 'SPF Manage Forums', false);
$wp_roles->add_cap('administrator', 'SPF Manage User Groups', false);
$wp_roles->add_cap('administrator', 'SPF Manage Permissions', false);
$wp_roles->add_cap('administrator', 'SPF Manage Components', false);
$wp_roles->add_cap('administrator', 'SPF Manage Admins', false);
$wp_roles->add_cap('administrator', 'SPF Manage Users', false);
$wp_roles->add_cap('administrator', 'SPF Manage Profiles', false);
$wp_roles->add_cap('administrator', 'SPF Manage Toolbox', false);
$wp_roles->add_cap('administrator', 'SPF Manage Plugins', false);
$wp_roles->add_cap('administrator', 'SPF Manage Themes', false);
$wp_roles->add_cap('administrator', 'SPF Manage Integration', false);
}
# 5.5.3 - get and display simple stats for admin items
function sp_display_item_stats($table, $key, $value, $label) {
$c = SP()->DB->count($table, "$key = $value");
?>
<span class="stats--key"><?php echo esc_html($label); ?></span>
<span class="stats--value"><?php echo esc_html($c); ?></span>
<?php
}
function spa_build_forum_permalink_slugs() {
# grab all the forums
$query = new stdClass();
$query->type = 'set';
$query->table = SPFORUMS;
$forums = SP()->DB->select($query);
if ($forums) {
foreach ($forums as $forum) {
# get base slug for this forum
$slugs = array($forum->forum_slug);
$parent_id = $forum->parent;
# add in any ancestor forums
while (!empty($parent_id)) {
# get acncestor forum
$query = new stdClass();
$query->table = SPFORUMS;
$query->where = "forum_id=$parent_id";
$query->type = 'row';
$parent = SP()->DB->select($query);
$parent_id = $parent->parent;
# add in the ancestor forum slug
$slugs[] = $parent->forum_slug;
}
# update the forum permalink slug with all ancestors and its slug
$query = new stdClass;
$query->table = SP_PREFIX.'sfforums';
$query->fields = array('permalink_slug');
$slug = implode('/', array_reverse($slugs));
$query->data = array($slug);
$query->where = "forum_id=$forum->forum_id";
$result = SP()->DB->update($query);
}
}
}
function _spa_pagination($countPages, $currentPageNum, $paginationLength = 8, $ellipsisLength = 2) {
$pagination = array();
if ($countPages > 1) {
$maxPaginationLength = $paginationLength;
if ($countPages <= $paginationLength) {
$paginationLength = $countPages;
$from = 1;
} else {
$c = floor($paginationLength / 2) - 1;
if ($currentPageNum <= $c) {
$from = 1;
} elseif ($currentPageNum + $c >= $countPages) {
$from = $countPages - $paginationLength + 1;
} else {
$from = $currentPageNum - $c;
}
}
$arr = array_keys(array_fill($from, $paginationLength, ''));
if (count($arr) == $paginationLength && $ellipsisLength) {
$pagination['array'] = array();
foreach ($arr as $k => $pageNumber) {
if ($currentPageNum + $ellipsisLength < $countPages && $paginationLength - $ellipsisLength < $k + 2 && $paginationLength - 1 > $k) {
if ($paginationLength - 2 == $k) {
$pagination['array'][$pageNumber] = '...';
}
} else {
$pagination['array'][$pageNumber] = $pageNumber;
}
}
} else {
foreach ($arr as $pageNumber) {
$pagination['array'][$pageNumber] = $pageNumber;
}
}
if (count($pagination) > $maxPaginationLength - $ellipsisLength) {
$pagination = array_slice($pagination, -($paginationLength - $ellipsisLength + 1));
}
if (count($pagination['array']) > 1) {
$pagination['first'] = 1;
$pagination['last'] = $countPages;
} else {
$pagination = array();
}
}
return $pagination;
}
function spa_pagination($countPages, $currentPageNum, $paginationLength = 7) {
$pagination = array();
if ($countPages <= 1) {
return $pagination;
}
$from = max(1, min($countPages - $paginationLength + 1, $currentPageNum - 2));
$arr = range($from, min($countPages, $from + $paginationLength - 1));
$pagination = array_combine($arr, $arr);
return $pagination;
}
/**
* Print pagination
*
* @param array $link_args
* @param int $countPages
* @param int $currentPageNum
* @param int $paginationLength
* @param int $ellipsisLength
*/
function spa_print_pagination( $link_args, $countPages, $currentPageNum, $paginationLength = 8, $ellipsisLength = 2 ) {
$pagination = spa_pagination( $countPages, $currentPageNum, $paginationLength, $ellipsisLength ); ?>
<?php if ( $pagination ):
$load_type = isset( $link_args['load_type'] ) ? $link_args['load_type'] : 'ajax';
$url = $link_args['url'];
$nonce_action = $link_args['nonce_action'] ? $link_args['nonce_action'] : '';
$url_data_param = isset( $link_args['url_data_param'] ) ? $link_args['url_data_param'] : 'url';
$target = $link_args['target'] ? $link_args['target'] : '.sf-full-form';
$callback = $link_args['callback'] ? $link_args['callback'] : '';
$gif = $link_args['gif'] ? $link_args['gif'] : SPADMINIMAGES . 'sp_WaitBox.gif';
$link_callback = $link_args['link_callback'] ? $link_args['link_callback'] : '';
$anchor_tag_attrs = array();
$anchor_tag_attrs['href'] = '';
if( $load_type === 'ajax' ) {
$anchor_tag_attrs['target'] = 'data-target="'.$target.'"';
$anchor_tag_attrs['after_cb'] = 'data-after_cb="'.$callback.'"';
$anchor_tag_attrs['img'] = 'data-img="'.$gif.'"';
}
$anchor_ajax_class = $load_type === 'ajax' ? 'spLoadAjax' : '';
?>
<div class="sf-pagination">
<span class="sf-pagination-links">
<?php
$a_url = wp_nonce_url( str_replace( '{page_num}', '1', $url ), $nonce_action );
$href = $load_type === 'ajax' ? '#' : $a_url;
?>
<a class="sf-first-page <?php echo esc_attr($anchor_ajax_class); ?>"
<?php echo esc_attr(implode( ' ', $anchor_tag_attrs )); ?>
data-url="<?php echo esc_url($a_url); ?>"
href="<?php echo esc_url($href); ?>"
></a>
<?php foreach ( $pagination as $n => $v ):
$a_url = wp_nonce_url( str_replace( '{page_num}', $n, $url ), $nonce_action );
$href = $load_type === 'ajax' ? '#' : $a_url;
?>
<a class="<?php echo esc_attr($anchor_ajax_class . ($currentPageNum == $n ? ' sf-current-page' : '')); ?>"
<?php echo esc_attr(implode( ' ', $anchor_tag_attrs )); ?>
data-url="<?php echo esc_url($a_url); ?>"
href="<?php echo esc_url($href); ?>"
><?php echo esc_html($v); ?></a>
<?php endforeach;
$a_url = wp_nonce_url( str_replace( '{page_num}', $countPages, $url ), $nonce_action );
$href = $load_type === 'ajax' ? '#' : $a_url;
?>
<a class="sf-last-page <?php echo esc_attr($anchor_ajax_class); ?>"
<?php echo esc_attr(implode( ' ', $anchor_tag_attrs )); ?>
data-url="<?php echo esc_url($a_url); ?>"
href="<?php echo esc_url($href); ?>"
></a>
</span>
</div>
<?php endif;
}
/**
* Return list groups related to a user
*
* @global object $wpdb
* @param int $user_id
*
* @return array
*/
function spa_user_groups_list( $user_id ) {
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
"SELECT m.usergroup_id, ug.usergroup_name FROM " . SPMEMBERSHIPS . " AS m LEFT JOIN " . SPUSERGROUPS . " AS ug ON ug.usergroup_id = m.usergroup_id
WHERE m.user_id = %d",
$user_id
)
);
return $results;
}