static function Process() { list($file_ids, $cat_ids, $sql_where) = self::getFileAndCatIds(); $files = WPFB_File::GetFiles2($sql_where, 'edit'); $data = (object) $_POST; foreach ($files as $file) { $file->Lock(); // category if (!empty($data->file_category)) { $file->ChangeCategoryOrName($data->file_category); } // add tags if (!empty($data->file_tags)) { $file->SetTags($file->file_tags . ',' . $data->file_tags); } if (!empty($data->file_author)) { $file->file_author = $data->file_author; } if (isset($data->file_direct_linking) && $data->file_direct_linking !== "") { $file->file_direct_linking = (int) $data->file_direct_linking; } if (isset($data->file_offline) && $data->file_offline !== "") { $file->file_offline = (int) $data->file_offline; } if (!empty($data->file_password)) { $file->file_password = $data->file_password; } $file->Lock(false); $file->DBSave(); } return sprintf(__('%d File(s) processed.', 'wp-filebase'), count($files)); }
static function FileSearchContent(&$ref_content) { wpfb_loadclass('ListTpl'); $tpl = WPFB_ListTpl::Get(WPFB_Core::$settings->search_result_tpl); if ($tpl !== null) { $ref_content .= $tpl->Generate(null, array('page_limit' => WPFB_Core::$settings->filelist_num)); } else { $files = WPFB_File::GetFiles2(self::SearchWhereSql(WPFB_Core::$settings->search_id3, stripslashes($_GET['wpfb_s'])), WPFB_Core::$settings->hide_inaccessible); foreach ($files as $file) { $ref_content .= $file->GenTpl2(); } } }
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; }
function prepare_items() { global $wpdb; $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array($columns, $hidden, $sortable); $this->process_bulk_action(); $pagenum = $this->get_pagenum(); if (!isset($filesperpage) || $filesperpage < 0) { $filesperpage = 50; } $pagestart = ($pagenum - 1) * $filesperpage; $where = $this->get_file_where_cond(empty($_REQUEST['view']) ? null : $_REQUEST['view']); $order = "{$wpdb->wpfilebase_files}." . (!empty($_REQUEST['orderby']) && in_array($_REQUEST['orderby'], array_merge(array_keys(get_class_vars('WPFB_File')), array_keys(WPFB_Core::GetCustomFields(true)))) ? $_REQUEST['orderby'] . " " . (!empty($_REQUEST['order']) && $_REQUEST['order'] == "desc" ? "DESC" : "ASC") : "file_id DESC"); $total_items = WPFB_File::GetNumFiles2($where, 'edit'); $files = WPFB_File::GetFiles2($where, 'edit', $order, $filesperpage, $pagestart); if (empty($files) && !empty($wpdb->last_error)) { wp_die("<b>Database error</b>: " . $wpdb->last_error); } $this->items = $files; $this->set_pagination_args(array('total_items' => $total_items, 'per_page' => $filesperpage, 'total_pages' => ceil($total_items / $filesperpage))); }
/** * 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; }
function WPFB_SyncData($init = false) { if ($init) { $this->files = WPFB_File::GetFiles2(); $this->cats = WPFB_Category::GetCats(); $this->log = array('missing_files' => array(), 'missing_folders' => array(), 'changed' => array(), 'not_added' => array(), 'error' => array(), 'updated_categories' => array(), 'warnings' => array()); $this->known_filenames = array(); $this->new_files = array(); $this->missing_files = array(); $this->num_files_to_add = 0; $this->num_all_files = 0; $this->num_files_processed = 0; $this->time_begin = microtime(true); $this->mem_peak = memory_get_peak_usage(); } }
/** * * @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; }
static function UpdateItemsPath($files = null, $cats = null) { wpfb_loadclass('File', 'Category'); if (is_null($files)) { $files = WPFB_File::GetFiles2(); } if (is_null($cats)) { $cats = WPFB_Category::GetCats(); } foreach (array_keys($cats) as $i) { $cats[$i]->Lock(true); } foreach (array_keys($files) as $i) { $files[$i]->GetLocalPath(true); } foreach (array_keys($cats) as $i) { $cats[$i]->Lock(false); $cats[$i]->DBSave(); } }
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; }
public static function SettingsUpdated($old, &$new) { $messages = array(); wpfb_call('Setup', 'ProtectUploadPath'); // custom fields: $messages = array_merge($messages, WPFB_Admin::SyncCustomFields()); if ($old['thumbnail_path'] != $new['thumbnail_path']) { update_option(WPFB_OPT_NAME, $old); // temporaly restore old settings WPFB_Core::$settings = (object) $old; $items = array_merge(WPFB_File::GetFiles2(), WPFB_Category::GetCats()); $old_thumbs = array(); foreach ($items as $i => $item) { $old_thumbs[$i] = $item->GetThumbPath(true); } update_option(WPFB_OPT_NAME, $new); // restore new settings WPFB_Core::$settings = (object) $new; $n = 0; foreach ($items as $i => $item) { if (!empty($old_thumbs[$i]) && is_file($old_thumbs[$i])) { $new_path = $item->GetThumbPath(true); $dir = dirname($new_path); if (!is_dir($dir)) { self::Mkdir($dir); } if (rename($old_thumbs[$i], $new_path)) { $n++; } else { $messages[] = sprintf(__('Could not move thumnail %s to %s.', WPFB), $old_thumbs[$i], $new_path); } } } if (count($n > 0)) { $messages[] = sprintf(__('%d Thumbnails moved.', WPFB), $n); } } flush_rewrite_rules(); return $messages; }
static function GetAttachedFiles($post_id, $show_all = false) { $post_id = intval($post_id); return WPFB_File::GetFiles2(array('file_post_id' => $post_id), !$show_all && WPFB_Core::$settings->hide_inaccessible, WPFB_Core::GetSortSql(null, true)); }
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); }