diff --git a/class/Api.php b/class/Api.php index bb41ec6..0c620e9 100755 --- a/class/Api.php +++ b/class/Api.php @@ -245,6 +245,26 @@ class Api { } } } + /** + * 批量修改链接属性为公有或私有 + */ + public function set_link_attribute($data) { + $this->auth($token); + //获取链接ID,是一个数组 + $ids = implode(',',$data['ids']); + $property = intval($data['property']); + //拼接SQL文件 + $sql = "UPDATE on_links SET property = $property WHERE id IN ($ids)"; + $re = $this->db->query($sql); + //返回影响行数 + $row = $re->rowCount(); + if ( $row > 0 ){ + $this->return_json(200,"success"); + } + else{ + $this->return_json(-2000,"failed"); + } + } /** * 批量导入链接 @@ -323,6 +343,123 @@ class Api { ]; exit(json_encode($data)); } + /** + * 批量导入链接并自动创建分类,这是新的导入接口 + */ + public function import_link($filename,$property = 0) { + //过滤$filename + $filename = str_replace('../','',$filename); + $filename = str_replace('./','',$filename); + $this->auth($token); + //检查文件是否存在 + if ( !file_exists($filename) ) { + $this->err_msg(-1016,'File does not exist!'); + } + //解析HTML数据 + $content = file_get_contents($filename); + $HTMLs = explode("\n",$content);//分割文本 + $data = []; //链接组 + $categorys = []; //分类信息组 + $categoryt = []; //分类信息表 + + // 遍历HTML + foreach( $HTMLs as $HTMLh ){ + //匹配分类名称 + if( preg_match("/
(.*)<\/H3>/i",$HTMLh,$category) ){ + //匹配到文件夹名时加入数组 + array_push($categoryt,$category[1]); + array_push($categorys,$category[1]); + }elseif( preg_match('/<\/DL>

/i',$HTMLh) ){ + //匹配到文件夹结束标记时删除一个 + array_pop($categorys); + }elseif( preg_match('/

(.+)<\/A>/i',$HTMLh,$urls) ){ + $datat['category'] = $categorys[count($categorys) -1]; + $datat['title'] = $urls[2]; + $datat['url'] = $urls[1]; + array_push($data,$datat); + } + } + $categoryt = array_unique($categoryt); + + //批量创建分类 + $this->batch_create_category($categoryt); + //查询所有分类 + $categorys = $this->db->select("on_categorys",[ + "name", + "id", + "fid" + ]); + // var_dump($categorys); + // exit; + //链接计数 + $i = 0; + //统计链接总数 + $count = count($data); + //批量导入链接 + foreach ($data as $key => $value) { + $category_name = trim($value['category']); + + foreach ($categorys as $category) { + if( trim( $category['name'] ) == $category_name ) { + $fid = intval($category['id']); + break; + } + } + //合并数据 + $link_data = [ + 'fid' => $fid, + 'title' => htmlspecialchars($value['title']), + 'url' => htmlspecialchars($value['url'],ENT_QUOTES), + 'add_time' => time(), + 'weight' => 0, + 'property' => $property + ]; + // var_dump($link_data); + // exit; + //插入数据库 + $re = $this->db->insert('on_links',$link_data); + //返回影响行数 + $row = $re->rowCount(); + if ($row) { + $i++; + } + } + //删除书签文件 + unlink($filename); + $this->return_json(200,"success",[ + "count" => $count, + "success" => $i, + "failed" => $count - $i + ]); + + } + /** + * 批量创建分类 + * 接收一个一维数组 + */ + protected function batch_create_category($category_name) { + $i = 0; + foreach ($category_name as $key => $value) { + $data = [ + 'name' => trim($value), + 'add_time' => time(), + 'weight' => 0, + 'property' => 1, + 'description' => "书签导入时自动创建", + 'fid' => 0 + ]; + try { + //插入分类目录 + $this->db->insert("on_categorys",$data); + $i++; + } catch (\Throwable $th) { + continue; + } + + } + return $i; + } + /** * 书签上传 * type:上传类型,默认为上传书签,后续类型保留使用 diff --git a/controller/api.php b/controller/api.php index 14c3459..ebbaacb 100755 --- a/controller/api.php +++ b/controller/api.php @@ -221,6 +221,16 @@ function imp_link($api) { $property = intval(@$_POST['property']); $api->imp_link($token,$filename,$fid,$property); } +//新版书签批量导入并自动创建分类 +function import_link($api) { + //获取token + $token = $_POST['token']; + //获取书签路径 + $filename = trim($_POST['filename']); + $fid = intval($_POST['fid']); + $property = intval(@$_POST['property']); + $api->import_link($filename,$property); +} //检查弱密码 function check_weak_password($api) { //获取token @@ -354,4 +364,15 @@ function save_theme_config($api) { //获取主题配置信息 function get_theme_config($api) { $api->get_theme_config(); +} + +//批量设置链接私有属性 +function set_link_attribute($api) { + $ids = $_POST['ids']; + $property = intval( $_POST['property'] ); + $data = [ + "ids" => $ids, + "property" => $property + ]; + $api->set_link_attribute($data); } \ No newline at end of file