/** * Main cnRole Instance. * * Insures that only one instance of cnRole exists at any one time. * * @access public * @since 0.7.5 * @return object cnRole */ public static function getInstance() { if (!isset(self::$instance)) { /* * Initiate an instance of the class. */ self::$instance = new self(); } return self::$instance; }
/** * Callback for the "Login Required" settings field. * This ensure all roles are set to have the connections_view_public * capability to ensures all roles can at least view the public entries. * * @access private * @since 0.7.3 * * @param $loginRequired * * @return int */ public static function setAllowPublic($loginRequired) { global $wp_roles; if ($loginRequired) { if (!isset($wp_roles)) { $wp_roles = new WP_Roles(); } $roles = $wp_roles->get_names(); foreach ($roles as $role => $name) { cnRole::add($role, 'connections_view_public'); } } return $loginRequired; }
/** * Update the role settings. * * @access private * @since 0.7.5 * @uses current_user_can() * @uses check_admin_referer() * @uses wp_redirect() * @uses get_admin_url() * @uses get_current_blog_id() * @return void */ public static function updateRoleCapabilities() { /** @var $wp_roles WP_Roles */ global $wp_roles; $form = new cnFormObjects(); /* * Check whether user can edit roles */ if (current_user_can('connections_change_roles')) { check_admin_referer($form->getNonce('update_role_settings'), '_cn_wpnonce'); if (isset($_POST['roles'])) { // Cycle thru each role available because checkboxes do not report a value when not checked. foreach ($wp_roles->get_names() as $role => $name) { if (!isset($_POST['roles'][$role])) { continue; } foreach ($_POST['roles'][$role]['capabilities'] as $capability => $grant) { // the administrator should always have all capabilities if ($role == 'administrator') { continue; } if ($grant == 'true') { cnRole::add(esc_attr($role), esc_attr($capability)); } else { cnRole::remove(esc_attr($role), esc_attr($capability)); } } } } if (isset($_POST['reset'])) { cnRole::reset(array_map('esc_attr', $_POST['reset'])); } if (isset($_POST['reset_all'])) { cnRole::reset(); } cnMessage::set('success', 'role_settings_updated'); wp_redirect(get_admin_url(get_current_blog_id(), 'admin.php?page=connections_roles')); exit; } else { cnMessage::set('error', 'capability_roles'); } }
/** * During activation this will initiate the options. */ private function initOptions() { $version = $this->options->getVersion(); switch (TRUE) { /** @noinspection PhpMissingBreakStatementInspection */ case version_compare($version, '0.7.3', '<'): /* * Retrieve the settings stored prior to 0.7.3 and migrate them * so they will be accessible in the structure supported by the * Connections WordPress Settings API Wrapper Class. */ if (FALSE !== get_option('connections_options')) { $options = get_option('connections_options'); if (FALSE === get_option('connections_login')) { update_option('connections_login', array('required' => $options['settings']['allow_public'], 'message' => 'Please login to view the directory.')); } if (FALSE === get_option('connections_visibility')) { update_option('connections_visibility', array('allow_public_override' => $options['settings']['allow_public_override'], 'allow_private_override' => $options['settings']['allow_private_override'])); } if (FALSE === get_option('connections_image_thumbnail')) { update_option('connections_image_thumbnail', array('quality' => $options['settings']['image']['thumbnail']['quality'], 'width' => $options['settings']['image']['thumbnail']['x'], 'height' => $options['settings']['image']['thumbnail']['y'], 'ratio' => $options['settings']['image']['thumbnail']['crop'])); } if (FALSE === get_option('connections_image_medium')) { update_option('connections_image_medium', array('quality' => $options['settings']['image']['entry']['quality'], 'width' => $options['settings']['image']['entry']['x'], 'height' => $options['settings']['image']['entry']['y'], 'ratio' => $options['settings']['image']['entry']['crop'])); } if (FALSE === get_option('connections_image_large')) { update_option('connections_image_large', array('quality' => $options['settings']['image']['profile']['quality'], 'width' => $options['settings']['image']['profile']['x'], 'height' => $options['settings']['image']['profile']['y'], 'ratio' => $options['settings']['image']['profile']['crop'])); } if (FALSE === get_option('connections_image_logo')) { update_option('connections_image_logo', array('quality' => $options['settings']['image']['logo']['quality'], 'width' => $options['settings']['image']['logo']['x'], 'height' => $options['settings']['image']['logo']['y'], 'ratio' => $options['settings']['image']['logo']['crop'])); } if (FALSE === get_option('connections_compatibility')) { update_option('connections_compatibility', array('google_maps_api' => $options['settings']['advanced']['load_google_maps_api'], 'javascript_footer' => $options['settings']['advanced']['load_javascript_footer'])); } if (FALSE === get_option('connections_debug')) { update_option('connections_debug', array('debug_messages' => $options['debug'])); } unset($options); } /** @noinspection PhpMissingBreakStatementInspection */ /** @noinspection PhpMissingBreakStatementInspection */ case version_compare($version, '0.7.4', '<'): /* * The option to disable keyword search was added in version 0.7.4. Set this option to be enabled by default. */ $options = get_option('connections_search'); $options['keyword_enabled'] = 1; update_option('connections_search', $options); unset($options); /** @noinspection PhpMissingBreakStatementInspection */ /** @noinspection PhpMissingBreakStatementInspection */ case version_compare($version, '0.8', '<'): /* * The option to disable keyword search was added in version 0.7.4. Set this option to be enabled by default. */ $options = get_option('connections_compatibility'); $options['css'] = 1; update_option('connections_compatibility', $options); unset($options); $options = get_option('connections_display_results'); $options['search_message'] = 1; update_option('connections_display_results', $options); unset($options); } if (NULL === $this->options->getDefaultTemplatesSet()) { $this->options->setDefaultTemplates(); } // Class used for managing role capabilities. if (!class_exists('cnRole')) { require_once CN_PATH . 'includes/admin/class.capabilities.php'; } if (TRUE != $this->options->getCapabilitiesSet()) { cnRole::reset(); $this->options->defaultCapabilitiesSet(TRUE); } // Increment the version number. $this->options->setVersion(CN_CURRENT_VERSION); // Save the options $this->options->saveOptions(); /* * This option is added for a check that will force a flush_rewrite() in connectionsLoad::adminInit() once. * Should save the user from having to "save" the permalink settings. */ update_option('connections_flush_rewrite', '1'); }
function connectionsShowRolesPage() { /* * Check whether user can edit roles */ if (!current_user_can('connections_change_roles')) { wp_die('<p id="error-page" style="-moz-background-clip:border; -moz-border-radius:11px; background:#FFFFFF none repeat scroll 0 0; border:1px solid #DFDFDF; color:#333333; display:block; font-size:12px; line-height:18px; margin:25px auto 20px; padding:1em 2em; text-align:center; width:700px">' . __('You do not have sufficient permissions to access this page.', 'connections') . '</p>'); } else { global $connections, $wp_roles; $form = new cnFormObjects(); ?> <div class="wrap cn-roles"> <?php echo get_screen_icon('connections'); ?> <h2>Connections : <?php _e('Roles & Capabilities', 'connections'); ?> </h2> <?php $attr = array('action' => '', 'method' => 'post'); $form->open($attr); $form->tokenField('update_role_settings'); ?> <div id="poststuff" class="metabox-holder has-right-sidebar"> <div class="inner-sidebar" id="side-info-column"> <div id="submitdiv" class="postbox"> <h3 class="hndle" style="cursor: auto;"> <span><?php _e('Save Changes or Reset', 'connections'); ?> </span> </h3> <div class="inside"> <div id="minor-publishing"> <label for="reset_all_roles"> <input type="checkbox" id="reset_all_roles" name="reset_all" value="true"> <?php _e('Reset All Role Capabilities', 'connections'); ?> </label> </div> <div id="major-publishing-actions"> <div id="publishing-action"> <input type="hidden" name="cn-action" value="update_role_capabilities"/> <input class="button-primary" type="submit" value="<?php _e('Update', 'connections'); ?> " name="save" /> </div> <div class="clear"></div> </div> </div> </div> </div> <div class="has-sidebar" id="post-body"> <div class="has-sidebar-content" id="post-body-content"> <?php $editable_roles = get_editable_roles(); foreach ($editable_roles as $role => $details) { $name = translate_user_role($details['name']); // the admininistrator should always have all capabilities if ($role == 'administrator') { continue; } $capabilies = cnRole::capabilities(); echo '<div class="postbox">'; echo '<h3 class="hndle" style="cursor: auto;"><span>', $name, '</span></h3>'; echo '<div class="inside">'; foreach ($capabilies as $capability => $capabilityName) { // if unregistered users are permitted to view the entry list there is no need for setting this capability if ($capability == 'connections_view_public' && $connections->options->getAllowPublic() == true) { continue; } echo '<span style="display: block;"><label for="' . $role . '_' . $capability . '">'; echo '<input type="hidden" name="roles[' . $role . '][capabilities][' . $capability . ']" value="false" />'; echo '<input type="checkbox" id="' . $role . '_' . $capability . '" name="roles[' . $role . '][capabilities][' . $capability . ']" value="true" '; if (cnRole::hasCapability($role, $capability)) { echo 'CHECKED '; } // the admininistrator should always have all capabilities if ($role == 'administrator') { echo 'DISABLED '; } echo '/> ' . $capabilityName . '</label></span>' . "\n"; } echo '<span style="display: block;"><label for="' . $role . '_reset_capabilities">'; echo '<input type="checkbox" id="' . $role . '_reset_capabilities" name="reset[' . $role . ']" value="' . $name . '" /> '; echo sprintf(__('Reset %s Capabilities', 'connections'), $name) . '</label></span>' . "\n"; echo '</div>'; echo '</div>'; } ?> </div> </div> </div> <?php $form->close(); ?> </div> <div class="clear"></div> <?php } }