国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
6.2KB

  1. <?php
  2. /**
  3. * 文档操作相关函数
  4. *
  5. * @version $Id: inc_batchup.php 1 10:32 2010年7月21日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2007 - 2018, DesDev, Inc.
  8. * @copyright Copyright (c) 2020, DedeBIZ.COM
  9. * @license https://www.dedebiz.com/license/v6
  10. * @link https://www.dedebiz.com
  11. */
  12. /**
  13. * 删除文档信息
  14. *
  15. * @access public
  16. * @param string $aid 文档ID
  17. * @param string $type 类型
  18. * @param string $onlyfile 删除数据库记录
  19. * @return string
  20. */
  21. function DelArc($aid, $type='ON', $onlyfile=FALSE,$recycle=0)
  22. {
  23. global $dsql,$cfg_cookie_encode,$cfg_multi_site,$cfg_medias_dir;
  24. global $cuserLogin,$cfg_upload_switch,$cfg_delete,$cfg_basedir;
  25. global $admin_catalogs, $cfg_admin_channel;
  26. if($cfg_delete == 'N') $type = 'OK';
  27. if(empty($aid)) return ;
  28. $aid = preg_replace("#[^0-9]#i", '', $aid);
  29. $arctitle = $arcurl = '';
  30. if($recycle == 1) $whererecycle = "AND arcrank = '-2'";
  31. else $whererecycle = "";
  32. //查询表信息
  33. $query = "SELECT ch.maintable,ch.addtable,ch.nid,ch.issystem FROM `#@__arctiny` arc
  34. LEFT JOIN `#@__arctype` tp ON tp.id=arc.typeid
  35. LEFT JOIN `#@__channeltype` ch ON ch.id=arc.channel WHERE arc.id='$aid' ";
  36. $row = $dsql->GetOne($query);
  37. $nid = $row['nid'];
  38. $maintable = (trim($row['maintable'])=='' ? '#@__archives' : trim($row['maintable']));
  39. $addtable = trim($row['addtable']);
  40. $issystem = $row['issystem'];
  41. //查询档案信息
  42. if($issystem==-1)
  43. {
  44. $arcQuery = "SELECT arc.*,tp.* from `$addtable` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.aid='$aid' ";
  45. }
  46. else
  47. {
  48. $arcQuery = "SELECT arc.*,tp.*,arc.id AS aid FROM `$maintable` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.id='$aid' ";
  49. }
  50. $arcRow = $dsql->GetOne($arcQuery);
  51. //检测权限
  52. if(!TestPurview('a_Del,sys_ArcBatch'))
  53. {
  54. if(TestPurview('a_AccDel'))
  55. {
  56. if( !in_array($arcRow['typeid'], $admin_catalogs) && (count($admin_catalogs) != 0 || $cfg_admin_channel != 'all') )
  57. {
  58. return FALSE;
  59. }
  60. }
  61. else if(TestPurview('a_MyDel'))
  62. {
  63. if($arcRow['mid'] != $cuserLogin->getUserID())
  64. {
  65. return FALSE;
  66. }
  67. }
  68. else
  69. {
  70. return FALSE;
  71. }
  72. }
  73. //$issystem==-1 是单表模型,不使用回收站
  74. if($issystem == -1) $type = 'OK';
  75. if(!is_array($arcRow)) return FALSE;
  76. /** 删除到回收站 **/
  77. if($cfg_delete == 'Y' && $type == 'ON')
  78. {
  79. $dsql->ExecuteNoneQuery("UPDATE `$maintable` SET arcrank='-2' WHERE id='$aid' ");
  80. $dsql->ExecuteNoneQuery("UPDATE `#@__arctiny` SET `arcrank` = '-2' WHERE id = '$aid'; ");
  81. }
  82. else
  83. {
  84. //删除数据库记录
  85. if(!$onlyfile)
  86. {
  87. $query = "Delete From `#@__arctiny` where id='$aid' $whererecycle";
  88. if($dsql->ExecuteNoneQuery($query))
  89. {
  90. $dsql->ExecuteNoneQuery("Delete From `#@__feedback` where aid='$aid' ");
  91. $dsql->ExecuteNoneQuery("Delete From `#@__member_stow` where aid='$aid' ");
  92. $dsql->ExecuteNoneQuery("Delete From `#@__taglist` where aid='$aid' ");
  93. $dsql->ExecuteNoneQuery("Delete From `#@__erradd` where aid='$aid' ");
  94. if($addtable != '')
  95. {
  96. $dsql->ExecuteNoneQuery("Delete From `$addtable` where aid='$aid'");
  97. }
  98. if($issystem != -1)
  99. {
  100. $dsql->ExecuteNoneQuery("Delete From `#@__archives` where id='$aid' $whererecycle");
  101. }
  102. //删除相关附件
  103. if($cfg_upload_switch == 'Y')
  104. {
  105. $dsql->Execute("me", "SELECT * FROM `#@__uploads` WHERE arcid = '$aid'");
  106. while($row = $dsql->GetArray('me'))
  107. {
  108. $addfile = $row['url'];
  109. $aid = $row['aid'];
  110. $dsql->ExecuteNoneQuery("Delete From `#@__uploads` where aid = '$aid' ");
  111. $upfile = $cfg_basedir.$addfile;
  112. if(@file_exists($upfile)) @unlink($upfile);
  113. }
  114. }
  115. }
  116. }
  117. //删除文本数据
  118. $filenameh = DEDEDATA."/textdata/".(ceil($aid/5000))."/{$aid}-".substr(md5($cfg_cookie_encode),0,16).".txt";
  119. if(@is_file($filenameh)) @unlink($filenameh);
  120. }
  121. if(empty($arcRow['money'])) $arcRow['money'] = 0;
  122. if(empty($arcRow['ismake'])) $arcRow['ismake'] = 1;
  123. if(empty($arcRow['arcrank'])) $arcRow['arcrank'] = 0;
  124. if(empty($arcRow['filename'])) $arcRow['filename'] = '';
  125. //删除HTML
  126. if($arcRow['ismake']==-1 || $arcRow['arcrank']!=0 || $arcRow['typeid']==0 || $arcRow['money']>0)
  127. {
  128. return TRUE;
  129. }
  130. //强制转换非多站点模式,以便统一方式获得实际HTML文件
  131. $GLOBALS['cfg_multi_site'] = 'N';
  132. $arcurl = GetFileUrl($arcRow['aid'],$arcRow['typeid'],$arcRow['senddate'],$arcRow['title'],$arcRow['ismake'],
  133. $arcRow['arcrank'],$arcRow['namerule'],$arcRow['typedir'],$arcRow['money'],$arcRow['filename']);
  134. if(!preg_match("#\?#", $arcurl))
  135. {
  136. $htmlfile = GetTruePath().str_replace($GLOBALS['cfg_basehost'],'',$arcurl);
  137. if(file_exists($htmlfile) && !is_dir($htmlfile))
  138. {
  139. @unlink($htmlfile);
  140. $arcurls = explode(".", $htmlfile);
  141. $sname = $arcurls[count($arcurls)-1];
  142. $fname = preg_replace("#(\.$sname)$#", "", $htmlfile);
  143. for($i=2; $i<=100; $i++)
  144. {
  145. $htmlfile = $fname."_{$i}.".$sname;
  146. if( @file_exists($htmlfile) ) @unlink($htmlfile);
  147. else break;
  148. }
  149. }
  150. }
  151. return true;
  152. }
  153. //获取真实路径
  154. function GetTruePath($siterefer='', $sitepath='')
  155. {
  156. $truepath = $GLOBALS['cfg_basedir'];
  157. return $truepath;
  158. }