国内流行的内容管理系统(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.

171 lines
6.3KB

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