/** * Generates a "lock" symbol for the "Protected" column, if the current content * is protected. See WP's template.php -> display_page_row() for more. * * @param type $column_name The name of the column to affect ('protected') * @param type $post_id The id of the page to check. */ public static function render_list_protection_column($column_name, $post_id) { //wp_die($column_name.' GOOGLE '.$post_id); //Only do this if we've got the right column if ($column_name === 'protected') { //If page is protected, return lock icon if (CTXPS_Queries::check_protection($post_id)) { CTX_Helper::img(array('alt' => __('Protected', 'contexture-page-security'), 'title' => __('Protected', 'contexture-page-security'), 'src' => CTXPSURL . 'images/protected-inline-2x.png', 'class' => "prot-icon prot-inline")); } else { if (CTXPS_Queries::check_section_protection($post_id)) { CTX_Helper::img(array('alt' => __('Protected (inherited)', 'contexture-page-security'), 'title' => __('Inheriting protection', 'contexture-page-security'), 'src' => CTXPSURL . 'images/protected-inline-descendant-2x.png', 'class' => "prot-icon prot-descendant")); //If theres no direct protection, is this content protected through term inheritance? } else { //If the post belongs to a protected term, show lighter (inherited) icon if (CTXPS_Queries::check_post_term_protection($post_id)) { CTX_Helper::img(array('alt' => __('Protected (inherited from term)', 'contexture-page-security'), 'title' => __('Inheriting protection from term', 'contexture-page-security'), 'src' => CTXPSURL . 'images/protected-inline-inherit-2x.png', 'class' => "prot-icon prot-inline-inherit")); } } } } }
/** * This function will check the security for the specified page and all parent pages. * If security exists, a multi-dimensional array will be returned following the format * array( pageid=>array(groupid=>groupname) ), with the first item being the current * page and additional items being parents. If no security is present for any ancestor * then the function will return false. * * @global wpdb $wpdb * * @param int $post_id The id of the post to get permissions for. * @param bool $include_terms Optional. Define whether or not term protection should be merged into page protection. * @return mixed Returns an array with all the required permissions to access this page. If no security is present, returns false. */ public static function get_post_protection($post_id, $include_terms = true) { //If this branch isn't protected, just stop now and save all that processing power if (!CTXPS_Queries::check_section_protection($post_id, true)) { return false; } //If we're still going, then it means something above us is protected, so lets get the list of permissions global $wpdb; $return = array(); $group_array = array(); /**Gets the parent id of the current page/post*/ $parent_id = get_post($post_id); $parent_id = (int) $parent_id->post_parent; /** 1. If I am secure, get my groups ***********************************/ //Get Group relationship info for this page $groups = CTXPS_Queries::get_groups_by_object('post', $post_id, true); //If 0 results, dont do anything. Otherwise, re-sort into id=>name array if (!empty($groups)) { foreach ($groups as $group) { $group_array[$group->group_id] = $group->group_title; } unset($group); } unset($groups); //Add an item to the array. 'pageid'=>array('groupid','groupname') $return[(string) $post_id] = $group_array; unset($group_array); /** 1b. Get term protections *******************************************/ if ($include_terms) { //If term protection exists for this post, get the array if (CTXPS_Queries::check_post_term_protection($post_id)) { //Term branch is protected, get attached groups $termreqs = CTXPS_Queries::get_groups_by_post_terms($post_id); //Merge those changes back into $pagereqs $return[(string) $post_id] += $termreqs; } } //wp_die('|||'.print_r($termreqs,true)); //wp_die('|||'.print_r($return[(string)$post_id],true)); /** 2. If I have a parent, recurse ************************************/ //Using our earlier results, check post_parent. If it's != 0 then recurse this function, adding the return value to $array if ($parent_id != 0) { //$recursedArray = CTXPS_Security::get_protection($parentid); //$array = array_merge($array,$recursedArray); $parent_array = self::get_post_protection($parent_id, $include_terms); if (!!$parent_array) { $return += $parent_array; } } //3. Return the completed $array return $return; }