C.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. <?php
  2. namespace app\common\controller\member;
  3. use app\common\controller\MemberBase;
  4. use app\common\traits\ModuleContent;
  5. use think\Db;
  6. /**
  7. *
  8. * 会员中心用到的内容管理相关功能
  9. *
  10. */
  11. abstract class C extends MemberBase
  12. {
  13. use ModuleContent;
  14. protected $validate = 'Content';
  15. protected $model;
  16. protected $m_model;
  17. protected $f_model;
  18. protected $s_model;
  19. protected $form_items;
  20. protected $list_items;
  21. protected $tab_ext;
  22. protected $mid;
  23. protected $qun_power_list = [
  24. ['add','仅限哪些用户组有权发布','不设置都有权限'],
  25. ['edit','修改它人权限的用户组','不设置都没权限'],
  26. ['delete','删除它人权限的用户组','不设置都没权限'],
  27. ['order','管理订单权限的用户组','不设置都没权限'],
  28. ];
  29. protected function _initialize()
  30. {
  31. parent::_initialize();
  32. preg_match_all('/([_a-z0-9]+)/i',get_called_class(),$array);
  33. $dirname = $array[0][1];
  34. $this->model = get_model_class($dirname,'content');
  35. $this->s_model = get_model_class($dirname,'sort');
  36. $this->m_model = get_model_class($dirname,'module');
  37. $this->category_model = get_model_class($dirname,'category');
  38. $this->info_model = get_model_class($dirname,'info');
  39. $this->f_model = get_model_class($dirname,'field');
  40. if(config('qun_power_list')){
  41. $this->qun_power_list = config('qun_power_list');
  42. }
  43. }
  44. /**
  45. * 把所有模型的一起列出来
  46. * @return mixed|string
  47. */
  48. public function listall($rows=0){
  49. if (!$rows) {
  50. $rows = input('rows')?:10;
  51. }
  52. $this->tab_ext['top_button'] = $this->page_top_botton();
  53. $this->tab_ext['page_title'] || $this->tab_ext['page_title'] = M('name').' 我发布的内容';
  54. $map = $this->get_map();
  55. foreach ($map AS $key=>$rs){
  56. if(!in_array($key, ['id','uid','mid','fid','status','view','list','create_time','ext_id','ext_sys','title'])){
  57. unset($map[$key]);
  58. }
  59. }
  60. $listdb = $this->model->getListByUid($this->user['uid'],$rows,$pages=[],$map);
  61. $pages = $listdb->render();
  62. $this->assign('listdb',$listdb);
  63. $this->assign('pages',$pages);
  64. $this->assign('tab_ext',$this->tab_ext);
  65. return $this->fetch();
  66. }
  67. /**
  68. * 设置圈子会员组在当前圈子发布内容的权限,及修改与删除的管理权限
  69. * @param number $qid 指定圈子ID
  70. * @return mixed|string
  71. */
  72. public function setpower($qid=0){
  73. if(!$qid && get_wxappAppid()){
  74. $app_cfg = wxapp_open_cfg( get_wxappAppid() ) ?: [];
  75. $qid = $app_cfg['aid'];
  76. }
  77. if (!$qid) {
  78. $quns = fun('qun@getByuid',$this->user['uid']);
  79. if (count($quns)>1) {
  80. $url = url('qun/choose/index').'?url='.urlencode( urls('setpower').'?qid=' );
  81. $this->redirect($url);
  82. }
  83. }
  84. if (!$qid) {
  85. showerr('圈子ID不存在!');
  86. }
  87. if ($this->user['qun_group'][$qid]['type']!=3) {
  88. showerr('你无权设置!');
  89. }
  90. $info = [];
  91. $array = Db::name('qun_power')->where([
  92. 'qid'=>$qid,
  93. 'sysname'=>config('system_dirname')
  94. ])->column('type,id,groups');
  95. foreach ($array AS $rs){
  96. $info[$rs['type']] = $rs['groups'];
  97. }
  98. if ($this->request->isPost()) {
  99. $data = $this->request->post();
  100. for($i=0;$i<count($this->qun_power_list);$i++){
  101. $key = $this->qun_power_list[$i][0];
  102. $groups = $data[$key] ? implode(',', $data[$key]) : '';
  103. if(!$array[$key]){
  104. Db::name('qun_power')->insert([
  105. 'type'=>$key,
  106. 'qid'=>$qid,
  107. 'sysname'=>config('system_dirname'),
  108. 'groups'=>$groups
  109. ]);
  110. }else{
  111. Db::name('qun_power')->update([
  112. 'id'=>$array[$key]['id'],
  113. 'groups'=>$groups,
  114. ]);
  115. }
  116. }
  117. $this->success('设置成功');
  118. }
  119. $qungroup = fun('qun@get_group','name',$qid)?:[];
  120. foreach ($this->qun_power_list AS $key=>$rs){
  121. $this->form_items[] = ['checkbox', $rs[0], $rs[1],$rs[2],$qungroup];
  122. }
  123. $this->tab_ext['page_title'] || $this->tab_ext['page_title'] = modules_config(config('system_dirname'))['name'].' 权限设置';
  124. return $this->editContent($info);
  125. }
  126. /**
  127. * 生成模型分类菜单
  128. * @return unknown|array
  129. */
  130. protected function page_top_botton($pagetype='index',$qid='',$mid=''){
  131. if ($this->tab_ext['top_button']) {
  132. return $this->tab_ext['top_button'];
  133. }
  134. $tab_list = [];
  135. $mlist = model_config();
  136. if (count($mlist)>1) {
  137. foreach ( $mlist AS $rs) {
  138. $tab_list[$rs['id']] = [
  139. 'title'=>$rs['title'],
  140. 'url'=>auto_url($pagetype, ['mid' => $rs['id'],'qid'=>$qid]),
  141. ];
  142. }
  143. }
  144. $tab_list[] = [
  145. 'type'=>'add',
  146. 'url'=>auto_url('add', ['mid' => $mid ?: $this->mid,'ext_id'=>$qid]).'?fromurl='.urlencode(get_url('location')),
  147. 'title'=>'发布',
  148. ];
  149. $this->tab_ext['top_button'] = $tab_list;
  150. return $tab_list;
  151. }
  152. protected function get_map(){
  153. return [];
  154. }
  155. /**
  156. * 纯属是为了兼容其它模块index方法没有升级的情况使用。
  157. * @param number $fid
  158. * @param number $mid
  159. * @param number $rows
  160. * @return unknown
  161. */
  162. // public function index_temp($fid=0,$mid=0,$rows=10)
  163. // {
  164. // if(count(model_config())>1&&!$mid&&!$fid){
  165. // return $this->listall($rows);
  166. // }else{
  167. // return $this->index($fid,$mid,$rows);
  168. // }
  169. // }
  170. /**
  171. * 按模型或栏目列出自己发布的信息
  172. * @param number $fid
  173. * @param number $mid
  174. * @return mixed|string
  175. */
  176. public function index($fid=0,$mid=0,$rows=0)
  177. {
  178. if (!$rows) {
  179. $rows = input('rows')?:10;
  180. }
  181. if(!$mid && !$fid){
  182. //没有指定栏目或模型的话, 就显示默认模型的内容
  183. //$mid = $this->m_model->getId();
  184. $mid = model_config('default_id');
  185. }elseif($fid){
  186. $mid = $this->model->getMidByFid($fid);
  187. }
  188. $this->mid = $mid;
  189. $map = $fid ? ['fid'=>$fid] : ['mid'=>$mid];
  190. $map['uid'] = $this->user['uid'];
  191. // $data_list = $this->getListData($map,'',0,[],true); //获取列表数据 true转义
  192. // $vars = [
  193. // 'listdb'=>$data_list,
  194. // 'field_db'=> $this->getEasyIndexItems(), //列表显示哪些自定义字段
  195. // 'pages'=> $data_list->render(), //分页
  196. // 'mid'=>$mid,
  197. // 'fid'=>$fid,
  198. // 'model_list' => $this->m_model->getTitleList(),
  199. // ];
  200. // //如果某个模型有个性模板的话,就不调用母模板
  201. // $template = getTemplate('index'.$mid)?:getTemplate('index');
  202. // return $this->fetch($template,$vars);
  203. $f_array = $this->getEasyIndexItems();
  204. if(empty($this->list_items)){
  205. $this->list_items = array_merge($f_array,
  206. [
  207. ['create_time', '日期', 'date'],
  208. //['view', '浏览量', 'text'],
  209. ['status', '审核', 'select2',['未审','已审','已推荐']],
  210. ]);
  211. }
  212. $this->tab_ext['right_button'] || $this->tab_ext['right_button'] = [
  213. ['type'=>'delete'],
  214. ['type'=>'edit'],
  215. [
  216. 'url'=>iurl('show','id=__id__'),
  217. 'icon'=>'glyphicon glyphicon-eye-open',
  218. 'title'=>'浏览',
  219. 'target'=>'_blank',
  220. ],
  221. ];
  222. $this->tab_ext['page_title'] || $this->tab_ext['page_title'] = M('name').' 我发布的内容';
  223. $this->tab_ext['top_button'] = $this->page_top_botton();
  224. $this->assign('field_db',$f_array);
  225. $this->assign('model_list',$this->m_model->getTitleList());
  226. $this->assign('fid',$fid);
  227. $data_list = $this->getListData(array_merge($map,$this->get_map()),'',$rows,[],true);
  228. return $this->getMemberTable($data_list);
  229. }
  230. /**
  231. * 管理内容列表
  232. * @param number $qid 圈子ID
  233. * @param number $mid 内容模型ID
  234. * @param number $fid 栏目ID
  235. * @param number $status 主题状态
  236. * @param number $rows
  237. * @return void|unknown|\think\response\Json|mixed|string
  238. */
  239. public function manage($qid=0,$mid='',$fid='',$rows=10,$status=''){
  240. $map = $this->get_map();
  241. foreach ($map AS $key=>$rs){
  242. if(!in_array($key, ['id','uid','mid','fid','status','view','list','create_time','ext_id','ext_sys','title'])){
  243. unset($map[$key]);
  244. }
  245. }
  246. $this->tab_ext['page_title'] || $this->tab_ext['page_title'] = M('name').' 内容列表';
  247. if($qid){
  248. $this->tab_ext['top_button'] = $this->page_top_botton('manage',$qid,$mid);
  249. $map['ext_id'] = $qid;
  250. }else{
  251. $status_array = [];
  252. $this->tab_ext['top_button'][] = [
  253. 'title'=>'全部',
  254. 'url'=>url('manage',['mid'=>$mid,'fid'=>$fid]),
  255. ];
  256. foreach (fun("Content@status") AS $key=>$title){
  257. $menu_ck = false;
  258. if($key==-1){
  259. continue ;
  260. //}elseif(fun('admin@sort',$fid)!==true && !fun('sort@admin')){ //审核员,不是管理员的情况
  261. }elseif(fun('admin@sort')!==true){ //不是超管及不是频道管理员的时候,但有可能是栏目管理员
  262. if(fun('sort@admin')){ //栏目管理员,要保留所有菜单
  263. $this->tab_ext['top_button'][] = [
  264. 'title'=>$title,
  265. 'url'=>url('manage',['mid'=>$mid,'fid'=>$fid,'status'=>$key]),
  266. 'checked'=>is_numeric($status)?($status==$key?'1':''):'',
  267. ];
  268. $menu_ck = true;
  269. }
  270. if(fun('admin@status_check',$key)!==true){
  271. continue ;
  272. }
  273. $status_array[] = $key;
  274. }
  275. if(!$menu_ck){ //栏目管理员上面执行过了,不要重复
  276. $this->tab_ext['top_button'][] = [
  277. 'title'=>$title,
  278. 'url'=>url('manage',['mid'=>$mid,'fid'=>$fid,'status'=>$key]),
  279. 'checked'=>is_numeric($status)?($status==$key?'1':''):'',
  280. ];
  281. }
  282. }
  283. //if ( fun('admin@sort',$fid)!==true ) {
  284. if ( fun('admin@sort')!==true ) { //不是超管及不是频道管理员的时候
  285. if(fun('sort@admin')){
  286. if ($status_array) {
  287. $map['OR'] = [
  288. 'status'=>['in',$status_array],
  289. 'fid'=>['in',fun('sort@admin')]
  290. ];
  291. }else{
  292. $map['fid'] = ['in',fun('sort@admin')];
  293. }
  294. }elseif ($status_array) {
  295. $map['status'] = ['in',$status_array];
  296. }else{
  297. $this->showerr('你没权限!');
  298. }
  299. }
  300. }
  301. if (is_numeric($status)) {
  302. $map['status'] = $status;
  303. }
  304. if(!$this->tab_ext['right_button']){
  305. $this->tab_ext['right_button'] = [
  306. [
  307. 'type'=>'delete',
  308. 'url'=>url('delete','ids=__id__').'?fromurl='.urlencode(get_url('location')),
  309. ],
  310. [
  311. 'type'=>'edit',
  312. 'url'=>url('edit','id=__id__').'?fromurl='.urlencode(get_url('location')),
  313. ],
  314. [
  315. 'url'=>iurl('show','id=__id__'),
  316. 'icon'=>'glyphicon glyphicon-eye-open',
  317. 'title'=>'浏览',
  318. 'target'=>'_blank',
  319. ],
  320. ];
  321. if(!$qid){ //不是圈子管理的话,就显示审核操作功能
  322. if ( fun('admin@sort',$fid)!==true && !fun('sort@admin')) {
  323. unset($this->tab_ext['right_button'][0]); //审核员,不显示删除操作
  324. if(!$this->webdb['shenhe_edit']){
  325. unset($this->tab_ext['right_button'][1]); //审核员没开通修改权限
  326. }
  327. }else{
  328. unset($this->tab_ext['right_button'][2]);
  329. }
  330. $this->tab_ext['right_button'][] = [
  331. 'title'=>'审核操作',
  332. 'type'=>'callback',
  333. 'fun'=>function($info){
  334. $array = [];
  335. $fid_array = fun('sort@admin')?:['NO']; //避免栏目不存在的时候,所以要设置一个 NO 即不存在的栏目ID
  336. foreach(fun('Content@status') AS $key=>$title){
  337. if(fun('admin@sort',$info['fid'])!==true && !in_array($info['fid'], $fid_array) && fun('admin@status_check',$key)!==true){
  338. continue ;
  339. }
  340. $array[$title] = [
  341. 'url'=>iurl('wxapp.api/change_status',['id'=>$info['id'],'status'=>$key]),
  342. 'target'=>'ajax',
  343. ];
  344. }
  345. return fun('link@more',"<i class='glyphicon glyphicon-star-empty'></i>审核操作",$array);
  346. }
  347. ];
  348. }
  349. }
  350. // if(get_wxappAppid()){
  351. // $app_cfg = wxapp_open_cfg( get_wxappAppid() ) ?: [];
  352. // $qid = $app_cfg['aid'];
  353. // }
  354. // if (!$qid) {
  355. // $quns = fun('qun@getByuid',$this->user['uid']);
  356. // if (count($quns)>1) {
  357. // $url = url('qun/choose/index').'?url='.urlencode( urls('manage').'?qid=' );
  358. // $this->redirect($url);
  359. // }
  360. // }
  361. if($mid){
  362. $map['mid'] = $mid;
  363. }
  364. if($fid){
  365. $map['fid'] = $fid;
  366. }
  367. $this->list_items = [
  368. ['title', '标题', 'text'],
  369. ['create_time', '日期', 'date'],
  370. ['uid', '发布者', 'username'],
  371. ['status', '状态', 'select2',fun('Content@status')],
  372. ];
  373. $listdb = $this->model->getAll($map,$order="id desc",$rows,[],$format=FALSE);
  374. $pages = $listdb->render();
  375. $this->assign('listdb',$listdb);
  376. $this->assign('pages',$pages);
  377. $this->assign('qid',$qid);
  378. $this->assign('fid',$fid);
  379. $this->assign('mid',$mid);
  380. $this->assign('tab_ext',$this->tab_ext);
  381. return $this->getMemberTable($listdb);
  382. //return $this->fetch();
  383. }
  384. /**
  385. * 发布页,可以根据栏目ID或者模型ID,但不能为空,不然不知道调用什么字段
  386. * @param number $fid
  387. * @param number $mid
  388. * @return mixed|string
  389. */
  390. public function add($fid=0,$mid=0)
  391. {
  392. $data = $this->request->post();
  393. isset($data['fid']) && $fid = $data['fid'];
  394. if(!$mid && !$fid){
  395. if ($this->request->isAjax()) {
  396. return $this->error('栏目或模型不能同时为空!');
  397. }
  398. return $this->postnew();
  399. //$this->error('参数有误!');
  400. }elseif($fid && !$mid){ //根据栏目选择发表内容
  401. $mid = $this->model->getMidByFid($fid);
  402. }
  403. $this->mid = $mid;
  404. //接口
  405. hook_listen('cms_add_begin',$data);
  406. if (($result=$this->add_check($mid,$fid,$data))!==true) {
  407. if ($this -> request -> isPost()) {
  408. $this->error($result);
  409. }else{
  410. $this->assign('nopower',$result); //在页面中处理提示更好些
  411. }
  412. }
  413. // 保存数据
  414. if ($this -> request -> isPost()) {
  415. //input('?get.ext_id') && $this->request->post(['ext_id'=>input('get.ext_id')]);
  416. return $this->saveAdd($mid,$fid,$data,get_cookie('fromurl'));
  417. }
  418. set_cookie('fromurl', input('fromurl')?:null );
  419. //发表时可选择的栏目
  420. $sort_array = $this->s_model->getTreeTitle(0,$mid);
  421. foreach($sort_array AS $key=>$title){
  422. $allowpost = get_sort($key,'allowpost');
  423. if($allowpost&&!in_array($this->user['groupid'],explode(',',$allowpost))){ //设置了用户组权限.
  424. unset($sort_array[$key]);
  425. }
  426. }
  427. //发布页要填写的字段
  428. $this->form_items = $this->getEasyFormItems(); //发布表单里的自定义字段
  429. //如果栏目存在才显示栏目选择项
  430. if(count($sort_array)>0){
  431. $this->form_items = array_merge(
  432. [
  433. [ 'select','fid','所属栏目','',$sort_array,$fid],
  434. ],
  435. $this->get_category_select(), //辅栏目
  436. input('ext_id')?[]:$this->get_my_qun(),
  437. $this->form_items
  438. );
  439. }else{
  440. $this->form_items = array_merge(
  441. input('ext_id')?[]:$this->get_my_qun(),
  442. $this->form_items
  443. );
  444. }
  445. //联动字段
  446. $this->tab_ext['trigger'] = $this->getEasyFieldTrigger();
  447. $this->tab_ext['area'] = config('use_area') || config('webdb.use_area'); //是否启用地区
  448. //分组显示处理
  449. $this->tab_ext['group'] = $this->get_group_form($this->form_items,'add');
  450. // $result = $this->post_begin([
  451. // 'fid'=>$fid,
  452. // 'mid'=>$mid
  453. // ]);
  454. // if ($result!==true) {
  455. // return $this->ok_js($result);
  456. // }
  457. // if( $this->tab_ext['group'] ){
  458. // unset($this->form_items);
  459. // }
  460. $this->tab_ext['page_title'] = $this->tab_ext['page_title']?: '发布 '.$this->m_model->getNameById($this->mid);
  461. $this->assign('fid',$fid);
  462. $this->assign('mid',$mid);
  463. $this->assign('info',get_post()); //方便地址栏赋值
  464. $this->assign('need_tncode',in_array($this->user['groupid'], $this->webdb['group_postnew_need_tncode'])?true:false);
  465. return $this->addContent();
  466. }
  467. /**
  468. * 修改内容
  469. * @param unknown $id
  470. * @return mixed|string
  471. */
  472. public function edit($id)
  473. {
  474. $info = $this->getInfoData($id);
  475. if(empty($info)){
  476. $this->error('内容不存在!');
  477. }
  478. //表单数据
  479. $data = $this->request->post();
  480. //接口
  481. hook_listen('cms_edit_begin',$data);
  482. if (($result=$this->edit_check($id,$info,$data))!==true) {
  483. $this->error($result);
  484. }
  485. $this->mid = $info['mid'];
  486. // 保存数据
  487. if ($this -> request -> isPost()) {
  488. return $this->saveEdit($this->mid,$data,input('fromurl')?:get_cookie('fromurl'));
  489. }
  490. set_cookie('fromurl', input('fromurl')?:null );
  491. //发表时可选择的栏目
  492. $sort_array = $this->s_model->getTreeTitle(0,$this->mid);
  493. foreach($sort_array AS $key=>$title){
  494. $allowpost = get_sort($key,'allowpost');
  495. if($key!=$info['fid'] && $allowpost && !in_array($this->user['groupid'],explode(',',$allowpost))){ //设置了用户组权限.
  496. unset($sort_array[$key]);
  497. }
  498. }
  499. //发布页要填写的字段
  500. $this->form_items = $this->getEasyFormItems(); //发布表单里的自定义字段
  501. //如果栏目存在才显示栏目选择项
  502. if(count($sort_array)>0){
  503. $this->form_items = array_merge(
  504. [
  505. [ 'select','fid','所属栏目','',$sort_array],
  506. ],
  507. $this->get_category_select($id), //辅栏目
  508. $this->get_my_qun($info), //归属圈子专题或归属圈子
  509. $this->form_items
  510. );
  511. }else{
  512. $this->form_items = array_merge(
  513. input('ext_id')?[]:$this->get_my_qun(),
  514. $this->form_items
  515. );
  516. }
  517. //联动字段
  518. $this->tab_ext['trigger'] = $this->getEasyFieldTrigger();
  519. $this->tab_ext['page_title'] = $this->m_model->getNameById($this->mid);
  520. $this->tab_ext['area'] = config('use_area') || config('webdb.use_area'); //是否启用地区
  521. //分组显示
  522. $this->tab_ext['group'] = $this->get_group_form($this->form_items);
  523. // $result = $this->post_begin([
  524. // 'info'=>$info
  525. // ]);
  526. // if ($result!==true) {
  527. // return $this->ok_js($result);
  528. // }
  529. // if( $this->tab_ext['group'] ){
  530. // unset($this->form_items);
  531. // }
  532. $this->assign('fid',$info['fid']);
  533. //修改内容后,最好返回到模型列表页,因为有可能修改了栏目
  534. return $this->editContent($info , '' ,'member');
  535. }
  536. /**
  537. * 删除内容
  538. * @param unknown $ids
  539. */
  540. public function delete($ids=null)
  541. {
  542. if(empty($ids)){
  543. $this->error('ID有误');
  544. }
  545. $ids = is_array($ids) ? $ids : [$ids];
  546. $num = 0;
  547. foreach ($ids AS $id) {
  548. $info = $this->getInfoData($id);
  549. //接口
  550. hook_listen('cms_delete_begin',$id);
  551. if (($result=$this->delete_check($id,$info))!==true) {
  552. $this->error($result);
  553. }
  554. $this->deleteOne($id,$info['mid']) && $num++;
  555. }
  556. if( $num>0 ){
  557. $msg = "成功删除 {$num} 条记录";
  558. if(defined('SHOW_RUBBISH') && SHOW_RUBBISH===true && (!defined('FORCE_DELETE') || FORCE_DELETE!==true) ){
  559. $msg = '下架成功';
  560. }
  561. $this->success($msg, input('fromurl') ?: auto_url('index',['mid'=>$this->mid]));
  562. }else{
  563. $this->error('删除失败');
  564. }
  565. }
  566. }