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();