/**
  * @group manage_folder
  * @group folders
  */
 public function test_manage_folder_user()
 {
     $u = $this->factory->user->create();
     $f = bp_docs_create_folder(array('name' => 'foo', 'user_id' => $u));
     $u1 = $this->factory->user->create();
     $this->set_current_user($u1);
     $this->assertFalse(current_user_can('bp_docs_manage_folder', $f));
     $u2 = $this->factory->user->create(array('role' => 'administrator'));
     $this->set_current_user($u2);
     $this->assertTrue(current_user_can('bp_docs_manage_folder', $f));
     $this->set_current_user($u);
     $this->assertTrue(current_user_can('bp_docs_manage_folder', $f));
 }
 /**
  * @group bp_docs_delete_folder_contents
  */
 public function test_bp_docs_delete_folder_contents()
 {
     $f1 = bp_docs_create_folder(array('name' => 'foo'));
     $f1_d1 = $this->factory->doc->create();
     $f1_d2 = $this->factory->doc->create();
     bp_docs_add_doc_to_folder($f1_d1, $f1);
     bp_docs_add_doc_to_folder($f1_d2, $f1);
     $f2 = bp_docs_create_folder(array('name' => 'foo', 'parent' => $f1));
     $f2_d1 = $this->factory->doc->create();
     $f2_d2 = $this->factory->doc->create();
     bp_docs_add_doc_to_folder($f2_d1, $f2);
     bp_docs_add_doc_to_folder($f2_d2, $f2);
     $f3 = bp_docs_create_folder(array('name' => 'foo', 'parent' => $f1));
     $f3_d1 = $this->factory->doc->create();
     $f3_d2 = $this->factory->doc->create();
     bp_docs_add_doc_to_folder($f3_d1, $f3);
     bp_docs_add_doc_to_folder($f3_d2, $f3);
     $f4 = bp_docs_create_folder(array('name' => 'foo', 'parent' => $f2));
     $f4_d1 = $this->factory->doc->create();
     $f4_d2 = $this->factory->doc->create();
     bp_docs_add_doc_to_folder($f4_d1, $f4);
     bp_docs_add_doc_to_folder($f4_d2, $f4);
     $this->assertTrue(bp_docs_delete_folder_contents($f1));
     $f1_term = bp_docs_get_folder_term($f1);
     $f1_docs = get_posts(array('post_type' => bp_docs_get_post_type_name(), 'tax_query' => array(array('taxonomy' => 'bp_docs_doc_in_folder', 'field' => 'term_id', 'terms' => $f1_term)), 'update_meta_cache' => false, 'update_term_cache' => false));
     $this->assertSame(array(), $f1_docs);
     $f2_term = bp_docs_get_folder_term($f2);
     $f2_docs = get_posts(array('post_type' => bp_docs_get_post_type_name(), 'tax_query' => array(array('taxonomy' => 'bp_docs_doc_in_folder', 'field' => 'term_id', 'terms' => $f2_term)), 'update_meta_cache' => false, 'update_term_cache' => false));
     $this->assertSame(array(), $f2_docs);
     $f3_term = bp_docs_get_folder_term($f3);
     $f3_docs = get_posts(array('post_type' => bp_docs_get_post_type_name(), 'tax_query' => array(array('taxonomy' => 'bp_docs_doc_in_folder', 'field' => 'term_id', 'terms' => $f3_term)), 'update_meta_cache' => false, 'update_term_cache' => false));
     $this->assertSame(array(), $f3_docs);
     $f4_term = bp_docs_get_folder_term($f4);
     $f4_docs = get_posts(array('post_type' => bp_docs_get_post_type_name(), 'tax_query' => array(array('taxonomy' => 'bp_docs_doc_in_folder', 'field' => 'term_id', 'terms' => $f4_term)), 'update_meta_cache' => false, 'update_term_cache' => false));
     $this->assertSame(array(), $f4_docs);
     $this->assertSame(array(), bp_docs_get_folders(array('parent_id' => $f1)));
     $this->assertSame(array(), bp_docs_get_folders(array('parent_id' => $f2)));
 }
/**
 * Process folder creation from manage-folders.
 */
function bp_docs_process_folder_create_cb()
{
    if (!bp_docs_is_docs_component() && !bp_is_current_action(bp_docs_get_docs_slug())) {
        return;
    }
    if (!bp_docs_is_folder_manage_view()) {
        return;
    }
    if (empty($_POST['bp-docs-create-folder-submit'])) {
        return;
    }
    $nonce = isset($_POST['bp-docs-create-folder-nonce']) ? stripslashes($_POST['bp-docs-create-folder-nonce']) : '';
    $redirect_url = bp_get_requested_url();
    if (!wp_verify_nonce($nonce, 'bp-docs-create-folder')) {
        bp_core_add_message(__('There was a problem editing that folder. Please try again.', 'bp-docs'), 'error');
        bp_core_redirect($redirect_url);
        die;
    }
    $folder_args = array('name' => stripslashes($_POST['new-folder']));
    $parent = isset($_POST['new-folder-parent']) ? intval($_POST['new-folder-parent']) : null;
    if (!empty($parent)) {
        $folder_args['parent'] = $parent;
    }
    // If there's a parent, the parent's folder type takes precedence
    if (!empty($parent)) {
        $folder_args['group_id'] = bp_docs_get_folder_group($parent);
        $folder_args['user_id'] = bp_docs_get_folder_user($parent);
        // Otherwise, trust the values passed
    } else {
        // Type
        $folder_type = stripslashes($_POST['new-folder-type']);
        if ('global' === $folder_type) {
            // Nothing to do
        } else {
            if ('me' === $folder_type) {
                $folder_args['user_id'] = bp_loggedin_user_id();
            } else {
                if (is_numeric($folder_type)) {
                    // This is a group
                    $folder_args['group_id'] = intval($folder_type);
                }
            }
        }
    }
    // Create the folder
    // @todo permissions checks
    $success = bp_docs_create_folder($folder_args);
    if (!empty($success) && !is_wp_error($success)) {
        bp_core_add_message(__('Folder successfully created.', 'bp-docs'), 'success');
    } else {
        bp_core_add_message(__('There was a problem creating the folder. Please try again.', 'bp-docs'), 'error');
    }
    bp_core_redirect($redirect_url);
    die;
}