Index: branches/RC/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php
===================================================================
diff -u -N -r8929 -r10686
--- branches/RC/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php (.../commands.php) (revision 8929)
+++ branches/RC/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php (.../commands.php) (revision 10686)
@@ -475,8 +475,9 @@
if (rename($sServerDir.$aFilenames[0],$sServerDir.$aFilenames[1])) {
if (isset($Config['K4Mode'])) {
// Update CMS Blocks
- } else
- UpdateCmsBlocksK3($resourceType,$currentFolder,$aFilenames[0],$aFilenames[1]);
+ } else {
+ UpdateCmsBlocksK3($resourceType,$currentFolder,$aFilenames[0],$aFilenames[1]);
+ }
$sErrorNumber = "0";
} else
$sErrorNumber = '205' ;
@@ -541,76 +542,171 @@
}
function DeleteConfirmedFiles($resourceType, $currentFolder, $aFiles)
-{ global $Config;
-$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ;
-foreach ($aFiles AS $k=>$v) {
- @unlink($sServerDir.$v);
-}
+{
+ $sServerDir = ServerMapFolder($resourceType, $currentFolder);
+ foreach ($aFiles as $file) {
+ if (!$file) {
+ continue;
+ }
+ @unlink($sServerDir . $file);
+ }
}
-function DeleteFiles($resourceType, $currentFolder, $files = '', $confirm=0)
+/**
+ * Deletes files from HDD
+ *
+ * @param string $resourceType top folder name (e.g. Images)
+ * @param string $currentFolder sub-folder name
+ * @param string $files files list (separated by "|")
+ * @param int $confirm user has agreed (in 2nd time) to delete files, used on content pages
+ */
+function DeleteFiles($resourceType, $currentFolder, $files = '', $confirm = 0)
{
- global $Config ;
- if ($files == '') return;
+ global $Config;
+
+ if ($files == '') {
+ return;
+ }
+
//$files = rtrim("|",$files);
- $aFiles=explode("|",$files);
- if (count($aFiles) == 0) return;
- $conn = GetADODbConnection();
- $aLangs = array();
- $multilang = GetConfigValue('multilingual_mode');
- $def_lang_prefix = GetConfigValue('default_lang_prefix');
- if ($multilang)
- {
- $query="SELECT lang_prefix FROM lang ORDER BY lang_id";
- $rs = $conn->Execute($query);
- while ($rs && !$rs->EOF) {
- $aLangs[] = $rs->fields['lang_prefix'];
- $rs->MoveNext();
+ $aFiles = explode('|', $files);
+ if (count($aFiles) == 0) {
+ return;
+ }
+
+ // 1. get language prefixes
+ $aLangs = Array();
+ if (isset($Config['K4Mode'])) {
+ $application =& kApplication::Instance();
+ $application->Init();
+
+ $ml_helper =& $application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ $lang_count = $ml_helper->getLanguageCount();
+
+ for ($i = 1; $i <= $lang_count; $i++) {
+ if (!$ml_helper->LanguageFound($i)) {
+ continue;
+ }
+ $aLangs[] = 'l' . $i . '_';
}
}
else {
- $aLangs[] = $def_lang_prefix;
+ $conn = GetADODbConnection();
+
+ $multilang = GetConfigValue('multilingual_mode');
+ $def_lang_prefix = GetConfigValue('default_lang_prefix');
+ if ($multilang) {
+ $query = ' SELECT lang_prefix
+ FROM lang
+ ORDER BY lang_id';
+ $rs = $conn->Execute($query);
+ while ($rs && !$rs->EOF) {
+ $aLangs[] = $rs->fields['lang_prefix'];
+ $rs->MoveNext();
+ }
+ }
+ else {
+ $aLangs[] = $def_lang_prefix;
+ }
}
+
$sErrorNumber = 230;
if ($confirm == 1) {
+ // file deletion was confirmed (in 2nd time)
DeleteConfirmedFiles($resourceType, $currentFolder, $aFiles);
- echo '' ;
+ echo '';
}
+
if (!$confirm) {
- foreach ($aFiles AS $k=>$v) {
- $add_sql = '';
- if ($v == '')
- continue;
- $deleted_file = $Config['UserFilesPathNoBase'].$resourceType.$currentFolder.addslashes($v);
- for($i=0; $i $v) {
+ if ($v == '') {
+ continue;
+ }
- if (strlen($add_sql) > 0) {
- $add_sql = rtrim($add_sql," OR");
- $sql = "SELECT lb1.template_id, lb2.".$def_lang_prefix."_content FROM live_blocks AS lb1
- LEFT JOIN live_blocks AS lb2 ON lb2.template_id = lb1.template_id AND lb2.block_num = 20
- WHERE".$add_sql;
- $rs = $conn->Execute($sql);
- while ($rs && !$rs->EOF) {
- $used = 1;
- $page = $rs->fields[$def_lang_prefix.'_content'];
- $page = @html_entity_decode($page,ENT_NOQUOTES,'UTF-8');
- $page = @htmlspecialchars($page);
- $ret_xml.= '' ;
- $rs->MoveNext();
- }
+ $deleted_file = $Config['UserFilesPathNoBase'] . $resourceType . $currentFolder . addslashes($v); // $Config['UserFilesPathNoBase'] - undefined in K4 (maybe K3 too)
+
+ if (isset($Config['K4Mode'])) {
+ $ret_xml .= _getDeleteErrorXML_K4($deleted_file, $sErrorNumber, $aLangs);
}
+ else {
+ $ret_xml .= _getDeleteErrorXML($deleted_file, $sErrorNumber, $aLangs);
+ }
}
- if ($ret_xml && !$confirm)
- echo $ret_xml;
+
+ if ($ret_xml && !$confirm) {
+ // files are used on content pages and therefore can't be deleted
+ echo $ret_xml;
+ }
+
if (!$ret_xml && !$confirm) {
+ // files are not used anywhere and will be deleted
DeleteConfirmedFiles($resourceType, $currentFolder, $aFiles);
echo '' ;
}
}
}
+function _getDeleteErrorXML($file_name, $error_number, $language_prefixes)
+{
+ $conn = GetADODbConnection();
+ $def_lang_prefix = GetConfigValue('default_lang_prefix');
+
+ $add_sql = Array ();
+ for ($i = 0; $i < count($language_prefixes); $i++) {
+ $add_sql[] = 'lb1.' . $language_prefixes[$i] . "_content LIKE '%" . $file_name . "%'";
+ }
+
+ $ret_xml = '';
+ if ($add_sql) {
+ $sql = 'SELECT lb1.template_id, lb2.' . $def_lang_prefix . '_content
+ FROM live_blocks AS lb1
+ LEFT JOIN live_blocks AS lb2 ON lb2.template_id = lb1.template_id AND lb2.block_num = 20
+ WHERE ' . implode(' OR ', $add_sql);
+ $rs = $conn->Execute($sql);
+
+ while ($rs && !$rs->EOF) {
+ $page = $rs->fields[$def_lang_prefix . '_content'];
+ $page = @html_entity_decode($page, ENT_NOQUOTES, 'UTF-8');
+ $page = @htmlspecialchars($page);
+ $ret_xml .= '';
+ $rs->MoveNext();
+ }
+ }
+
+ return $ret_xml;
+}
+
+function _getDeleteErrorXML_K4($file_name, $error_number, $language_prefixes)
+{
+ $application =& kApplication::Instance();
+ $def_lang_prefix = 'l' . $application->GetDefaultLanguageId() . '_';
+
+ $add_sql = Array ();
+ for ($i = 0; $i < count($language_prefixes); $i++) {
+ $add_sql[] = 'pc.' . $language_prefixes[$i] . "Content LIKE '%" . $file_name . "%'";
+ }
+
+ $ret_xml = '';
+ if ($add_sql) {
+ $sql = 'SELECT c.' . $def_lang_prefix . 'Name
+ FROM ' . TABLE_PREFIX . 'PageContent pc
+ LEFT JOIN ' . TABLE_PREFIX . 'Category c ON c.CategoryId = pc.PageId
+ WHERE ' . implode(' OR ', $add_sql);
+ $page_names = $application->Conn->GetCol($sql);
+
+ foreach ($page_names as $page) {
+ $ret_xml .= '';
+ }
+ }
+
+ return $ret_xml;
+}
+
function GetLangFromSid() {
$sid = $_COOKIE['admin_sid'];
$conn = GetADODbConnection();