private static function getFileAndCatIds() { $file_ids = array_filter(array_map('intval', empty($_POST['file']) ? empty($_POST['files']) ? array() : json_decode(stripslashes($_POST['files'])) : $_POST['file'])); $cat_ids = array_filter(array_map('intval', empty($_POST['cat']) ? empty($_POST['cats']) ? array() : json_decode(stripslashes($_POST['cats'])) : $_POST['cat'])); $cat_select = empty($cat_ids) ? " 0=1 " : WPFB_File::GetSqlCatWhereStr($cat_ids); $file_select = empty($file_ids) ? " 0=1 " : 'file_id = ' . implode(' OR file_id = ', $file_ids); return array($file_ids, $cat_ids, " ({$cat_select}) OR ({$file_select}) "); }
function GenerateList(&$content, $categories, $list_args = null) { if (!empty($list_args)) { $this->current_list = (object) $list_args; unset($list_args); } $hia = WPFB_Core::$settings->hide_inaccessible; $sort = WPFB_Core::GetSortSql($this->current_list->file_order); if ($this->current_list->page_limit > 0) { // pagination $page = empty($_REQUEST['wpfb_list_page']) || $_REQUEST['wpfb_list_page'] < 1 ? 1 : intval($_REQUEST['wpfb_list_page']); $start = $this->current_list->page_limit * ($page - 1); } else { $start = -1; } $search_term = empty($_GET['wpfb_s']) ? null : stripslashes($_GET['wpfb_s']); if ($search_term || WPFB_Core::$file_browser_search) { // search wpfb_loadclass('Search'); $where = WPFB_Search::SearchWhereSql(WPFB_Core::$settings->search_id3, $search_term); } else { $where = '1=1'; } $num_total_files = 0; if (is_null($categories)) { // if null, just list all files! $files = WPFB_File::GetFiles2($where, $hia, $sort, $this->current_list->page_limit, $start); $num_total_files = WPFB_File::GetNumFiles2($where, $hia); foreach ($files as $file) { $content .= $file->GenTpl2($this->file_tpl_tag); } } else { if (!empty($this->current_list->cat_order)) { WPFB_Item::Sort($categories, $this->current_list->cat_order); } $cat = reset($categories); // get first category // here we check if single category and cat has at least one file (also secondary cat files!) if (count($categories) == 1 && $cat->cat_num_files > 0) { // single cat if (!$cat->CurUserCanAccess()) { return ''; } $where = "({$where}) AND " . WPFB_File::GetSqlCatWhereStr($cat->cat_id); $files = WPFB_File::GetFiles2($where, $hia, $sort, $this->current_list->page_limit, $start); $num_total_files = WPFB_File::GetNumFiles2($where, $hia); if ($this->current_list->cat_grouping && $num_total_files > 0) { $content .= $cat->GenTpl2($this->cat_tpl_tag); } foreach ($files as $file) { $content .= $file->GenTpl2($this->file_tpl_tag); } } else { // multi-cat // TODO: multi-cat list pagination does not work properly yet // special handling of categories that do not have files directly: list child cats! if (count($categories) == 1 && $cat->cat_num_files == 0) { $categories = $cat->GetChildCats(true, true); if (!empty($this->current_list->cat_order)) { WPFB_Item::Sort($categories, $this->current_list->cat_order); } } if ($this->current_list->cat_grouping) { // group by categories $n = 0; foreach ($categories as $cat) { if (!$cat->CurUserCanAccess()) { continue; } $num_total_files = max($nf = WPFB_File::GetNumFiles2("({$where}) AND " . WPFB_File::GetSqlCatWhereStr($cat->cat_id), $hia), $num_total_files); // TODO //if($n > $this->current_list->page_limit) break; // TODO!! if ($nf > 0) { $files = WPFB_File::GetFiles2("({$where}) AND " . WPFB_File::GetSqlCatWhereStr($cat->cat_id), $hia, $sort, $this->current_list->page_limit, $start); if (count($files) > 0) { $content .= $cat->GenTpl2($this->cat_tpl_tag); // check for file count again, due to pagination! foreach ($files as $file) { $content .= $file->GenTpl2($this->file_tpl_tag); } } } } } else { // this is not very efficient, because all files are loaded, no pagination! $all_files = array(); foreach ($categories as $cat) { if (!$cat->CurUserCanAccess()) { continue; } $all_files += WPFB_File::GetFiles2("({$where}) AND " . WPFB_File::GetSqlCatWhereStr($cat->cat_id), $hia, $sort); } $num_total_files = count($all_files); WPFB_Item::Sort($all_files, $sort); $keys = array_keys($all_files); if ($start == -1) { $start = 0; } $last = $this->current_list->page_limit > 0 ? min($start + $this->current_list->page_limit, $num_total_files) : $num_total_files; for ($i = $start; $i < $last; $i++) { $content .= $all_files[$keys[$i]]->GenTpl2($this->file_tpl_tag); } } } } return $num_total_files; }
/** * Get child files * * @access public * * @param $recursive Optional * @return WPFB_File[] Files */ function GetChildFiles($recursive = false, $sorting = null, $check_permissions = false) { if ($this->is_file) { return array($this->GetId() => $this); } if ($check_permissions && !$this->CurUserCanAccess()) { return array(); } // if recursive, include secondary category links with GetSqlCatWhereStr $where = $recursive ? WPFB_File::GetSqlCatWhereStr($this->cat_id) : '(file_category = ' . $this->cat_id . ')'; $files = WPFB_File::GetFiles2($where, $check_permissions, $sorting); if ($recursive) { $cats = $this->GetChildCats(true); foreach (array_keys($cats) as $i) { $files += $cats[$i]->GetChildFiles(false, $sorting, $check_permissions); } } return $files; }
/** * * @staticvar function $parent_walker * @param boolean $recursive * @return WPFB_File[] */ function GetChildFilesFast($recursive = false) { static $parent_walker = false; if (!$parent_walker) { $parent_walker = create_function('&$f,$fid,$pid', 'if($f->file_category != $pid) $f = null;'); } if ($this->is_file) { return array($this->GetId() => $this); } // get all direct child files (including secondary) if (!isset($this->cat_child_files)) { $this->cat_child_files = WPFB_File::GetFiles2(WPFB_File::GetSqlCatWhereStr($this->cat_id)); } $files = $this->cat_child_files; // if not recursive, exclude secondary category links with GetSqlCatWhereStr if (!$recursive) { array_walk($files, $parent_walker, $this->cat_id); return array_filter($files); } $cats = $this->GetChildCats(false); foreach (array_keys($cats) as $i) { $files += $cats[$i]->GetChildFilesFast(true); } return $files; }
function widget($args, $instance) { wpfb_loadclass('File', 'Category', 'Output'); extract($args); $title = apply_filters('widget_title', $instance['title']); echo $before_widget, $before_title . (empty($title) ? __('Files', WPFB) : $title) . $after_title; // special handling for empty cats if (!empty($instance['cat']) && !is_null($cat = WPFB_Category::GetCat($instance['cat'])) && $cat->cat_num_files == 0) { $instance['cat'] = array(); foreach ($cat->GetChildCats() as $c) { $instance['cat'][] = $c->cat_id; } } $files = WPFB_File::GetFiles2(empty($instance['cat']) ? null : WPFB_File::GetSqlCatWhereStr($instance['cat']), WPFB_Core::$settings->hide_inaccessible, array($instance['sort-by'] => $instance['sort-asc'] ? 'ASC' : 'DESC'), (int) $instance['limit']); //$instance['tpl_parsed'] //WPFB_FileListWidget $tpl_func = WPFB_Core::CreateTplFunc($instance['tpl_parsed']); echo '<ul>'; foreach ($files as $file) { echo '<li>', $tpl_func($file), '</li>'; } echo '</ul>'; echo $after_widget; }
static function GetTreeItems($parent_id, $args = array()) { /* $args = array( * sort_cats * sort_files * cats_only * exclude_attached * priv * idp => * onselect * ); */ $parent_id = is_object($parent_id) ? $parent_id->cat_id : intval($parent_id); $args = self::fileBrowserArgs($args); $type = $args['type']; $browser = $type === 'browser'; $filesel = $type === 'fileselect'; $catsel = $type === 'catselect'; $args['idp'] = wp_strip_all_tags($args['idp']); $idp_cat = $args['idp'] . 'cat-'; $idp_file = $args['idp'] . 'file-'; $file_tpl = $cat_tpl = !empty($args['tpl']) ? $args['tpl'] : (($is_admin = !empty($args['is_admin'])) ? 'filebrowser_admin' : 'filebrowser'); if ($parent_id > 0 && (is_null($cat = WPFB_Category::GetCat($parent_id)) || !$cat->CurUserCanAccess())) { return array((object) array('id' => 0, 'text' => WPFB_Core::$settings->cat_inaccessible_msg)); } $sql_sort_files = $browser ? WPFB_Core::GetSortSql((WPFB_Core::$settings->file_browser_file_sort_dir ? '>' : '<') . WPFB_Core::$settings->file_browser_file_sort_by) : 'file_display_name'; $sql_sort_cats = $browser ? WPFB_Core::GetSortSql((WPFB_Core::$settings->file_browser_cat_sort_dir ? '>' : '<') . WPFB_Core::$settings->file_browser_cat_sort_by, false, true) : 'cat_name'; $files_before_cats = $browser && WPFB_Core::$settings->file_browser_fbc; $inline_add_cat = WPFB_Core::CurUserCanCreateCat(); $where = " cat_parent = {$parent_id} "; if ($browser) { $where .= " AND cat_exclude_browser <> '1' "; } $cats = WPFB_Category::GetCats("WHERE {$where} ORDER BY {$sql_sort_cats}"); $cat_items = array(); $i = 0; $folder_class = $filesel || $catsel ? 'folder' : ''; foreach ($cats as $c) { if ($c->CurUserCanAccess(true)) { $cat_items[$i++] = (object) array('id' => $idp_cat . $c->cat_id, 'cat_id' => $c->cat_id, 'text' => self::fileBrowserCatItemText($catsel, $filesel, $c, $args['onselect'], $cat_tpl), 'hasChildren' => $inline_add_cat || $c->HasChildren($catsel), 'classes' => $folder_class); } } if ($inline_add_cat) { $is = WPFB_Core::$settings->small_icon_size > 0 ? WPFB_Core::$settings->small_icon_size : 32; $cat_items[$i++] = (object) array('id' => $idp_cat . '0', 'cat_id' => 0, 'text' => '<form action="" style="display:none;"><input type="text" placeholder="' . __('Category Name', WPFB) . '" name="cat_name" /></form> ' . '<a href="#" style="text-decoration:none;" onclick=\'return wpfb_newCatInput(this,' . $parent_id . ');\'><span style="' . ($browser ? 'font-size:' . $is . 'px;width:' . $is . 'px' : 'font-size:200%') . ';line-height:0;vertical-align:sub;display:inline-block;text-align:center;">+</span>' . __('Add Category', WPFB) . '</a>' . '<span style="font-size: 200%;vertical-align: sub;line-height: 0;font-weight: lighter;"> / </span>' . '<a href="#" style="text-decoration:none;" class="add-file"><span style="' . ($browser ? 'font-size:' . $is . 'px;width:' . $is . 'px' : 'font-size:200%') . ';line-height:0;vertical-align:sub;display:inline-block;text-align:center;">+</span>' . __('Add File', WPFB) . '</a>', 'hasChildren' => false, 'classes' => 'add-item'); } elseif ($parent_id == 0 && $catsel && $i == 0) { return array((object) array('id' => $idp_cat . '0', 'text' => sprintf(__('You did not create a category. <a href="%s" target="_parent">Click here to create one.</a>', WPFB), admin_url('admin.php?page=wpfilebase_cats#addcat')), 'hasChildren' => false)); } $file_items = array(); $i = 0; if (empty($args['cats_only']) && !$catsel) { $where = WPFB_File::GetSqlCatWhereStr($parent_id); if (!empty($args['exclude_attached'])) { $where .= " AND `file_post_id` = 0"; } // $files = WPFB_File::GetFiles2(WPFB_File::GetSqlCatWhereStr($root_id), WPFB_Core::$settings->hide_inaccessible, $sql_file_order); //$files = WPFB_File::GetFiles2(WPFB_File::GetSqlCatWhereStr($root_id), WPFB_Core::$settings->hide_inaccessible, $sql_file_order); $files = WPFB_File::GetFiles2($where, WPFB_Core::$settings->hide_inaccessible && !($filesel && wpfb_call('Core', 'CurUserCanUpload')), $sql_sort_files); foreach ($files as $f) { $file_items[$i++] = (object) array('id' => $idp_file . $f->file_id, 'text' => $filesel ? '<a href="javascript:;" onclick="' . sprintf($args['onselect'], $f->file_id) . '">' . esc_html($f->GetTitle(24)) . '</a> <span style="font-size:75%;vertical-align:top;">' . esc_html($f->file_name) . '</span>' : $f->GenTpl2($file_tpl, false), 'classes' => $filesel ? 'file' : null, 'hasChildren' => false); } } return $files_before_cats ? array_merge($file_items, $cat_items) : array_merge($cat_items, $file_items); }
static function GetTreeItems($parent_id, $type = 'browser', $args = array()) { /* $args = array( * sort_cats * sort_files * cats_only * exclude_attached * priv * cat_id_fmt => * file_id_fmt => * onselect * ); */ $parent_id = is_object($parent_id) ? $parent_id->cat_id : intval($parent_id); $browser = $type === 'browser'; $filesel = $type === 'fileselect'; $catsel = $type === 'catselect'; if ($parent_id > 0 && (is_null($cat = WPFB_Category::GetCat($parent_id)) || !$cat->CurUserCanAccess())) { return array((object) array('id' => 0, 'text' => WPFB_Core::$settings->cat_inaccessible_msg)); } $sql_sort_files = $browser ? WPFB_Core::GetSortSql((WPFB_Core::$settings->file_browser_file_sort_dir ? '>' : '<') . WPFB_Core::$settings->file_browser_file_sort_by) : 'file_display_name'; $sql_sort_cats = $browser ? WPFB_Core::GetSortSql((WPFB_Core::$settings->file_browser_cat_sort_dir ? '>' : '<') . WPFB_Core::$settings->file_browser_cat_sort_by, false, true) : 'cat_name'; $cat_id_format = empty($args['cat_id_fmt']) ? 'wpfb-cat-%d' : $args['cat_id_fmt']; $file_id_format = empty($args['file_id_fmt']) ? 'wpfb-file-%d' : $args['file_id_fmt']; if ($filesel || $catsel) { $onselect = $args['onselect']; } $files_before_cats = $browser && WPFB_Core::$settings->file_browser_fbc; $where = " cat_parent = {$parent_id} "; if ($browser) { $where .= " AND cat_exclude_browser <> '1' "; } $cats = WPFB_Category::GetCats("WHERE {$where} ORDER BY {$sql_sort_cats}"); $cat_items = array(); $i = 0; foreach ($cats as $c) { if ($c->CurUserCanAccess(true)) { $cat_items[$i++] = (object) array('id' => sprintf($cat_id_format, $c->cat_id), 'cat_id' => $c->cat_id, 'text' => $catsel ? '<a href="javascript:' . sprintf($onselect, $c->cat_id, str_replace('\'', '\\\'', htmlspecialchars(stripslashes($c->cat_name)))) . '">' . esc_html($c->GetTitle(24)) . '</a>' : ($filesel ? esc_html($c->cat_name) . " ({$c->cat_num_files} / {$c->cat_num_files_total})" : $c->GenTpl2('filebrowser', false)), 'hasChildren' => $c->HasChildren($catsel), 'classes' => $filesel || $catsel ? 'folder' : null); } } if ($parent_id == 0 && $catsel && $i == 0) { return array((object) array('id' => sprintf($cat_id_format, 0), 'text' => sprintf(__('You did not create a category. <a href="%s" target="_parent">Click here to create one.</a>', WPFB), admin_url('admin.php?page=wpfilebase_cats#addcat')), 'hasChildren' => false)); } $file_items = array(); $i = 0; if (empty($args['cats_only']) && !$catsel) { $where = WPFB_File::GetSqlCatWhereStr($parent_id); if (!empty($args['exclude_attached'])) { $where .= " AND `file_post_id` = 0"; } // $files = WPFB_File::GetFiles2(WPFB_File::GetSqlCatWhereStr($root_id), WPFB_Core::$settings->hide_inaccessible, $sql_file_order); //$files = WPFB_File::GetFiles2(WPFB_File::GetSqlCatWhereStr($root_id), WPFB_Core::$settings->hide_inaccessible, $sql_file_order); $files = WPFB_File::GetFiles2($where, WPFB_Core::$settings->hide_inaccessible && !($filesel && wpfb_call('Admin', 'CurUserCanUpload')), $sql_sort_files); foreach ($files as $f) { $file_items[$i++] = (object) array('id' => sprintf($file_id_format, $f->file_id), 'text' => $filesel ? '<a href="javascript:' . sprintf($onselect, $f->file_id, str_replace('\'', '\\\'', htmlspecialchars(stripslashes($f->file_display_name)))) . '">' . esc_html($f->GetTitle(24)) . '</a> <span style="font-size:75%;vertical-align:top;">' . esc_html($f->file_name) . '</span>' : $f->GenTpl2('filebrowser', false), 'classes' => $filesel ? 'file' : null, 'hasChildren' => false); } } return $files_before_cats ? array_merge($file_items, $cat_items) : array_merge($cat_items, $file_items); }