WordPress.org

Plugin Directory

Changeset 638127


Ignore:
Timestamp:
12/13/12 00:08:53 (16 months ago)
Author:
williamsba1
Message:

Pushing version 1.2.2 of CollabPress

Location:
collabpress/trunk
Files:
2 added
17 edited

Legend:

Unmodified
Added
Removed
  • collabpress/trunk/cp-loader.php

    r442756 r638127  
    44Plugin URI: http://collabpress.org/ 
    55Description: A Project Management Plugin for WordPress 
    6 Version: 1.2.1 
     6Version: 1.2.2 
    77Author: WebDevStudios.com 
    88Author URI: http://webdevstudios.com/ 
     
    2727 
    2828// CollabPress Define(s) 
    29 define( 'CP_VERSION', '1.2.1' ); 
     29define( 'CP_VERSION', '1.2.2' ); 
    3030define( 'CP_BASENAME', plugin_basename(__FILE__) ); 
    3131define( 'CP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 
  • collabpress/trunk/includes/admin_init.php

    r442577 r638127  
    44add_action( 'admin_init', 'cp_admin_init' ); 
    55function cp_admin_init() { 
     6     
    67    // Register CollabPress options 
    78    register_setting( 'cp_options_group', 'cp_options' ); 
     9     
     10    //add CP user capabilities to the built in accounts 
     11    global $wp_roles; 
     12 
     13    // add capabilities to Client user role 
     14    $wp_roles->add_cap( 'administrator', 'cp_add_projects' ); 
     15    $wp_roles->add_cap( 'administrator', 'cp_edit_projects' ); 
     16    $wp_roles->add_cap( 'administrator', 'cp_add_task_lists' ); 
     17    $wp_roles->add_cap( 'administrator', 'cp_edit_task_lists' ); 
     18    $wp_roles->add_cap( 'administrator', 'cp_add_task' ); 
     19    $wp_roles->add_cap( 'administrator', 'cp_edit_task' ); 
     20 
     21    $wp_roles->add_cap( 'editor', 'cp_add_projects' ); 
     22    $wp_roles->add_cap( 'editor', 'cp_edit_projects' ); 
     23    $wp_roles->add_cap( 'editor', 'cp_add_task_lists' ); 
     24    $wp_roles->add_cap( 'editor', 'cp_edit_task_lists' ); 
     25    $wp_roles->add_cap( 'editor', 'cp_add_task' ); 
     26    $wp_roles->add_cap( 'editor', 'cp_edit_task' ); 
     27     
     28    $wp_roles->add_cap( 'author', 'cp_add_projects' ); 
     29    $wp_roles->add_cap( 'author', 'cp_edit_projects' ); 
     30    $wp_roles->add_cap( 'author', 'cp_add_task_lists' ); 
     31    $wp_roles->add_cap( 'author', 'cp_edit_task_lists' ); 
     32    $wp_roles->add_cap( 'author', 'cp_add_task' ); 
     33    $wp_roles->add_cap( 'author', 'cp_edit_task' ); 
     34     
     35    $wp_roles->add_cap( 'contributor', 'cp_add_projects' ); 
     36    $wp_roles->add_cap( 'contributor', 'cp_edit_projects' ); 
     37    $wp_roles->add_cap( 'contributor', 'cp_add_task_lists' ); 
     38    $wp_roles->add_cap( 'contributor', 'cp_edit_task_lists' ); 
     39    $wp_roles->add_cap( 'contributor', 'cp_add_task' ); 
     40    $wp_roles->add_cap( 'contributor', 'cp_edit_task' ); 
     41     
     42    $wp_roles->add_cap( 'subscriber', 'cp_add_projects' ); 
     43    $wp_roles->add_cap( 'subscriber', 'cp_edit_projects' ); 
     44    $wp_roles->add_cap( 'subscriber', 'cp_add_task_lists' ); 
     45    $wp_roles->add_cap( 'subscriber', 'cp_edit_task_lists' ); 
     46    $wp_roles->add_cap( 'subscriber', 'cp_add_task' ); 
     47    $wp_roles->add_cap( 'subscriber', 'cp_edit_task' ); 
     48     
    849} 
    950 
     
    113154    // Register CollabPress Meta Data 
    114155    register_post_type( 'cp-meta-data', $args_tasks ); 
    115  
    116     do_action( 'cp_registered_post_types' ); 
     156     
     157    // Let other plugins (and the BuddyPress compatibility module) know that we've registered 
     158    do_action( 'cp_registered_post_types' );  
    117159 
    118160} 
  • collabpress/trunk/includes/cp-bp-groups.php

    r442577 r638127  
    2424    var $group_settings; 
    2525    var $calendar_enable; 
     26    var $create_role; 
     27    var $edit_delete_role; 
    2628 
    2729    var $cp_link; 
     
    6365        // Grab the group settings for use throughout 
    6466        $this->group_settings = groups_get_groupmeta( $this->maybe_group_id, 'collabpress' ); 
     67        if ( empty( $this->group_settings ) ) { 
     68            $this->group_settings = array(); 
     69        } 
    6570 
    6671        // Should we enable the group tab? 
     
    102107        $this->nav_item_position = 31; 
    103108 
     109        // Allow users to edit/delete items based on group settings 
     110        add_filter( 'cp_settings_user_role', array( &$this, 'has_cap_edit' ), 10, 2 ); 
     111        add_filter( 'map_meta_cap', array( &$this, 'map_meta_cap' ), 10, 4 ); 
     112 
    104113        if ( bp_is_group() ) { 
    105114            // Set up the group's CP link 
     
    118127            } 
    119128 
     129            // Get the settings for create and edit/delete roles 
     130            $this->create_role = isset( $this->group_settings['create_role'] ) ? $this->group_settings['create_role'] : 'group-members'; 
     131            $this->edit_delete_role = isset( $this->group_settings['edit_delete_role'] ) ? $this->group_settings['edit_delete_role'] : 'admins-mods-owners'; 
     132 
    120133            // Enable the calendar tab if necessary 
    121134            $this->calendar_enable = !isset( $this->group_settings['calendar_enable'] ) || 'enabled' == $this->group_settings['calendar_enable']; 
     
    141154        add_action( 'wp_print_styles', array( &$this, 'enqueue_styles' ) ); 
    142155        $this->enqueue_scripts(); 
     156    } 
     157 
     158    /** 
     159     * There are some places in CP where permissions are checked against a cp_ cap. This 
     160     * method adds a proper filter to map_meta_cap to alter the permissions for BP groups. 
     161     * 
     162     * @see self::has_cap_edit() for a second mechanism 
     163     */ 
     164    function map_meta_cap( $caps, $cap, $user_id, $args ) { 
     165 
     166        // Only mess with this stuff on the BP side 
     167        if ( !bp_is_group() ) { 
     168            return $caps; 
     169        } 
     170 
     171        switch ( $cap ) { 
     172            case 'cp_add_task_lists' : 
     173            case 'cp_edit_projects' : 
     174            case 'cp_add_task' : 
     175            case 'cp_edit_task_lists' : 
     176            case 'cp_edit_task' : 
     177 
     178                if ( isset( $this->group_settings['edit_delete_role'] ) && 'admins-mods-owners' == $this->group_settings['edit_delete_role'] ) { 
     179                    if ( groups_is_user_admin( $user_id, bp_get_current_group_id() ) || groups_is_user_mod( $user_id, bp_get_current_group_id() ) ) { 
     180                        $caps = array( 'exist' ); 
     181                    } else { 
     182                        if ( 'cp_edit_task' == $cap ) { 
     183                            // In the case of cp_edit_task, get_the_ID() 
     184                            // does not reliably fetch the task's post // ID. So we get it manually, based on URL 
     185                            $tasks_query = new WP_Query( array( 'name' => bp_action_variable( 2 ), 'post_type' => 'cp-tasks' ) ); 
     186 
     187                            if ( $tasks_query->have_posts() ) { 
     188                                // The regular WP_Query loop doesn't 
     189                                // work right? 
     190                                $post_author = $tasks_query->post->post_author; 
     191                            } 
     192                        } else { 
     193                            $post = get_post( get_the_ID() ); 
     194                            $post_author = isset( $post->post_author ) ? $post->post_author : 0; 
     195                        } 
     196 
     197                        if ( !empty( $post_author ) && $user_id == $post_author ) { 
     198                            $caps = array( 'exist' ); 
     199                        } else { 
     200                            $caps = array( 'do_not_allow' ); 
     201                        } 
     202                    } 
     203 
     204                } else { 
     205                    if ( groups_is_user_member( $user_id, bp_get_current_group_id() ) ) { 
     206                        $caps = array( 'exist' ); 
     207                    } else { 
     208                        $caps = array( 'do_now_allow' ); 
     209                    } 
     210                } 
     211 
     212                break; 
     213 
     214            case 'cp_add_projects' : 
     215                // In the case of cp_add_projects, there is no current project to 
     216                // check authorship against 
     217 
     218                if ( isset( $this->group_settings['edit_delete_role'] ) && 'admins-mods-owners' == $this->group_settings['edit_delete_role'] ) { 
     219                    if ( groups_is_user_admin( $user_id, bp_get_current_group_id() ) || groups_is_user_mod( $user_id, bp_get_current_group_id() ) ) { 
     220                        $caps = array( 'exist' ); 
     221                    } else { 
     222                        $caps = array( 'do_not_exist' ); 
     223                    } 
     224                } else { 
     225                    if ( groups_is_user_member( $user_id, bp_get_current_group_id() ) ) { 
     226                        $caps = array( 'exist' ); 
     227                    } else { 
     228                        $caps = array( 'do_now_allow' ); 
     229                    } 
     230                } 
     231 
     232                break; 
     233 
     234        } 
     235 
     236        return $caps; 
     237    } 
     238 
     239    /** 
     240     * In some places in CP, cp_check_permissions() is used as a wrapper for current_user_can(), 
     241     * which maps against a built-in user role rather than a custom cp_ cap. This method 
     242     * requires a different kind of workaround from map_meta_cap() (above). 
     243     */ 
     244    function has_cap_edit( $retval, $type ) { 
     245 
     246        if ( bp_is_group() ) { 
     247            $edit_delete_role = isset( $this->group_settings['edit_delete_role'] ) ? $this->group_settings['edit_delete_role'] : ''; 
     248            switch( $edit_delete_role ) { 
     249                case 'admins-mods-owners' : 
     250                    // The way that CP handles redirects is inconsistent, 
     251                    // so we do some manual checks to make sure a delete GET 
     252                    // argument is for real 
     253                    if ( isset( $_GET['cp-delete-task-id'] ) ) { 
     254                        $maybe_item_id = $_GET['cp-delete-task-id']; 
     255                    } else if ( isset( $_GET['cp-delete-task-list-id'] ) ) { 
     256                        $maybe_item_id = $_GET['cp-delete-task-list-id']; 
     257                    } 
     258 
     259                    if ( !empty( $maybe_item_id ) ) { 
     260                        $maybe_item = get_post( $maybe_item_id ); 
     261 
     262                        if ( isset( $maybe_item->post_status ) && 'trash' != $maybe_item->post_status ) { 
     263                            $is_delete_attempt = true; 
     264                        } 
     265                    } 
     266 
     267                    // Check to see whether this is the main project loop, 
     268                    // in which case there's no item author 
     269                    if ( !bp_action_variables() ) { 
     270                        $is_project_list = true; 
     271                    } 
     272 
     273                    if ( isset( $_POST['cp-edit-task-id'] ) ) { 
     274                        $item_id = $_POST['cp-edit-task-id']; 
     275                        $item = get_post( $item_id ); 
     276                        $item_author = $item->post_author; 
     277                    } else if ( isset( $_POST['cp-edit-task-list-id'] ) ) { 
     278                        $item_id = $_POST['cp-edit-task-list-id']; 
     279                        $item = get_post( $item_id ); 
     280                        $item_author = $item->post_author; 
     281                    } else if ( isset( $_POST['cp-edit-project-id'] ) ) { 
     282                        $item_id = $_POST['cp-edit-project-id']; 
     283                        $item = get_post( $item_id ); 
     284                        $item_author = $item->post_author; 
     285                    } else if ( !empty( $is_delete_attempt ) ) { 
     286                        $item_author = $maybe_item->post_author; 
     287                    } else if ( !empty( $is_project_list ) ) { 
     288                        $item_author = 0; 
     289                    } else { 
     290                        $item_author = get_the_author_meta( 'ID' ); 
     291                    } 
     292 
     293                    if ( groups_is_user_admin( bp_loggedin_user_id(), bp_get_current_group_id() ) || groups_is_user_mod( bp_loggedin_user_id(), bp_get_current_group_id() ) || $item_author == bp_loggedin_user_id() ) { 
     294                        $retval = 'exist'; 
     295                    } else { 
     296                        $retval = 'do_not_allow'; 
     297                    } 
     298                    break; 
     299 
     300                case 'group-members' : 
     301                    if ( groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
     302                        $retval = 'exist'; 
     303                    } else { 
     304                        $retval = 'do_not_allow'; 
     305                    } 
     306 
     307                    break; 
     308            } 
     309        } 
     310 
     311        return $retval; 
    143312    } 
    144313 
     
    391560        <?php endif ?> 
    392561 
     562        <table class="group-collabpress-options" id="cp-settings"> 
     563            <?php /* Not yet implemented */ /* 
     564            <tr> 
     565                <th scope="row"><label for="collabpress[create_role]"><?php _e( 'Who can create new items in this group?', 'collabpress' ); ?></label></th> 
     566 
     567                <td> 
     568                    <select name="collabpress[create_role]"> 
     569                        <option value="group-members" <?php selected( $this->create_role, 'group-members' ) ?>><?php _e( 'Any group member', 'collabpress' ) ?></option> 
     570                        <option value="admins-mods" <?php selected( $this->create_role, 'admins-mods' ) ?>><?php _e( 'Admins and mods only', 'collabpress' ) ?></option> 
     571                    </select> 
     572                </td> 
     573            </tr> 
     574            */ ?> 
     575 
     576            <tr> 
     577                <th scope="row"><label for="collabpress[edit_delete_role]"><?php _e( 'Who in this group can edit and delete existing items?', 'collabpress' ); ?></label></th> 
     578 
     579                <td> 
     580                    <select name="collabpress[edit_delete_role]"> 
     581                        <option value="group-members" <?php selected( $this->edit_delete_role, 'group-members' ) ?>><?php _e( 'Any group member', 'collabpress' ) ?></option> 
     582                        <option value="admins-mods-owners" <?php selected( $this->edit_delete_role, 'admins-mods-owners' ) ?>><?php _e( 'Admin, moderators, and owners only', 'collabpress' ) ?></option> 
     583                    </select> 
     584                </td> 
     585            </tr> 
     586        </table> 
     587 
    393588        <table class="group-collabpress-options" id="cp-calendar"> 
    394589            <tr> 
     
    491686 
    492687    function user_list_html( $html, $selected ) { 
    493         if ( bp_group_has_members( array( 'exclude_admins_mods' => false ) ) ) { 
     688        if ( bp_group_has_members( array( 
     689            'exclude_admins_mods' => false, 
     690            'per_page'        => false, 
     691            'max'             => false, 
     692        ) ) ) { 
     693            global $members_template; 
     694 
     695            usort( $members_template->members, array( &$this, 'sort_by_display_name_cb' ) ); 
     696 
    494697            $html = '<select name="cp-task-assign" id="cp-task-assign">'; 
    495698            while ( bp_group_members() ) { 
     
    503706        } 
    504707        return $html; 
     708    } 
     709 
     710    function sort_by_display_name_cb( $a, $b ) { 
     711        if ( $a->display_name == $b->display_name ) { 
     712            return 0; 
     713        } 
     714 
     715        return strtolower( $a->display_name ) < strtolower( $b->display_name ) ? -1 : 1; 
    505716    } 
    506717 
     
    592803        $terms = wp_get_post_terms( $item->ID, 'cp-bp-group' ); 
    593804 
    594         if ( !empty( $terms ) ) { 
     805        if ( !is_wp_error( $terms ) && !empty( $terms ) ) { 
    595806            // Take the first term for now. Todo: figure this out 
    596807            $term = $terms[0]; 
  • collabpress/trunk/includes/cp-bp.php

    r442577 r638127  
    244244     */ 
    245245    function render_settings() { 
     246 
     247        // Only show to super admins 
     248        if ( !is_super_admin() ) { 
     249            return; 
     250        } 
    246251 
    247252        $options = cp_get_options(); 
  • collabpress/trunk/includes/css/bp.css

    r442577 r638127  
    3535    } 
    3636 
     37 
    3738.cp-meta-box h4 { 
    3839    background-color: #f1f1f1; 
    3940    padding: 4px 8px; 
    4041    margin: 0; 
     42    cursor: pointer; 
     43} 
     44 
     45.cp-new-project h4, 
     46.cp-add-task-list h4, 
     47.cp-add-task h4 { 
     48    background: #f1f1f1 url(../images/add_16.png) no-repeat 8px 6px; 
     49    padding-left: 30px; 
    4150} 
    4251 
  • collabpress/trunk/includes/css/front.css

    r442577 r638127  
    77    border:0 none; 
    88} 
     9 
     10 
     11#collabpress { font: normal 15px/20px "Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif; } 
     12 
     13#collabpress input[type="button"], #collabpress input[type="submit"], #collabpress .button { padding: 7px 13px; float: right; } 
     14#collabpress table { border-collapse: collapse; } 
     15#collabpress table th, #collabpress table td { padding: 8px; } 
     16 
     17#collabpress .faux-link { cursor: pointer; } 
     18 
     19#collabpress .updated {  
     20    background-color: #FDF5D9; 
     21    padding: 15px; 
     22    margin: 5px; 
     23    border-color: #FCEEC1; 
     24    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 
     25    border-width: 1px; 
     26    border-style: solid; 
     27    -webkit-border-radius: 4px; 
     28    -moz-border-radius: 4px; 
     29    border-radius: 4px; 
     30} 
     31#collabpress ul { margin-left: 16px; } 
    932#collabpress ul li { padding: 0 0 0 15px; } 
    10  
    11 #collabpress { font: normal 15px/20px "Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif; } 
    1233 
    1334#collabpress h1, #collabpress h2, #collabpress h3, #collabpress h4, #collabpress h5, #collabpress h6 { font-family:Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif; } 
     
    2950#collabpress .cp_task_summary .cp_task_meta img { vertical-align: middle; padding: 5px; } 
    3051 
     52#collabpress .cp_task_summary form.add-time { padding: 10px; margin: 5px 0 0 0; } 
     53#collabpress .cp_task_summary form.add-time th { text-align: right; } 
     54#collabpress .cp_task_summary form.add-time input[type="submit"] { float: none; } 
     55#collabpress .cp_task_summary .time-icon { background: url("../images/cp-task-icons.png") no-repeat scroll left -128px transparent; margin: 0 0 0 5px; padding: 0 0 0 25px; cursor: pointer; } 
     56 
    3157#collabpress p.description, .cp_none { font: italic 14px/24px georgia, serif; } 
    3258#collabpress .cp_none { color:#777; } 
     
    4369#collabpress .updated { padding:3px; margin:0 0 10px 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background: #FDE794; border:1px solid #F7C039; text-align:center; font-size:12px; } 
    4470#collabpress .updated p { margin: 0 !important; padding:0 !important; } 
    45 #cp_task_comments_wrap .cp_task_comment { clear:both; overflow:hidden; margin:5px 0; } 
    46 #cp_task_comments_wrap .cp_task_comment img.avatar { float:left; margin:0 15px 0 0; } 
     71 
     72#cp_task_comments_wrap .cp_task_comment {  
     73    clear: both; 
     74    overflow: hidden; 
     75    margin: 15px; 
     76    padding: 5px; 
     77} 
     78#cp_task_comments_wrap .cp_task_comment.even { 
     79    background: #F8F7F7; 
     80} 
     81#cp_task_comments_wrap .cp_task_comment img.avatar {  
     82    float: left; 
     83    margin: 0 15px 0 0; 
     84    padding: 5px; 
     85    border: solid 1px #EEE; 
     86} 
     87img.avatar-16 { 
     88    background: none transparent; 
     89    border 0 none; 
     90} 
     91#collabpress .cp_task_comment_content { 
     92    margin: 0 0 0 95px; 
     93} 
     94#collabpress .cp_comment_author { 
     95    font-weight: bold; 
     96} 
     97 
    4798/* CP Breadcrumb */ 
    4899#collabpress #cp_breadcrumb { 
     
    52103    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; 
    53104    font-size: 11px; 
    54     margin: 0 0 15px; 
     105    margin: 0; 
    55106    overflow: hidden; 
    56107    padding: 0; 
    57108    width: 100%; 
    58109} 
    59  
     110#collabpress #page_header { 
     111    background: #EEE; 
     112    padding: 10px; 
     113    margin: 0 0 15px 0; 
     114    border-bottom: 5px solid #5D676F; 
     115    white-space: pre-line; 
     116} 
     117#collabpress #page_header h2 { 
     118    padding: 0 25px; 
     119} 
     120#collabpress #page_header p { 
     121    border: 1px solid #DDD; 
     122    margin: 16px 10px; 
     123    background: white; 
     124    border-bottom: 2px solid #BBB; 
     125    border-right: 2px solid #CCC; 
     126    padding: 10px; 
     127} 
    60128#collabpress #cp_breadcrumb ul { 
    61129    margin:0; 
     
    99167    } 
    100168/* Add new project form */ 
     169 
     170#collabpress form p { 
     171    width: 95%; 
     172    margin: 0 auto; 
     173    padding: 5px; 
     174} 
     175 
    101176#collabpress .form-table, #collabpress .form-table input, #collabpress .form-table textarea { 
    102177    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 
     
    172247} 
    173248#collabpress .form-table p { 
    174 margin: 0 !important; 
    175 } 
     249    margin: 0 !important; 
     250} 
     251 
     252#collabpress form { 
     253    background: #F8F7F7; 
     254    border: 2px solid #EEE; 
     255    padding: 15px; 
     256    overflow: hidden; 
     257    margin: 35px 0 0 0; 
     258} 
     259#collabpress form h2 { 
     260    font-size: 18px; 
     261    border-bottom: 5px solid #5D676F; 
     262} 
  • collabpress/trunk/includes/functions.php

    r442577 r638127  
    144144            $cp_task_list_id = get_post_meta( $cp_task->id, '_cp-task-list-id', true ); 
    145145 
    146             echo '<li class="dash-crumb"><a href="' .CP_DASHBOARD. '">'.__('Dashboard', 'collabpress').'</a></li><li class="proj-crumb"><a href="'.CP_DASHBOARD.'&project='.$cp_project_id.'">' .get_the_title($cp_project_id). '</a></li><li class="list-crumb"><a href="'.CP_DASHBOARD.'&project='.$cp_project_id.'&task-list='.$cp_task_list_id.'">' .get_the_title( $cp_task_list_id ). '</a></li><li class="task-crumb"><span>' .get_the_title( $cp_task->id ).'</span></li>'; 
     146            echo '<li class="dash-crumb"><a href="' .CP_DASHBOARD. '">'.__('Dashboard', 'collabpress').'</a></li><li class="proj-crumb"><a href="'.CP_DASHBOARD.'&project='.$cp_project_id.'">' .get_the_title($cp_project_id). '</a></li><li class="list-crumb"><a href="'.CP_DASHBOARD.'&project='.$cp_project_id.'&task-list='.$cp_task_list_id.'">' .get_the_title( $cp_task_list_id ). '</a></li><li class="task-crumb"><span>' .cp_limit_length( get_the_title( $cp_task->id ), 50 ).'</span></li>'; 
    147147 
    148148        else : 
     
    306306// List CollabPress Users 
    307307function cp_users( $limit='yes' ) { 
    308     global $wpdb; 
    309308 
    310309    //using a custom query for now 
    311310    //will update with WP_User_Query when WP 3.1 is released 
    312311    //http://wpdevel.wordpress.com/2010/10/07/wp_user_search-has-been-replaced-by-wp_u/ 
    313     $users = $wpdb->get_results( $wpdb->prepare( "SELECT ID from $wpdb->users ORDER BY ID" ) ); 
     312    $users = get_users(); 
    314313    $cp_users_count = count( $users ); 
    315314 
     
    528527    while( $task_list_query->have_posts() ) : $task_list_query->the_post(); 
    529528 
     529    //CHECK IF USER CAN ADD TASKS CAPABILITY 
     530    if ( current_user_can( 'cp_add_task' ) ) { 
     531 
    530532        echo '<form action="'.cp_clean_querystring().'" method="post">'; 
    531533            wp_nonce_field('cp-add-task'); 
    532534            ?> 
     535            <h2>Add Task</h2> 
    533536            <table class="form-table"> 
    534537                <tbody> 
     
    595598        echo '</form>'; 
    596599 
     600    } 
     601 
    597602    endwhile; 
    598603    wp_reset_query(); 
     
    604609    global $cp_task, $cp_project; 
    605610 
    606     echo '<form action="" method="post">'; 
    607         wp_nonce_field('cp-edit-task'); 
    608         ?> 
    609         <input type="hidden" name="cp-edit-task-id" value="<?php echo $cp_task->id ?>" /> 
    610         <table class="form-table"> 
    611             <tbody> 
    612                 <tr valign="top"> 
    613                     <th scope="row"><?php _e('Description: ', 'collabpress') ?></th> 
    614                     <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
    615                         <p><label for="cp-task"></label></p> 
    616                         <p> 
    617                             <textarea class="large-text code" id="cp-task" cols="30" rows="10" name="cp-task"><?php echo get_the_title($cp_task->id) ?></textarea> 
    618                         </p> 
    619                     </fieldset></td> 
    620                 </tr> 
    621                 <tr valign="top"> 
    622                     <th scope="row"><label for="cp-task-due"><?php _e('Due: ', 'collabpress') ?></label></th> 
    623                     <td><p><input name="cp-task-due" id="datepicker" class="regular-text" type="text" value="<?php echo get_post_meta($cp_task->id, '_cp-task-due', true) ?>"/></p></td> 
    624                 </tr> 
    625                 <tr valign="top"> 
    626                     <th scope="row"><label for="cp-task-assign"><?php _e('Assigned to: ', 'collabpress') ?></label></th> 
    627                     <td> 
    628                         <p> 
    629                             <?php 
    630                             $selected = get_post_meta( $cp_task->id, '_cp-task-assign', true ); 
    631  
    632                             $wp_user_search = new WP_User_Query( array( 'fields' => 'all' ) ); 
    633                             $wp_users = $wp_user_search->get_results(); 
    634  
    635                             $users = '<select name="cp-task-assign" id="cp-task-assign">'; 
    636                             foreach ( $wp_users as $wp_user ) { 
    637                                 //verify user has access to this project 
    638                                 if ( cp_check_project_permissions ( $wp_user->ID, $cp_project->id ) ) { 
    639                                     $users .= '<option value="' . $wp_user->ID . '" ' . selected( $wp_user->ID, $selected, false ) . '>' . $wp_user->user_login . '</option>'; 
     611    //CHECK IF USER CAN EDIT TASKS CAPABILITY 
     612    if ( current_user_can( 'cp_edit_task' ) ) { 
     613 
     614        echo '<form action="" method="post">'; 
     615            wp_nonce_field('cp-edit-task'); 
     616            ?> 
     617            <input type="hidden" name="cp-edit-task-id" value="<?php echo $cp_task->id ?>" /> 
     618            <table class="form-table"> 
     619                <tbody> 
     620                    <tr valign="top"> 
     621                        <th scope="row"><?php _e('Description: ', 'collabpress') ?></th> 
     622                        <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
     623                            <p><label for="cp-task"></label></p> 
     624                            <p> 
     625                                <textarea class="large-text code" id="cp-task" cols="30" rows="10" name="cp-task"><?php echo get_the_title($cp_task->id) ?></textarea> 
     626                            </p> 
     627                        </fieldset></td> 
     628                    </tr> 
     629                    <tr valign="top"> 
     630                        <th scope="row"><label for="cp-task-due"><?php _e('Due: ', 'collabpress') ?></label></th> 
     631                        <td><p><input name="cp-task-due" id="datepicker" class="regular-text" type="text" value="<?php echo get_post_meta($cp_task->id, '_cp-task-due', true) ?>"/></p></td> 
     632                    </tr> 
     633                    <tr valign="top"> 
     634                        <th scope="row"><label for="cp-task-assign"><?php _e('Assigned to: ', 'collabpress') ?></label></th> 
     635                        <td> 
     636                            <p> 
     637                                <?php 
     638                                $selected = get_post_meta( $cp_task->id, '_cp-task-assign', true ); 
     639 
     640                                $wp_user_search = new WP_User_Query( array( 'fields' => 'all' ) ); 
     641                                $wp_users = $wp_user_search->get_results(); 
     642 
     643                                $users = '<select name="cp-task-assign" id="cp-task-assign">'; 
     644                                foreach ( $wp_users as $wp_user ) { 
     645                                    //verify user has access to this project 
     646                                    if ( cp_check_project_permissions ( $wp_user->ID, $cp_project->id ) ) { 
     647                                        $users .= '<option value="' . $wp_user->ID . '" ' . selected( $wp_user->ID, $selected, false ) . '>' . $wp_user->user_login . '</option>'; 
     648                                    } 
    640649                                } 
    641                             } 
    642                             $users .= '</select>'; 
    643  
    644                             $users = apply_filters( 'cp_task_user_list_html', $users, $selected ); 
    645  
    646                             echo $users; 
    647                             ?> 
    648                         </p> 
    649                     </td> 
    650                 </tr> 
    651                     <tr valign="top"> 
    652                         <th scope="row"><label for="cp-task-priority"><?php _e('Priority: ', 'collabpress') ?></label></th> 
    653                         <td> 
    654                             <?php 
    655                             $task_priority = get_post_meta( $cp_task->id, '_cp-task-priority', true ); 
    656                             ?> 
    657                             <select name="cp-task-priority" id="cp-task-priority"> 
    658                                 <option value="Urgent" <?php selected( $task_priority, 'Urgent' ); ?>>Urgent</option> 
    659                                 <option value="High" <?php selected( $task_priority, 'High' ); ?>>High</option> 
    660                                 <option value="Normal" <?php selected( $task_priority, 'Normal' ); ?>>Normal</option> 
    661                                 <option value="Low" <?php selected( $task_priority, 'Low' ); ?>>Low</option> 
    662                                 <option value="Very Low" <?php selected( $task_priority, 'Very Low' ); ?>>Very Low</option> 
    663                                 <option value="None" <?php selected( $task_priority, 'None' ); ?>>None</option> 
    664                             </select> 
     650                                $users .= '</select>'; 
     651 
     652                                $users = apply_filters( 'cp_task_user_list_html', $users, $selected ); 
     653 
     654                                echo $users; 
     655                                ?> 
     656                            </p> 
    665657                        </td> 
    666658                    </tr> 
    667             </tbody> 
    668         </table> 
    669         <?php 
    670         echo '<p class="submit"><input class="button-primary" type="submit" name="cp-edit-task" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
    671  
    672     echo '</form>'; 
     659                        <tr valign="top"> 
     660                            <th scope="row"><label for="cp-task-priority"><?php _e('Priority: ', 'collabpress') ?></label></th> 
     661                            <td> 
     662                                <?php 
     663                                $task_priority = get_post_meta( $cp_task->id, '_cp-task-priority', true ); 
     664                                ?> 
     665                                <select name="cp-task-priority" id="cp-task-priority"> 
     666                                    <option value="Urgent" <?php selected( $task_priority, 'Urgent' ); ?>>Urgent</option> 
     667                                    <option value="High" <?php selected( $task_priority, 'High' ); ?>>High</option> 
     668                                    <option value="Normal" <?php selected( $task_priority, 'Normal' ); ?>>Normal</option> 
     669                                    <option value="Low" <?php selected( $task_priority, 'Low' ); ?>>Low</option> 
     670                                    <option value="Very Low" <?php selected( $task_priority, 'Very Low' ); ?>>Very Low</option> 
     671                                    <option value="None" <?php selected( $task_priority, 'None' ); ?>>None</option> 
     672                                </select> 
     673                            </td> 
     674                        </tr> 
     675                </tbody> 
     676            </table> 
     677            <?php 
     678            echo '<p class="submit"><input class="button-primary" type="submit" name="cp-edit-task" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
     679 
     680        echo '</form>'; 
     681 
     682    } 
    673683 
    674684} 
     
    690700        setup_postdata($post); 
    691701 
    692             $user = get_post_meta(get_the_ID(), '_cp-task-assign', true); 
     702            $user = get_post_meta( get_the_ID(), '_cp-task-assign', true); 
    693703            $user = get_userdata($user); 
    694704 
     
    714724 
    715725            //generate edit task link 
    716             $cp_edit_link = apply_filters( 'cp_task_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task=' . get_the_ID(), get_the_ID(), $cp_project->id ) . '&view=edit'; 
     726            $cp_edit_link = add_query_arg( 'view', 'edit', apply_filters( 'cp_task_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task=' . get_the_ID(), get_the_ID(), $cp_project->id ) ); 
    717727 
    718728            //check task status 
     
    722732            echo '<div id="cp-gravatar">' .get_avatar( $task_user_id, 32 ). '</div><p><input type="checkbox" name="" value="0" onclick="window.location=\''. $link. '\'; return true;"  /> '; 
    723733 
    724             echo '<a href="' . apply_filters( 'cp_task_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task=' . get_the_ID(), get_the_ID(), $cp_project->id ) .'">'.get_the_title().'</a> - '.__('Due: ', 'collabpress') .$task_due_date; 
     734            echo '<a href="' . apply_filters( 'cp_task_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task=' . get_the_ID(), get_the_ID(), $cp_project->id ) .'">' .cp_limit_length( get_the_title(), 125 ).'</a> - '.__('Due: ', 'collabpress') .$task_due_date; 
    725735 
    726736            //check if user can view edit/delete links 
     
    806816 
    807817    // Get Project 
    808     $project_args = array ( 'post_type' => 'cp-projects', 
    809                         'showposts' => 1 
    810                     ); 
     818    $project_args = array ( 
     819        'post_type' => 'cp-projects', 
     820        'posts_per_page' => 1 
     821        ); 
    811822    $project_query = new WP_Query( $project_args ); 
    812823 
    813824    // WP_Query(); 
    814825    while( $project_query->have_posts() ) : $project_query->the_post(); 
     826 
     827    //CHECK IF USER CAN ADD TASK LISTS CAPABILITY 
     828    if ( current_user_can( 'cp_add_task_lists' ) ) { 
    815829 
    816830        echo '<form action="'.cp_clean_querystring().'" method="post">'; 
    817831            wp_nonce_field('cp-add-task-list'); 
    818832            ?> 
     833            <h2><?php _e( 'Add Task List', 'collabpress' ); ?></h2> 
    819834            <table class="form-table"> 
    820835                <tbody> 
     
    832847                        </fieldset></td> 
    833848                    </tr> 
     849                    <?php do_action( 'cp_add_task_list_extra_fields' ); ?> 
    834850                </tbody> 
    835851            </table> 
     
    839855        echo '</form>'; 
    840856 
     857    } 
     858 
    841859    endwhile; 
    842860    wp_reset_query(); 
     
    848866    global $cp_task_list; 
    849867 
    850     echo '<form action="" method="post">'; 
    851         wp_nonce_field('cp-edit-task-list'); 
    852         ?> 
    853         <input type="hidden" name="cp-edit-task-list-id" value="<?php echo $cp_task_list->id ?>" /> 
    854         <table class="form-table"> 
    855             <tbody> 
    856                 <tr valign="top"> 
    857                     <th scope="row"><label for="cp-task-list"><?php _e('Name: ', 'collabpress') ?></label></th> 
    858                     <td><p><input type="text" class="regular-text" value="<?php echo get_the_title($cp_task_list->id) ?>" id="blogname" name="cp-task-list" /></p></td> 
    859                 </tr> 
    860                 <tr valign="top"> 
    861                     <th scope="row"><?php _e('Description: ', 'collabpress') ?></th> 
    862                     <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
    863                         <p><label for="cp-task-list-description"></label></p> 
    864                         <p> 
    865                             <textarea class="large-text code" id="cp-task-list-description" cols="30" rows="10" name="cp-task-list-description"><?php echo get_post_meta($cp_task_list->id, '_cp-task-list-description', true) ?></textarea> 
    866                         </p> 
    867                     </fieldset></td> 
    868                 </tr> 
    869             </tbody> 
    870         </table> 
    871         <?php 
    872         echo '<p class="submit"><input class="button-primary" type="submit" name="cp-edit-task-list" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
    873  
    874     echo '</form>'; 
     868    //CHECK IF USER CAN EDIT TASK LISTS CAPABILITY 
     869    if ( current_user_can( 'cp_edit_task_lists' ) ) { 
     870 
     871        echo '<form action="" method="post">'; 
     872            wp_nonce_field('cp-edit-task-list'); 
     873            ?> 
     874            <input type="hidden" name="cp-edit-task-list-id" value="<?php echo $cp_task_list->id ?>" /> 
     875            <h2><?php _e( 'Edit Task List', 'collabpress' ); ?></h2> 
     876            <table class="form-table"> 
     877                <tbody> 
     878                    <tr valign="top"> 
     879                        <th scope="row"><label for="cp-task-list"><?php _e('Name: ', 'collabpress') ?></label></th> 
     880                        <td><p><input type="text" class="regular-text" value="<?php echo get_the_title($cp_task_list->id) ?>" id="blogname" name="cp-task-list" /></p></td> 
     881                    </tr> 
     882                    <tr valign="top"> 
     883                        <th scope="row"><?php _e('Description: ', 'collabpress') ?></th> 
     884                        <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
     885                            <p><label for="cp-task-list-description"></label></p> 
     886                            <p> 
     887                                <textarea class="large-text code" id="cp-task-list-description" cols="30" rows="10" name="cp-task-list-description"><?php echo get_post_meta($cp_task_list->id, '_cp-task-list-description', true) ?></textarea> 
     888                            </p> 
     889                        </fieldset></td> 
     890                    </tr> 
     891                    <?php do_action( 'cp_edit_task_list_extra_fields', $cp_task_list->id ); ?> 
     892                </tbody> 
     893            </table> 
     894            <?php 
     895            echo '<p class="submit"><input class="button-primary" type="submit" name="cp-edit-task-list" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
     896 
     897        echo '</form>'; 
     898 
     899    } 
    875900 
    876901} 
     
    901926 
    902927    //generate edit task list link 
    903     $cp_edit_link = apply_filters( 'cp_task_list_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task-list=' . get_the_ID(), get_the_ID(), $cp_project->id ) . '&view=edit'; 
     928    $cp_edit_link = add_query_arg( 'view', 'edit', apply_filters( 'cp_task_list_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task-list=' . get_the_ID(), get_the_ID(), $cp_project->id ) ); 
    904929 
    905930    echo '<p><a href="'. apply_filters( 'cp_task_list_link', CP_DASHBOARD . '&project=' . $cp_project->id . '&task-list=' . get_the_ID(), get_the_ID(), $cp_project->id ) . '">'.get_the_title().'</a>'; 
     
    924949    get_currentuserinfo(); 
    925950 
    926     $wp_user_search = new WP_User_Query( array( 'fields' => 'all' ) ); 
    927     $wp_users = $wp_user_search->get_results(); 
    928  
    929     // Add Project Form 
    930     echo '<form action="'.cp_clean_querystring().'" method="post" name="new_project_form">'; 
    931         wp_nonce_field('cp-add-project'); 
    932         ?> 
    933         <table class="form-table"> 
    934             <tbody> 
    935                 <tr valign="top"> 
    936                     <th scope="row"><label for="cp-project"><?php _e( 'Name: ', 'collabpress' ) ?></label></th> 
    937                     <td><p><input type="text" class="regular-text" value="" id="blogname" name="cp-project" /></p></td> 
    938                 </tr> 
    939                 <tr valign="top"> 
    940                     <th scope="row"><?php _e( 'Description: ', 'collabpress' ) ?></th> 
    941                     <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
    942                         <p><label for="cp-project-description"></label></p> 
    943                         <p> 
    944                         <textarea class="large-text code" id="cp-project-description" cols="30" rows="10" name="cp-project-description"></textarea> 
    945                         </p> 
    946                     </fieldset></td> 
    947                 </tr> 
    948  
    949                 <?php if ( !function_exists( 'bp_is_active' ) || !bp_is_active( 'groups' ) || !bp_is_group() ) : ?> 
    950                 <tr valign="top"> 
    951                     <th scope="row"><label for="cp-project-users"><?php _e( 'Users: ', 'collabpress' ) ?></label></th> 
    952                     <td> 
    953                     <p> 
    954                         <input type="button" name="CheckAll" value="<?php _e( 'Check All', 'collabpress' ); ?>" onClick="checkAll(document.new_project_form['cp_project_users[]'])" /> 
    955                         <input type="button" name="UnCheckAll" value="<?php _e( 'Uncheck All', 'collabpress' ); ?>" onClick="uncheckAll(document.new_project_form['cp_project_users[]'])" /> 
    956                     </p> 
    957                     <?php 
    958                     foreach ( $wp_users as $wp_user ) { 
    959                         echo '<input type="checkbox" name="cp_project_users[]" value="'.$wp_user->ID .'" checked="checked" />&nbsp;' .$wp_user->user_login .'<br />'; 
    960                     } 
    961                     ?> 
    962                     </td> 
    963                 </tr> 
    964                 <?php endif ?> 
    965             </tbody> 
    966         </table> 
    967         <?php 
    968         echo '<p class="submit"><input class="button-primary" type="submit" name="cp-add-project" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
    969  
    970     echo '</form>'; 
     951    //CHECK IF USER CAN ADD PROJECTS CAPABILITY 
     952    if ( current_user_can( 'cp_add_projects' ) ) { 
     953 
     954        // Add Project Form 
     955        echo '<form action="'.cp_clean_querystring().'" method="post" name="new_project_form">'; 
     956            wp_nonce_field('cp-add-project'); 
     957            ?> 
     958            <h2><?php _e( 'Add Project', 'collabpress' ); ?></h2> 
     959            <table class="form-table"> 
     960                <tbody> 
     961                    <tr valign="top"> 
     962                        <th scope="row"><label for="cp-project"><?php _e( 'Name: ', 'collabpress' ) ?></label></th> 
     963                        <td><p><input type="text" class="regular-text" value="" id="blogname" name="cp-project" /></p></td> 
     964                    </tr> 
     965                    <tr valign="top"> 
     966                        <th scope="row"><?php _e( 'Description: ', 'collabpress' ) ?></th> 
     967                        <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
     968                            <p><label for="cp-project-description"></label></p> 
     969                            <p> 
     970                            <textarea class="large-text code" id="cp-project-description" cols="30" rows="10" name="cp-project-description"></textarea> 
     971                            </p> 
     972                        </fieldset></td> 
     973                    </tr> 
     974 
     975                    <?php if ( !function_exists( 'bp_is_active' ) || !bp_is_active( 'groups' ) || !bp_is_group() ) : ?> 
     976                    <tr valign="top"> 
     977                        <th scope="row"><label for="cp-project-users"><?php _e( 'Users: ', 'collabpress' ) ?></label></th> 
     978                        <td> 
     979                        <p> 
     980                            <input type="button" name="CheckAll" value="<?php _e( 'Check All', 'collabpress' ); ?>" onClick="checkAll(document.new_project_form['cp_project_users[]'])" /> 
     981                            <input type="button" name="UnCheckAll" value="<?php _e( 'Uncheck All', 'collabpress' ); ?>" onClick="uncheckAll(document.new_project_form['cp_project_users[]'])" /> 
     982                        </p> 
     983                        <?php 
     984                        //check if user is subscriber 
     985                        if ( !current_user_can( 'manage_options' ) ) { 
     986                            //if not admin, assign project to logged in user 
     987                            echo '<input type="checkbox" name="cp_project_users[]" value="'.$current_user->ID .'" checked="checked" />&nbsp;' .$current_user->user_login .'<br />'; 
     988                        }else{ 
     989                            // @todo This fails on huge userbases 
     990                            $wp_user_search = new WP_User_Query( array( 'fields' => 'all' ) ); 
     991                            $wp_users = $wp_user_search->get_results(); 
     992 
     993                            foreach ( $wp_users as $wp_user ) { 
     994                                echo '<input type="checkbox" name="cp_project_users[]" value="'.$wp_user->ID .'" checked="checked" />&nbsp;' .$wp_user->user_login .'<br />'; 
     995                            } 
     996                        } 
     997                        ?> 
     998                        </td> 
     999                    </tr> 
     1000                    <?php endif ?> 
     1001                </tbody> 
     1002            </table> 
     1003            <?php 
     1004            echo '<p class="submit"><input class="button-primary" type="submit" name="cp-add-project" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
     1005 
     1006        echo '</form>'; 
     1007 
     1008    } 
    9711009} 
    9721010 
     
    9831021    $wp_users = $wp_user_search->get_results(); 
    9841022 
    985     // Add Project Form 
    986     echo '<form action="" method="post" name="edit_project_form">'; 
    987         wp_nonce_field('cp-edit-project'); 
    988         ?> 
    989         <input type="hidden" name="cp-edit-project-id" value="<?php echo $cp_project->id ?>" /> 
    990         <table class="form-table"> 
    991             <tbody> 
    992                 <tr valign="top"> 
    993                     <th scope="row"><label for="cp-project"><?php _e('Name: ', 'collabpress') ?></label></th> 
    994                     <td><p><input type="text" class="regular-text" value="<?php echo get_the_title($cp_project->id) ?>" id="blogname" name="cp-project" /></p></td> 
    995                 </tr> 
    996                 <tr valign="top"> 
    997                     <th scope="row"><?php _e('Description: ', 'collabpress') ?></th> 
    998                     <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
    999                         <p><label for="cp-project-description"></label></p> 
     1023    //CHECK IF USER CAN EDIT PROJECTS CAPABILITY 
     1024    if ( current_user_can( 'cp_edit_projects' ) ) { 
     1025 
     1026        // Add Project Form 
     1027        echo '<form action="" method="post" name="edit_project_form">'; 
     1028            wp_nonce_field('cp-edit-project'); 
     1029            ?> 
     1030            <input type="hidden" name="cp-edit-project-id" value="<?php echo $cp_project->id ?>" /> 
     1031            <h2><?php _e( 'Edit Project', 'collabpress' ); ?></h2> 
     1032            <table class="form-table"> 
     1033                <tbody> 
     1034                    <tr valign="top"> 
     1035                        <th scope="row"><label for="cp-project"><?php _e('Name: ', 'collabpress') ?></label></th> 
     1036                        <td><p><input type="text" class="regular-text" value="<?php echo get_the_title($cp_project->id) ?>" id="blogname" name="cp-project" /></p></td> 
     1037                    </tr> 
     1038                    <tr valign="top"> 
     1039                        <th scope="row"><?php _e('Description: ', 'collabpress') ?></th> 
     1040                        <td><fieldset><legend class="screen-reader-text"><span></span></legend> 
     1041                            <p><label for="cp-project-description"></label></p> 
     1042                            <p> 
     1043                                <textarea class="large-text code" id="cp-project-description" cols="30" rows="10" name="cp-project-description"><?php echo get_post_meta($cp_project->id, '_cp-project-description', true) ?></textarea> 
     1044                            </p> 
     1045                        </fieldset></td> 
     1046                    </tr> 
     1047 
     1048                    <?php /* Don't show this on BP group tabs */ ?> 
     1049                    <?php if ( empty( $bp->groups->current_group ) ) : ?> 
     1050                    <tr valign="top"> 
     1051                        <th scope="row"><label for="cp-project-users"><?php _e( 'Users: ', 'collabpress' ) ?></label></th> 
     1052                        <td> 
    10001053                        <p> 
    1001                             <textarea class="large-text code" id="cp-project-description" cols="30" rows="10" name="cp-project-description"><?php echo get_post_meta($cp_project->id, '_cp-project-description', true) ?></textarea> 
     1054                            <input type="button" name="CheckAll" value="<?php _e( 'Check All', 'collabpress' ); ?>" onClick="checkAll(document.edit_project_form['cp_project_users[]'])" /> 
     1055                            <input type="button" name="UnCheckAll" value="<?php _e( 'Uncheck All', 'collabpress' ); ?>" onClick="uncheckAll(document.edit_project_form['cp_project_users[]'])" /> 
    10021056                        </p> 
    1003                     </fieldset></td> 
    1004                 </tr> 
    1005  
    1006                 <?php /* Don't show this on BP group tabs */ ?> 
    1007                 <?php if ( empty( $bp->groups->current_group ) ) : ?> 
    1008                 <tr valign="top"> 
    1009                     <th scope="row"><label for="cp-project-users"><?php _e( 'Users: ', 'collabpress' ) ?></label></th> 
    1010                     <td> 
    1011                     <p> 
    1012                         <input type="button" name="CheckAll" value="<?php _e( 'Check All', 'collabpress' ); ?>" onClick="checkAll(document.edit_project_form['cp_project_users[]'])" /> 
    1013                         <input type="button" name="UnCheckAll" value="<?php _e( 'Uncheck All', 'collabpress' ); ?>" onClick="uncheckAll(document.edit_project_form['cp_project_users[]'])" /> 
    1014                     </p> 
    1015                     <?php 
    1016                     //get existing project users 
    1017                     $cp_project_users = get_post_meta( $cp_project->id, '_cp-project-users', true ); 
    1018  
    1019                     foreach ( $wp_users as $wp_user ) { 
    1020                         if ( is_array( $cp_project_users ) ) { 
    1021                         $checked = ( in_array( $wp_user->ID, $cp_project_users ) ) ? 'checked="checked"' : ''; 
    1022                         }else{ 
    1023                         $checked=''; 
    1024                         } 
    1025                         echo '<input type="checkbox" name="cp_project_users[]" value="'.$wp_user->ID .'" '.$checked.'>&nbsp;' .$wp_user->user_login .'<br />'; 
    1026                     } 
    1027                     ?> 
    1028                     </td> 
    1029                 </tr> 
    1030                 <?php endif ?> 
    1031             </tbody> 
    1032         </table> 
    1033         <?php 
    1034         echo '<p class="submit"><input class="button-primary" type="submit" name="cp-edit-project" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
    1035  
    1036     echo '</form>'; 
     1057                        <?php 
     1058                        //get existing project users 
     1059                        $cp_project_users = get_post_meta( $cp_project->id, '_cp-project-users', true ); 
     1060 
     1061                        foreach ( $wp_users as $wp_user ) { 
     1062                            if ( is_array( $cp_project_users ) ) { 
     1063                            $checked = ( in_array( $wp_user->ID, $cp_project_users ) ) ? 'checked="checked"' : ''; 
     1064                            }else{ 
     1065                            $checked=''; 
     1066                            } 
     1067                            if ( !current_user_can( 'manage_options' ) ) { 
     1068                                //if not admin, assign project to logged in user 
     1069                                echo '<input type="checkbox" name="cp_project_users[]" value="'.$current_user->ID .'" checked="checked" />&nbsp;' .$current_user->user_login .'<br />'; 
     1070                            }else{ 
     1071                                echo '<input type="checkbox" name="cp_project_users[]" value="'.$wp_user->ID .'" '.$checked.'>&nbsp;' .$wp_user->user_login .'<br />'; 
     1072                            } 
     1073                        } 
     1074                        ?> 
     1075                        </td> 
     1076                    </tr> 
     1077                    <?php endif ?> 
     1078                </tbody> 
     1079            </table> 
     1080            <?php 
     1081            echo '<p class="submit"><input class="button-primary" type="submit" name="cp-edit-project" value="'.__( 'Submit', 'collabpress' ).'"/></p>'; 
     1082 
     1083        echo '</form>'; 
     1084 
     1085    } 
    10371086} 
    10381087 
     
    11061155// User Page 
    11071156function cp_user_page() { 
    1108  
    1109     global $wpdb; 
    11101157    global $post; 
    11111158    global $cp_user; 
     
    11221169            <?php 
    11231170            // Get Task Lists 
    1124             $sql = " SELECT wposts.* FROM $wpdb->posts wposts 
    1125             INNER JOIN $wpdb->postmeta key1 ON wposts.ID = key1.post_id AND key1.meta_key = '_cp-meta-type' 
    1126             INNER JOIN $wpdb->postmeta key2 ON wposts.ID = key2.post_id AND key2.meta_key = '_cp-activity-author' 
    1127             WHERE key1.meta_value = %d AND key2.meta_value = %s 
    1128             AND wposts.post_status = 'publish' AND wposts.post_type = 'cp-meta-data' 
    1129             ORDER BY wposts.post_date DESC "; 
    1130             $tasks_query = $wpdb->get_results( $wpdb->prepare( $sql, 'activity', $cp_user->id ) ); 
     1171            $tasks_query = get_posts( array( 
     1172                'post_type' => 'cp-meta-data', 
     1173                'meta_query' => array( 
     1174                    array(  
     1175                        'key' => '_cp-meta-type', 
     1176                        'value' => 'activity', 
     1177                    ), 
     1178                    array(  
     1179                        'key' => '_cp-activity-author', 
     1180                        'value' => $cp_user->id, 
     1181                    )    
     1182                ) 
     1183            ) ); 
    11311184 
    11321185            // WP_Query(); 
     
    11541207            <?php 
    11551208            // Get Task Lists 
    1156             $sql = " SELECT wposts.* FROM $wpdb->posts wposts 
    1157             INNER JOIN $wpdb->postmeta key1 ON wposts.ID = key1.post_id AND key1.meta_key = '_cp-task-assign' 
    1158             INNER JOIN $wpdb->postmeta key2 ON wposts.ID = key2.post_id AND key2.meta_key = '_cp-task-status' 
    1159             WHERE key1.meta_value = %d AND key2.meta_value = %s 
    1160             AND wposts.post_status = 'publish' AND wposts.post_type = 'cp-tasks' 
    1161             ORDER BY wposts.post_date DESC "; 
    1162             $tasks_query = $wpdb->get_results( $wpdb->prepare( $sql, $cp_user->id, 'open' ) ); 
     1209            $tasks_query = get_posts( array( 
     1210                'post_type' => 'cp-tasks', 
     1211                'meta_query' => array( 
     1212                    array(  
     1213                        'key' => '_cp-task-assign', 
     1214                        'value' => $cp_user->id, 
     1215                    ), 
     1216                    array(  
     1217                        'key' => '_cp-task-status', 
     1218                        'value' => 'open', 
     1219                    ) 
     1220                ) 
     1221            ) ); 
    11631222 
    11641223            // WP_Query(); 
     
    14051464// Retrieve all tasks in a task list with a specific status 
    14061465function cp_get_tasks( $task_list_id, $status ) { 
    1407     global $wpdb; 
    1408  
     1466    $task_list_id = absint( $task_list_id ); 
     1467    $status = esc_attr( $status ); 
    14091468    if ( $task_list_id && $status ) { 
    1410         $sql = " SELECT wposts.* FROM $wpdb->posts wposts 
    1411             INNER JOIN $wpdb->postmeta key1 ON wposts.ID = key1.post_id AND key1.meta_key = '_cp-task-list-id' 
    1412             INNER JOIN $wpdb->postmeta key2 ON wposts.ID = key2.post_id AND key2.meta_key = '_cp-task-status' 
    1413             WHERE key1.meta_value = %d AND key2.meta_value = %s 
    1414             AND wposts.post_status = 'publish' AND wposts.post_type = 'cp-tasks' 
    1415             ORDER BY wposts.post_date DESC "; 
    1416         $tasks_query = $wpdb->get_results( $wpdb->prepare( $sql, absint( $task_list_id ), esc_html( $status ) ) ); 
    1417         return $tasks_query; 
     1469        $tasks = get_posts( array(  
     1470            'post_type' => 'cp-tasks', 
     1471            'meta_query' => array(  
     1472                array(  
     1473                    'key' => '_cp-task-list-id', 
     1474                    'value' => $task_list_id, 
     1475                ), 
     1476                array(  
     1477                    'key' => '_cp-task-status', 
     1478                    'value' => $status, 
     1479                ) 
     1480            ) 
     1481        ) ); 
     1482        return $tasks; 
    14181483    } 
    14191484} 
     
    14301495    $options = get_option( 'cp_options' ); 
    14311496    $cp_settings_user_role = ( isset( $options[$type] ) ) ? esc_attr( $options[$type] ) : 'manage_options'; 
     1497 
     1498    // Filter so that BP-compatibility (and other plugins) can modify 
     1499    $cp_settings_user_role = apply_filters( 'cp_settings_user_role', $cp_settings_user_role, $type ); 
    14321500 
    14331501    if ( $cp_settings_user_role == 'all' ) : 
     
    15241592    return apply_filters( 'cp_get_options', $options, $saved_options ); 
    15251593} 
     1594 
     1595//limit string length function 
     1596function cp_limit_length( $strtolimit=null, $limit=50 ) { 
     1597 
     1598    if ( strlen( $strtolimit ) > $limit ) { 
     1599        $strtolimit = substr( $strtolimit, 0, $limit ) .'...'; 
     1600    } 
     1601 
     1602    return $strtolimit; 
     1603} 
  • collabpress/trunk/includes/js/admin.js

    r442577 r638127  
    1414     
    1515    jQuery("a.cp_grouped_elements").fancybox(); 
     16     
     17     
     18    jQuery(".open").click(function() { 
     19    var toggleDiv = jQuery(this).attr('rel'); // get id of form to open 
     20        jQuery(toggleDiv).show(); 
     21         return false; 
     22    }); 
     23    jQuery(".close").click(function() { 
     24    var toggleDiv = jQuery(this).attr('rel'); // get id of form to close 
     25        jQuery(toggleDiv).hide(); 
     26        return false; 
     27    }); 
     28 
    1629}); 
  • collabpress/trunk/includes/js/bp.js

    r442577 r638127  
    22    $('.hide-on-load .inside').slideToggle(200); 
    33 
    4     $('.cp-meta-box .handlediv').click(function(){ 
     4    $('.cp-meta-box h4').click(function(){ 
    55        var parent = $(this).parent(); 
    66        $(parent).children('.inside').slideToggle(200); 
  • collabpress/trunk/includes/js/frontend.js

    r442577 r638127  
    22    // Date Picker 
    33    jQuery("#datepicker").datepicker({dateFormat: 'm/d/yy'}); 
     4     
     5    jQuery(".open").click(function() { 
     6    var toggleDiv = jQuery(this).attr('rel'); // get id of form to open 
     7        jQuery(toggleDiv).show(); 
     8         return false; 
     9    }); 
     10    jQuery(".close").click(function() { 
     11    var toggleDiv = jQuery(this).attr('rel');  // get id of form to close 
     12        jQuery(toggleDiv).hide(); 
     13        return false; 
     14    }); 
     15 
    416}); 
  • collabpress/trunk/includes/menus/dashboard.php

    r442577 r638127  
    4343    // Constructor 
    4444    function collabpress_dashboard_page() { 
    45         // Screen Layout 
    46         add_filter('screen_layout_columns', array(&$this, 'on_screen_layout_columns'), 10, 2); 
    4745        // Callbacks 
    4846        add_action('admin_menu', array(&$this, 'on_admin_menu'));  
    4947        add_action('admin_post_save_howto_metaboxes_general', array(&$this, 'on_save_changes')); 
    50     } 
    51      
    52     // Column Amount 
    53     function on_screen_layout_columns($columns, $screen) { 
    54         if ($screen == $this->pagehook) { 
    55             $columns[$this->pagehook] = 2; 
    56         } 
    57         return $columns; 
    5848    } 
    5949     
     
    110100        // Register Scripts 
    111101        wp_register_script('cp_admin', CP_PLUGIN_URL . 'includes/js/admin.js'); 
    112         if ( is_ssl() ) 
    113             wp_register_script('jquery-ui', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.3/jquery-ui.min.js'); 
    114         else 
    115             wp_register_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.3/jquery-ui.min.js'); 
    116102        wp_register_script('cp_upload', CP_PLUGIN_URL . 'includes/js/cp_uploader.js', array('jquery','media-upload','thickbox')); 
    117103        wp_register_script('cp_post', CP_PLUGIN_URL . 'includes/js/cp_post.js'); 
     
    121107        wp_enqueue_script('cp_admin'); 
    122108        wp_enqueue_script('jquery-ui'); 
     109        wp_enqueue_script('jquery-ui-datepicker'); 
    123110        wp_enqueue_script('media-upload'); 
    124111        wp_enqueue_script('thickbox'); 
     
    328315            <?php $data = array(); ?> 
    329316         
    330             <div id="poststuff" class="metabox-holder<?php echo 2 == $screen_layout_columns ? ' has-right-sidebar' : ''; ?>"> 
     317            <div id="poststuff" class="metabox-holder has-right-sidebar"> 
    331318                <div id="side-info-column" class="inner-sidebar"> 
    332319                    <?php 
  • collabpress/trunk/includes/menus/settings.php

    r442577 r638127  
    179179                </tr> 
    180180                <tr> 
    181                     <td colspan="2"><hr /></td> 
     181                    <td colspan="2"></td> 
    182182                </tr> 
    183183            </table> 
    184184        </form> 
     185        <?php include "settings-addons.php";?> 
    185186    </div> 
    186187 
  • collabpress/trunk/includes/shortcode.php

    r442577 r638127  
    3939    if ($foundsc = true) { 
    4040    $css_src = CP_PLUGIN_URL . 'includes/css/front.css'; 
    41  
     41    $js_src = CP_PLUGIN_URL . 'includes/js/frontend.js'; 
     42    
    4243    wp_register_style('cp_frontend_css', $css_src ); 
    4344    wp_enqueue_style('cp_frontend_css'); 
    4445     
     46    wp_register_script('cp_frontend_js', $js_src ); 
     47    wp_enqueue_script('cp_frontend_js');     
    4548    } 
    4649     
     
    7376    if ( isset( $_GET['project'] ) ) : 
    7477 
    75         //store the project ID 
    76         $cp_project = new CP_Project(); 
    77         $cp_project->id = absint( $_GET['project'] ); 
    78  
    79         // Task Page 
    80         if ( isset( $_GET['task'] ) ) : 
    81  
    82             // Set Task List ID 
    83             $cp_task = new CP_Task(); 
    84             $cp_task->id = absint( $_GET['task'] ); 
    85             $cp_task_page = true; 
    86  
    87         // Task List Page 
    88         elseif ( isset( $_GET['task-list'] ) ) : 
    89  
    90             // Set Task List ID 
    91             $cp_task_list = new CP_TaskList(); 
    92             $cp_task_list->id = absint( $_GET['task-list'] ); 
    93             $cp_task_list_page = true; 
    94  
    95         // Project Page 
    96         else: 
    97             $cp_project_page = true; 
    98         endif; 
    99  
     78        //verify user has permission to access the project 
     79        if ( cp_check_project_permissions( $current_user->ID, absint( $_GET['project'] ) ) ) { 
     80         
     81            //store the project ID 
     82            $cp_project = new CP_Project(); 
     83            $cp_project->id = absint( $_GET['project'] ); 
     84 
     85            // Task Page 
     86            if ( isset( $_GET['task'] ) ) : 
     87 
     88                // Set Task List ID 
     89                $cp_task = new CP_Task(); 
     90                $cp_task->id = absint( $_GET['task'] ); 
     91                $cp_task_page = true; 
     92 
     93            // Task List Page 
     94            elseif ( isset( $_GET['task-list'] ) ) : 
     95 
     96                // Set Task List ID 
     97                $cp_task_list = new CP_TaskList(); 
     98                $cp_task_list->id = absint( $_GET['task-list'] ); 
     99                $cp_task_list_page = true; 
     100 
     101            // Project Page 
     102            else: 
     103                $cp_project_page = true; 
     104            endif; 
     105 
     106        } 
     107         
    100108    endif; 
    101109 
     
    105113    require_once('menus/isset/comment.php'); 
    106114 
    107     // User Notice 
     115    // Title 
     116    echo '<div id="collabpress">'; 
     117  
     118     // User Notice 
    108119    $sent_data = ( $_POST ) ? $_POST : $_GET; 
    109120    cp_user_notice( $sent_data ); 
    110  
    111     // Title 
    112     echo '<div id="collabpress">'; 
    113121     
    114     echo cp_get_page_title(); 
    115  
    116122    //show the breadcrumb navigation 
    117123    cp_get_breadcrumb(); 
    118124 
     125    echo '<div id="page_header">'; 
     126        // logic for title output. On single task page output <p> instead of <h2> 
     127        if ( $cp_task_page ) : 
     128            echo str_replace( 'h2', 'p', cp_get_page_title() ); 
     129        else : 
     130            echo cp_get_page_title(); 
     131        endif; 
     132    echo '</div>'; 
     133     
    119134    if ( $cp_project_page ) : 
    120135 
     
    226241 
    227242    global $cp_project; 
    228  
    229     // Get Task Lists 
    230     $task_lists_args = array( 
    231             'post_type' => 'cp-task-lists', 
    232             'meta_key' => '_cp-project-id', 
    233             'meta_value' => $cp_project->id, 
    234             'showposts' => '-1' 
    235             ); 
    236     $task_lists_query = new WP_Query( $task_lists_args ); 
    237  
    238     echo '<h4 class="cp_tl_title">' . __('Tasks Lists', 'collabpress') . '</h4>'; 
    239  
    240     // WP_Query(); 
    241     echo '<ul class="cp_tl">'; 
    242     if ( $task_lists_query->have_posts() ) : 
    243     while( $task_lists_query->have_posts() ) : $task_lists_query->the_post(); 
    244  
    245         //generate delete task list link 
    246         $cp_del_link = CP_DASHBOARD .'&project='.$cp_project->id.'&cp-delete-task-list-id='.get_the_ID(); 
    247         $cp_del_link = ( function_exists('wp_nonce_url') ) ? wp_nonce_url( $cp_del_link, 'cp-action-delete_task_list' ) : $cp_del_link; 
    248  
    249         //generate edit task list link 
    250         $cp_edit_link = CP_DASHBOARD .'&project='.$cp_project->id.'&task-list='.get_the_ID().'&view=edit'; 
    251  
    252         echo '<li><a class="cp_tl_name" href="'.CP_DASHBOARD.'&project='.$cp_project->id.'&task-list='.get_the_ID().'">'.get_the_title().'</a>'; 
    253  
    254         //check if user can view edit/delete links 
    255         if ( cp_check_permissions( 'settings_user_role' ) ) { 
    256         echo '<span class="edit-del-links"><a class="cp_tl_edit" href="' .$cp_edit_link. '">edit</a> &middot; <a class="cp_tl_del" href="' .$cp_del_link. '" style="color:red;" onclick="javascript:check=confirm(\'' . __('WARNING: This will delete the selected task list and all tasks in the list.\n\nChoose [Cancel] to Stop, [OK] to delete.\n', 'collabpress' ) .'\');if(check==false) return false;">' .__('delete', 'collabpress'). '</a></span></li>'; 
    257         } 
    258  
    259     endwhile; 
    260     wp_reset_query(); 
    261     else : 
    262         echo '<p class="description cp_none">'.__( 'No Task Lists...', 'collabpress' ).'</p>'; 
    263     endif; 
    264     echo '</ul>'; 
     243    global $current_user; 
     244     
     245    get_currentuserinfo(); 
     246 
     247    //verify user has permission to access the project 
     248    if ( cp_check_project_permissions( $current_user->ID, $cp_project->id ) ) { 
     249     
     250        // Get Task Lists 
     251        $task_lists_args = array( 
     252                'post_type' => 'cp-task-lists', 
     253                'meta_key' => '_cp-project-id', 
     254                'meta_value' => $cp_project->id, 
     255                'showposts' => '-1' 
     256                ); 
     257        $task_lists_query = new WP_Query( $task_lists_args ); 
     258 
     259        echo '<h4 class="cp_tl_title">' . __('Tasks Lists', 'collabpress') . '</h4>'; 
     260 
     261        // WP_Query(); 
     262        echo '<ul class="cp_tl">'; 
     263        if ( $task_lists_query->have_posts() ) : 
     264        while( $task_lists_query->have_posts() ) : $task_lists_query->the_post(); 
     265 
     266            //generate delete task list link 
     267            $cp_del_link = CP_DASHBOARD .'&project='.$cp_project->id.'&cp-delete-task-list-id='.get_the_ID(); 
     268            $cp_del_link = ( function_exists('wp_nonce_url') ) ? wp_nonce_url( $cp_del_link, 'cp-action-delete_task_list' ) : $cp_del_link; 
     269 
     270            //generate edit task list link 
     271            $cp_edit_link = CP_DASHBOARD .'&project='.$cp_project->id.'&task-list='.get_the_ID().'&view=edit'; 
     272 
     273            echo '<li><a class="cp_tl_name" href="'.CP_DASHBOARD.'&project='.$cp_project->id.'&task-list='.get_the_ID().'">'.get_the_title().'</a>'; 
     274 
     275            //check if user can view edit/delete links 
     276            if ( cp_check_permissions( 'settings_user_role' ) ) { 
     277            echo '<span class="edit-del-links"><a class="cp_tl_edit" href="' .$cp_edit_link. '">edit</a> &middot; <a class="cp_tl_del" href="' .$cp_del_link. '" style="color:red;" onclick="javascript:check=confirm(\'' . __('WARNING: This will delete the selected task list and all tasks in the list.\n\nChoose [Cancel] to Stop, [OK] to delete.\n', 'collabpress' ) .'\');if(check==false) return false;">' .__('delete', 'collabpress'). '</a></span></li>'; 
     278            } 
     279 
     280        endwhile; 
     281        wp_reset_query(); 
     282        else : 
     283            echo '<p class="description cp_none">'.__( 'No Task Lists...', 'collabpress' ).'</p>'; 
     284        endif; 
     285        echo '</ul>'; 
     286     
     287    } 
    265288} 
    266289 
     
    271294        global $cp_task_list; 
    272295        global $post; 
    273  
    274         //get open tasks 
    275         $tasks_query = cp_get_tasks( $cp_task_list->id, 'open' ); 
    276         $cp_count = 0; 
    277         echo '<h4 class="cp_tl_title">' . __( 'Current Tasks', 'collabpress' ) . '</h4>'; 
    278  
    279         if ($tasks_query) : 
    280         foreach ($tasks_query as $post): 
    281         setup_postdata($post); 
    282          
    283         $cp_count++; 
    284             // adds odd or even to class of task summary 
    285             if ( $cp_count % 2 ) { $oddeven_class = "odd"; } 
    286             else { $oddeven_class = "even"; } 
     296        global $current_user; 
     297 
     298        get_currentuserinfo(); 
     299         
     300        //verify user has permission to access the project 
     301        if ( cp_check_project_permissions( $current_user->ID, $cp_project->id ) ) { 
     302 
     303            //get open tasks 
     304            $tasks_query = cp_get_tasks( $cp_task_list->id, 'open' ); 
     305            $cp_count = 0; 
     306            echo '<h4 class="cp_tl_title">' . __( 'Current Tasks', 'collabpress' ) . '</h4>'; 
     307 
     308            if ($tasks_query) : 
     309            foreach ($tasks_query as $post): 
     310            setup_postdata($post); 
     311 
     312            $cp_count++; 
     313                // adds odd or even to class of task summary 
     314                if ( $cp_count % 2 ) { $oddeven_class = "odd"; } 
     315                else { $oddeven_class = "even"; } 
     316 
     317                $user = get_post_meta(get_the_ID(), '_cp-task-assign', true); 
     318                $user = get_userdata($user); 
     319 
     320                // get user's name resorts to nickname if not entered 
     321                $user_name = $user->first_name; 
     322                $user_name .= " " . $user->last_name; 
     323                if ( $user->first_name == "" && $user->last_name == "" ) { 
     324                $user_name = $user->nickname; 
     325                } 
     326 
     327                //get due date 
     328                $task_due_date = get_post_meta( get_the_ID(), '_cp-task-due', true ); 
     329 
     330                //get comment count 
     331                $num_comments = get_comments_number(); 
     332                if ( $num_comments == 1 ) $num_comments .= " comment"; // if only one comment 
     333                elseif ( $num_comments > 1 ) $num_comments .= " comments"; // if more than one comment 
     334                elseif ( $num_comments == 0 ) $num_comments = ""; // if more than one comment 
     335 
     336                //get user ID assigned the task 
     337                $task_user_id = get_post_meta( get_the_ID(), '_cp-task-assign', true ); 
     338 
     339                //generate complete task link 
     340                $link = CP_DASHBOARD .'&project=' .$cp_project->id .'&task-list=' .$cp_task_list->id .'&cp-complete-task-id=' .get_the_ID(); 
     341                $link = ( function_exists( 'wp_nonce_url' ) ) ? wp_nonce_url( $link, 'cp-complete-task' ) : $link; 
     342 
     343                //generate delete task link 
     344                $cp_del_link = CP_DASHBOARD .'&project='.$cp_project->id.'&task-list=' .$cp_task_list->id .'&cp-delete-task-id='.get_the_ID(); 
     345                $cp_del_link = ( function_exists('wp_nonce_url') ) ? wp_nonce_url( $cp_del_link, 'cp-action-delete_task' ) : $cp_del_link; 
     346 
     347                //generate edit task link 
     348                $cp_edit_link = CP_DASHBOARD.'&project='.$cp_project->id.'&task='.get_the_ID().'&view=edit'; 
     349 
     350                //check task status 
     351                $task_status = get_post_meta( get_the_ID(), '_cp-task-status', true ); 
     352 
     353                //check task priority 
     354                $task_priority = get_post_meta( get_the_ID(), '_cp-task-priority', true ); 
     355 
     356                echo '<div class="cp_task_summary '. $oddeven_class . '">'; 
     357 
     358                    echo '<input type="checkbox" name="" value="0" onclick="window.location=\''. $link. '\'; return true;"  /> '; 
     359                    echo '<a class="cp_task_name" href="'.CP_DASHBOARD.'&project='.$cp_project->id.'&task='.get_the_ID().'">' .cp_limit_length( get_the_title(), 125 ). '</a>'; 
     360 
     361                    echo '<div class="cp_task_meta">'; 
     362 
     363                        echo '<span class="cp_assign_due">'.__( 'Assigned to:', 'collabpress' ) .'' .get_avatar( $task_user_id, 16 ). '' . $user_name . ' - ' .__('Due: ', 'collabpress') . $task_due_date .' - ' .__('Priority: ', 'collabpress') .$task_priority.'</span>'; 
     364                        if ( $num_comments > 0 ) echo '<span class="cp_task_comm">'.$num_comments. '</span>'; 
     365                         
     366                        //check if user can view edit/delete links 
     367                        if ( cp_check_permissions( 'settings_user_role' ) ) { 
     368                            echo '<span class="edit-del-links"><a class="cp_task_edit" href="'.$cp_edit_link.'">' .__('edit', 'collabpress'). '</a> &middot; <a class="cp_task_del" href="'. $cp_del_link .'" style="color:red;" onclick="javascript:check=confirm(\'' . __('WARNING: This will delete the selected task.\n\nChoose [Cancel] to Stop, [OK] to delete.\n', 'collabpress' ) .'\');if(check==false) return false;">' .__( 'delete', 'collabpress' ). '</a></span>'; 
     369                        } 
     370 
     371                    echo '</div>'; 
     372 
     373                echo '</div>'; 
     374 
     375            endforeach; 
     376 
     377            else : 
     378                echo '<p class="cp_none">'.__( 'No Tasks...', 'collabpress' ).'</p>'; 
     379            endif; 
     380 
     381            echo '<div style="clear:both;"></div>'; 
     382 
     383            //get completed tasks 
     384            $tasks_query = cp_get_tasks( $cp_task_list->id, 'complete' ); 
     385            $cp_count = 0; 
     386            echo '<h4 class="cp_tl_title">' . __( 'Completed Tasks', 'collabpress' ) . '</h4>'; 
     387 
     388            if ($tasks_query) : 
     389            foreach ($tasks_query as $post): 
     390            setup_postdata($post); 
     391 
     392            $cp_count++; 
     393                // adds odd or even to class of task summary 
     394                if ( $cp_count % 2 ) { $oddeven_class = "odd"; } 
     395                else { $oddeven_class = "even"; } 
     396 
     397                $user = get_post_meta(get_the_ID(), '_cp-task-assign', true); 
     398                $user = get_userdata($user); 
     399 
     400                // get user's name resorts to nickname if not entered 
     401                $user_name = $user->first_name; 
     402                $user_name .= " " . $user->last_name; 
     403                if ( $user->first_name == "" || $user->last_name == "" ) { 
     404                $user_name = $user->nickname; 
     405                } 
     406 
     407                //get due date 
     408                $task_due_date = get_post_meta( get_the_ID(), '_cp-task-due', true ); 
     409 
     410                //get comment count 
     411                $num_comments = get_comments_number(); 
     412                if ( $num_comments == 1 ) $num_comments .= " comment"; // if only one comment 
     413                elseif ( $num_comments > 1 ) $num_comments .= " comments"; // if more than one comment 
     414 
     415                //get user ID assigned the task 
     416                $task_user_id = get_post_meta( get_the_ID(), '_cp-task-assign', true ); 
     417 
     418                //generate complete task link 
     419                $link = CP_DASHBOARD .'&project=' .$cp_project->id .'&task-list=' .$cp_task_list->id .'&cp-complete-task-id=' .get_the_ID(); 
     420                $link = ( function_exists( 'wp_nonce_url' ) ) ? wp_nonce_url( $link, 'cp-complete-task' ) : $link; 
     421 
     422                //check task status 
     423                $task_status = get_post_meta( get_the_ID(), '_cp-task-status', true ); 
     424 
     425                //check task priority 
     426                $task_priority = get_post_meta( get_the_ID(), '_cp-task-priority', true ); 
     427 
     428                echo '<div class="cp_task_summary ' . $oddeven_class . '">'; 
     429 
     430                    echo '<input type="checkbox" name="" value="0" onclick="window.location=\''. $link. '\'; return true;"  /> '; 
     431 
     432                    if ( $task_status == 'complete') { 
     433                        echo '<span style="text-decoration:line-through">'; 
     434                    } 
     435 
     436                    echo '<a class="cp_task_name" href="'.CP_DASHBOARD.'&project='.$cp_project->id.'&task='.get_the_ID().'">'.cp_limit_length( get_the_title(), 125 ).'</a>'; 
     437 
     438                    if ( $task_status == 'complete') { 
     439                        echo '</span>'; 
     440                    } 
     441 
     442                    echo '<div class="cp_task_meta">'; 
     443                        echo '<span class="cp_assign_due">'.__( 'Assigned to:', 'collabpress' ) .'' .get_avatar( $task_user_id, 16 ). '' . $user_name . ' - ' .__('Due: ', 'collabpress') . $task_due_date .' - ' .__('Priority: ', 'collabpress') .$task_priority.'</span>'; 
     444                        echo '<span class="cp_task_comm">'.$num_comments. '</span>'; 
     445                    echo '</div>'; 
     446 
     447                echo '</div>'; 
     448 
     449            endforeach; 
     450 
     451            else : 
     452                echo '<p class="cp_none">'.__( 'No Tasks Completed...', 'collabpress' ).'</p>'; 
     453            endif; 
     454 
     455            echo '<div style="clear:both;"></div>'; 
    287456             
    288             $user = get_post_meta(get_the_ID(), '_cp-task-assign', true); 
    289             $user = get_userdata($user); 
    290              
    291             // get user's name resorts to nickname if not entered 
    292             $user_name = $user->first_name; 
    293             $user_name .= " " . $user->last_name; 
    294             if ( $user->first_name == "" && $user->last_name == "" ) { 
    295             $user_name = $user->nickname; 
    296             } 
    297              
    298             //get due date 
    299             $task_due_date = get_post_meta( get_the_ID(), '_cp-task-due', true ); 
    300  
    301             //get comment count 
    302             $num_comments = get_comments_number(); 
    303             if ( $num_comments == 1 ) $num_comments .= " comment"; // if only one comment 
    304             elseif ( $num_comments > 1 ) $num_comments .= " comments"; // if more than one comment 
    305             elseif ( $num_comments == 0 ) $num_comments = ""; // if more than one comment 
    306  
    307             //get user ID assigned the task 
    308             $task_user_id = get_post_meta( get_the_ID(), '_cp-task-assign', true ); 
    309  
    310             //generate complete task link 
    311             $link = CP_DASHBOARD .'&project=' .$cp_project->id .'&task-list=' .$cp_task_list->id .'&cp-complete-task-id=' .get_the_ID(); 
    312             $link = ( function_exists( 'wp_nonce_url' ) ) ? wp_nonce_url( $link, 'cp-complete-task' ) : $link; 
    313  
    314             //generate delete task link 
    315             $cp_del_link = CP_DASHBOARD .'&project='.$cp_project->id.'&task-list=' .$cp_task_list->id .'&cp-delete-task-id='.get_the_ID(); 
    316             $cp_del_link = ( function_exists('wp_nonce_url') ) ? wp_nonce_url( $cp_del_link, 'cp-action-delete_task' ) : $cp_del_link; 
    317  
    318             //generate edit task link 
    319             $cp_edit_link = CP_DASHBOARD.'&project='.$cp_project->id.'&task='.get_the_ID().'&view=edit'; 
    320  
    321             //check task status 
    322             $task_status = get_post_meta( get_the_ID(), '_cp-task-status', true ); 
    323  
    324             //check task priority 
    325             $task_priority = get_post_meta( get_the_ID(), '_cp-task-priority', true ); 
    326  
    327             echo '<div class="cp_task_summary '. $oddeven_class . '">'; 
    328                  
    329                 echo '<input type="checkbox" name="" value="0" onclick="window.location=\''. $link. '\'; return true;"  /> '; 
    330                 echo '<a class="cp_task_name" href="'.CP_DASHBOARD.'&project='.$cp_project->id.'&task='.get_the_ID().'">'.get_the_title().'</a>'; 
    331                  
    332                 echo '<div class="cp_task_meta">'; 
    333                      
    334                     echo '<span class="cp_assign_due">'.__( 'Assigned to:', 'collabpress' ) .'' .get_avatar( $task_user_id, 16 ). '' . $user_name . ' - ' .__('Due: ', 'collabpress') . $task_due_date .' - ' .__('Priority: ', 'collabpress') .$task_priority.'</span>'; 
    335                     if ( $num_comments > 0 ) echo '<span class="cp_task_comm">'.$num_comments. '</span>'; 
    336                     //check if user can view edit/delete links 
    337                     if ( cp_check_permissions( 'settings_user_role' ) ) { 
    338                         echo '<span class="edit-del-links"><a class="cp_task_edit" href="'.$cp_edit_link.'">' .__('edit', 'collabpress'). '</a> &middot; <a class="cp_task_del" href="'. $cp_del_link .'" style="color:red;" onclick="javascript:check=confirm(\'' . __('WARNING: This will delete the selected task.\n\nChoose [Cancel] to Stop, [OK] to delete.\n', 'collabpress' ) .'\');if(check==false) return false;">' .__( 'delete', 'collabpress' ). '</a></span>'; 
    339                     } 
    340                 echo '</div>'; 
    341                  
    342             echo '</div>'; 
    343  
    344         endforeach; 
    345  
    346         else : 
    347             echo '<p class="cp_none">'.__( 'No Tasks...', 'collabpress' ).'</p>'; 
    348         endif; 
    349  
    350         echo '<div style="clear:both;"></div>'; 
    351  
    352         //get completed tasks 
    353         $tasks_query = cp_get_tasks( $cp_task_list->id, 'complete' ); 
    354         $cp_count = 0; 
    355         echo '<h4 class="cp_tl_title">' . __( 'Completed Tasks', 'collabpress' ) . '</h4>'; 
    356  
    357         if ($tasks_query) : 
    358         foreach ($tasks_query as $post): 
    359         setup_postdata($post); 
    360          
    361         $cp_count++; 
    362             // adds odd or even to class of task summary 
    363             if ( $cp_count % 2 ) { $oddeven_class = "odd"; } 
    364             else { $oddeven_class = "even"; } 
    365              
    366             $user = get_post_meta(get_the_ID(), '_cp-task-assign', true); 
    367             $user = get_userdata($user); 
    368              
    369             // get user's name resorts to nickname if not entered 
    370             $user_name = $user->first_name; 
    371             $user_name .= " " . $user->last_name; 
    372             if ( $user->first_name == "" || $user->last_name == "" ) { 
    373             $user_name = $user->nickname; 
    374             } 
    375  
    376             //get due date 
    377             $task_due_date = get_post_meta( get_the_ID(), '_cp-task-due', true ); 
    378  
    379             //get comment count 
    380             $num_comments = get_comments_number(); 
    381             if ( $num_comments == 1 ) $num_comments .= " comment"; // if only one comment 
    382             elseif ( $num_comments > 1 ) $num_comments .= " comments"; // if more than one comment 
    383  
    384             //get user ID assigned the task 
    385             $task_user_id = get_post_meta( get_the_ID(), '_cp-task-assign', true ); 
    386  
    387             //generate complete task link 
    388             $link = CP_DASHBOARD .'&project=' .$cp_project->id .'&task-list=' .$cp_task_list->id .'&cp-complete-task-id=' .get_the_ID(); 
    389             $link = ( function_exists( 'wp_nonce_url' ) ) ? wp_nonce_url( $link, 'cp-complete-task' ) : $link; 
    390  
    391             //check task status 
    392             $task_status = get_post_meta( get_the_ID(), '_cp-task-status', true ); 
    393  
    394             //check task priority 
    395             $task_priority = get_post_meta( get_the_ID(), '_cp-task-priority', true ); 
    396  
    397             echo '<div class="cp_task_summary ' . $oddeven_class . '">'; 
    398              
    399                 echo '<input type="checkbox" name="" value="0" onclick="window.location=\''. $link. '\'; return true;"  /> '; 
    400      
    401                 if ( $task_status == 'complete') { 
    402                     echo '<span style="text-decoration:line-through">'; 
    403                 } 
    404      
    405                 echo '<a class="cp_task_name" href="'.CP_DASHBOARD.'&project='.$cp_project->id.'&task='.get_the_ID().'">'.get_the_title().'</a>'; 
    406                  
    407                 if ( $task_status == 'complete') { 
    408                     echo '</span>'; 
    409                 } 
    410                  
    411                 echo '<div class="cp_task_meta">'; 
    412                     echo '<span class="cp_assign_due">'.__( 'Assigned to:', 'collabpress' ) .'' .get_avatar( $task_user_id, 16 ). '' . $user_name . ' - ' .__('Due: ', 'collabpress') . $task_due_date .' - ' .__('Priority: ', 'collabpress') .$task_priority.'</span>'; 
    413                     echo '<span class="cp_task_comm">'.$num_comments. '</span>'; 
    414                 echo '</div>'; 
    415                  
    416             echo '</div>'; 
    417              
    418         endforeach; 
    419  
    420         else : 
    421             echo '<p class="cp_none">'.__( 'No Tasks Completed...', 'collabpress' ).'</p>'; 
    422         endif; 
    423  
    424         echo '<div style="clear:both;"></div>'; 
     457        } 
    425458} 
    426459?> 
  • collabpress/trunk/includes/templates/collabpress/project.php

    r442577 r638127  
    4141*/ ?> 
    4242 
    43 <div class="cp-meta-box cp-edit-project hide-on-load"> 
    44     <div title="Click to toggle" class="handlediv"><br></div> 
    45     <h4 class="hndle"><span><?php _e( 'Edit Project', 'collabpress' ) ?></span></h4> 
    46      
    47     <div class="inside"> 
    48         <?php $cp_page->cp_edit_project_meta() ?> 
     43 
     44<?php if ( cp_check_permissions( 'settings_user_role' ) ) : ?>   
     45    <div class="cp-meta-box cp-edit-project hide-on-load"> 
     46        <div title="Click to toggle" class="handlediv"><br></div> 
     47        <h4 class="hndle"><span><?php _e( 'Edit Project', 'collabpress' ) ?></span></h4> 
     48         
     49        <div class="inside"> 
     50            <?php $cp_page->cp_edit_project_meta() ?> 
     51        </div> 
    4952    </div> 
    50 </div> 
    51      
     53<?php endif ?>   
  • collabpress/trunk/includes/templates/collabpress/projects-loop.php

    r442577 r638127  
    108108<hr /> 
    109109 
    110 <div class="cp-meta-box cp-new-project hide-on-load"> 
    111     <div title="Click to toggle" class="handlediv"><br></div> 
    112     <h4 class="hndle"><span><?php _e( 'New Project', 'collabpress' ) ?></span></h4> 
    113  
    114     <div class="inside"> 
    115         <?php cp_add_project() ?> 
     110<?php if ( cp_check_permissions( 'settings_user_role' ) ) : ?>   
     111    <div class="cp-meta-box cp-new-project hide-on-load"> 
     112        <div title="Click to toggle" class="handlediv"><br></div> 
     113        <h4 class="hndle"><span><?php _e( 'New Project', 'collabpress' ) ?></span></h4> 
     114     
     115        <div class="inside"> 
     116            <?php cp_add_project() ?> 
     117        </div> 
    116118    </div> 
    117 </div> 
     119<?php endif ?> 
  • collabpress/trunk/readme.txt

    r442756 r638127  
    11=== CollabPress === 
    2 Contributors: WDS-Scott, williamsba1, cochran, boonebgorges 
     2Contributors: scottbasgaard, williamsba1, cochran, boonebgorges, ericlewis 
    33Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3084056 
    44Tags: task, management, basecamp, to do, projects, lists, team, planning, tracking, reporting, shortcode, widget, multisite, buddypress 
    55Requires at least: 3.0 
    6 Tested up to: 3.2.1 
    7 Stable tag: 1.2.1 
     6Tested up to: 3.5 
     7Stable tag: 1.2.2 
    88 
    99Project management and task tracking software for WordPress 
     
    2727Works with WordPress, Multisite, and BuddyPress! 
    2828 
     29= Get Involved = 
     30 
     31CollabPress is an Open Source project. If you are a developer, make sure to check out and contribute to CollabPress on the [CollabPress GitHub Repository](https://github.com/WebDevStudios/CollabPress/ "CollabPress GitHub Repository"). 
     32 
    2933== Screenshots == 
    3034 
     
    3741 
    3842== Changelog == 
     43 
     44= 1.2.2 = 
     45* Calls to $wpdb have been replaced with calls to the WP APIs 
     46* Fixed issue with screen options and missing columns 
     47* Hardened security 
     48* Use bundled jQuery UI and Datepicker instead of Google's 
     49* WordPress 3.5 support 
    3950 
    4051= 1.2.1 = 
     
    114125== Upgrade Notice == 
    115126 
     127= 1.2.2 = 
     128* Calls to $wpdb have been replaced with calls to the WP APIs 
     129* Fixed issue with screen options and missing columns 
     130* Hardened security 
     131* Use bundled jQuery UI and Datepicker instead of Google's 
     132* WordPress 3.5 support 
     133 
    116134= 1.2.1 = 
    117135* Fixed bug when adding tasks without BuddyPress installed 
     
    173191= Why are some features not implemented? = 
    174192 
    175 CollabPress is currently in early development. If you have any bugs to report, ideas or anything else please visit the support forum. [CollabPress Support](http://collabpress.org/support/forum/ "Task Management Plugin Support") 
    176  
    177 You can also view the [CollabPress Roadmap](http://collabpress.org/roadmap/ "WordPress Project Management Plugin Roadmap") to see what features to expect in upcoming versions 
     193CollabPress is currently in early development. If you have any bugs to report, ideas or anything else please visit the support forum. [CollabPress Support](http://wordpress.org/support/plugin/collabpress "Task Management Plugin Support") 
    178194 
    179195= Does this plugin work with WordPress Multisite? = 
     
    182198 
    183199== Plugin Support == 
    184 [CollabPress Support](http://collabpress.org/support/forum/ "CollabPress Plugin Support") 
     200[CollabPress Support](http://wordpress.org/support/plugin/collabpress "CollabPress Plugin Support") 
Note: See TracChangeset for help on using the changeset viewer.