function bx_rrmdir($directory)
 {
     if (substr($directory, -1) == "/") {
         $directory = substr($directory, 0, -1);
     }
     if (!file_exists($directory) || !is_dir($directory)) {
         return false;
     } elseif (!is_readable($directory)) {
         return false;
     }
     if (!($directoryHandle = opendir($directory))) {
         return false;
     }
     while ($contents = readdir($directoryHandle)) {
         if ($contents != '.' && $contents != '..') {
             $path = $directory . "/" . $contents;
             if (is_dir($path)) {
                 bx_rrmdir($path);
             } else {
                 unlink($path);
             }
         }
     }
     closedir($directoryHandle);
     if (!rmdir($directory)) {
         return false;
     }
     return true;
 }
Пример #2
0
 /**
  * Clean tmp folders (tmp, cache) by deleting old files (by default older than 1 month)
  */
 protected function cleanTmpFolders()
 {
     $iTmpFileLife = 2592000;
     // one month
     $aDirsToClean = array(BX_DIRECTORY_PATH_TMP, BX_DIRECTORY_PATH_CACHE, BX_DIRECTORY_PATH_CACHE_PUBLIC);
     $iNumTmp = 0;
     $iNumDel = 0;
     foreach ($aDirsToClean as $sDir) {
         if (!($h = opendir($sDir))) {
             continue;
         }
         while ($sFile = readdir($h)) {
             if ('.' == $sFile || '..' == $sFile || '.' == $sFile[0]) {
                 continue;
             }
             ++$iNumTmp;
             $iDiff = time() - filemtime($sDir . $sFile);
             if ($iDiff < $iTmpFileLife) {
                 continue;
             }
             if (is_file($sDir . $sFile)) {
                 @unlink($sDir . $sFile);
             } else {
                 @bx_rrmdir($sDir . $sFile);
             }
             ++$iNumDel;
         }
         closedir($h);
     }
     echo _t('_sys_pruning_files', $iNumTmp, $iNumDel);
 }
Пример #3
0
 public function processing()
 {
     $oController = new BxDolUpgradeController();
     if ($oController->setMaintenanceMode(true)) {
         // if upgrade was successful
         if (($sFolder = $oController->getAvailableUpgrade()) && $oController->runUpgrade($sFolder)) {
             // write upgrade log
             $oController->writeLog();
             // send email notification
             bx_import('BxDolLanguages');
             sendMailTemplateSystem('t_UpgradeSuccess', array('new_version' => bx_get_ver(true), 'conclusion' => $oController->getConclusion() ? _t('_sys_upgrade_conclusion', $oController->getConclusion()) : ''));
             // if next upgrade is available (in case of bulk upgrade) then schedule to run it upon next cron run
             $sUpgradeDir = pathinfo(__FILE__, PATHINFO_DIRNAME);
             if ($oController->getAvailableUpgrade()) {
                 $oUpgrader = bx_instance('BxDolUpgrader');
                 $oUpgrader->setTransientUpgradeCronJob($sUpgradeDir);
             } elseif (0 === strpos($sUpgradeDir, BX_DIRECTORY_PATH_TMP)) {
                 @bx_rrmdir($sUpgradeDir);
             }
         }
         $oController->setMaintenanceMode(false);
     }
     // if something went grong during upgrade
     if ($sErrorMsg = $oController->getErrorMsg()) {
         // write upgrade log
         $oController->writeLog();
         // send email notification
         sendMailTemplateSystem('t_UpgradeFailed', array('error_msg' => $sErrorMsg));
         // disable auto-upgrade if it is failed
         setParam('sys_autoupdate_system', '');
     }
 }
Пример #4
0
 function downloadUpdate($sLink)
 {
     $sName = mktime() . '.zip';
     $sData = bx_file_get_contents($sLink);
     //--- write ZIP archive.
     $sTmpPath = BX_DIRECTORY_PATH_ROOT . 'tmp/';
     $sFilePath = $sTmpPath . $sName;
     if (!($rHandler = fopen($sFilePath, 'w'))) {
         return _t('_adm_txt_modules_cannot_download_package');
     }
     if (!fwrite($rHandler, $sData)) {
         return _t('_adm_txt_modules_cannot_write_package');
     }
     fclose($rHandler);
     //--- Unarchive package.
     if (!class_exists('ZipArchive')) {
         return _t('_adm_txt_modules_zip_not_available');
     }
     $oZip = new ZipArchive();
     if ($oZip->open($sFilePath) !== true) {
         return _t('_adm_txt_modules_cannot_unzip_package');
     }
     $sPackageRootFolder = $oZip->numFiles > 0 ? $oZip->getNameIndex(0) : false;
     if ($sPackageRootFolder && file_exists($sTmpPath . $sPackageRootFolder)) {
         // remove existing tmp folder with the same name
         bx_rrmdir($sTmpPath . $sPackageRootFolder);
     }
     if ($sPackageRootFolder && !$oZip->extractTo($sTmpPath)) {
         return _t('_adm_txt_modules_cannot_unzip_package');
     }
     $oZip->close();
     //--- Move unarchived package.
     $sLogin = getParam('sys_ftp_login');
     $sPassword = getParam('sys_ftp_password');
     $sPath = getParam('sys_ftp_dir');
     if (empty($sLogin) || empty($sPassword) || empty($sPath)) {
         return _t('_adm_txt_modules_no_ftp_info');
     }
     bx_import('BxDolFtp');
     $oFtp = new BxDolFtp($_SERVER['HTTP_HOST'], $sLogin, $sPassword, $sPath);
     if (!$oFtp->connect()) {
         return _t('_adm_txt_modules_cannot_connect_to_ftp');
     }
     if (!$oFtp->isDolphin()) {
         return _t('_adm_txt_modules_destination_not_valid');
     }
     $sConfigPath = $sTmpPath . $sPackageRootFolder . '/install/config.php';
     if (!file_exists($sConfigPath)) {
         return _t('_adm_txt_modules_wrong_package_format');
     }
     include $sConfigPath;
     if (empty($aConfig) || empty($aConfig['home_dir']) || !$oFtp->copy($sTmpPath . $sPackageRootFolder . '/', 'modules/' . $aConfig['home_dir'])) {
         return _t('_adm_txt_modules_ftp_copy_failed');
     }
     return true;
 }
Пример #5
0
function profile_delete($ID, $isDeleteSpammer = false)
{
    //global $MySQL;
    global $dir;
    //recompile global profiles cache
    $GLOBALS['MySQL']->cleanCache('sys_browse_people');
    $ID = (int) $ID;
    if (!$ID) {
        return false;
    }
    if (!($aProfileInfo = getProfileInfo($ID))) {
        return false;
    }
    $iLoggedInId = getLoggedId();
    db_res("DELETE FROM `sys_admin_ban_list` WHERE `ProfID`='" . $ID . "' LIMIT 1");
    db_res("DELETE FROM `sys_greetings` WHERE `ID` = '{$ID}' OR `Profile` = '{$ID}'");
    db_res("DELETE FROM `sys_block_list` WHERE `ID` = '{$ID}' OR `Profile` = '{$ID}'");
    db_res("DELETE FROM `sys_messages` WHERE Recipient = {$ID} OR `Sender` = {$ID}");
    db_res("DELETE FROM `sys_fave_list` WHERE ID = {$ID} OR Profile = {$ID}");
    db_res("DELETE FROM `sys_friend_list` WHERE ID = {$ID} OR Profile = {$ID}");
    db_res("DELETE FROM `sys_acl_levels_members` WHERE `IDMember` = {$ID}");
    db_res("DELETE FROM `sys_tags` WHERE `ObjID` = {$ID} AND `Type` = 'profile'");
    db_res("DELETE FROM `sys_sbs_entries` WHERE `subscriber_id` = {$ID} AND `subscriber_type` = '1'");
    // delete profile votings
    require_once BX_DIRECTORY_PATH_CLASSES . 'BxDolVoting.php';
    $oVotingProfile = new BxDolVoting('profile', 0, 0);
    $oVotingProfile->deleteVotings($ID);
    // delete profile comments
    require_once BX_DIRECTORY_PATH_CLASSES . 'BxDolCmts.php';
    $oCmts = new BxDolCmts('profile', $ID);
    $oCmts->onObjectDelete();
    // delete all comments in all comments' systems, this user posted
    $oCmts->onAuthorDelete($ID);
    $iPossibleCoupleID = (int) db_value("SELECT `ID` FROM `Profiles` WHERE `Couple` = '{$ID}'");
    if ($iPossibleCoupleID) {
        db_res("DELETE FROM `Profiles` WHERE `ID` = '{$iPossibleCoupleID}'");
        //delete cache file
        deleteUserDataFile($iPossibleCoupleID);
    }
    // delete associated locations
    if (BxDolModule::getInstance('BxWmapModule')) {
        BxDolService::call('wmap', 'response_entry_delete', array('profiles', $ID));
    }
    //delete all subscriptions
    $oSubscription = BxDolSubscription::getInstance();
    $oSubscription->unsubscribe(array('type' => 'object_id', 'unit' => 'profile', 'object_id' => $ID));
    db_res("DELETE FROM `Profiles` WHERE `ID` = '{$ID}'");
    if ($isDeleteSpammer) {
        bx_import('BxDolStopForumSpam');
        $oBxDolStopForumSpam = new BxDolStopForumSpam();
        $oBxDolStopForumSpam->submitSpammer(array('username' => $aProfileInfo['NickName'], 'email' => $aProfileInfo['Email'], 'ip' => bx_member_ip_get_last($ID)));
    }
    // delete moxiemanager files
    $sMoxieFilesPath = BX_DIRECTORY_PATH_ROOT . 'media/moxie/files/' . substr($aProfileInfo['NickName'], 0, 1) . '/' . substr($aProfileInfo['NickName'], 0, 2) . '/' . substr($aProfileInfo['NickName'], 0, 3) . '/' . $aProfileInfo['NickName'];
    bx_rrmdir($sMoxieFilesPath);
    // create system event
    $oZ = new BxDolAlerts('profile', 'delete', $ID, 0, array('profile_info' => $aProfileInfo, 'logged_in' => $iLoggedInId, 'delete_spammer' => $isDeleteSpammer));
    $oZ->alert();
    //delete cache file
    deleteUserDataFile($ID);
}
 protected function performUnarchive($sFilePath, &$sPackagePath)
 {
     $iUmaskSave = umask(0);
     if (!class_exists('ZipArchive')) {
         return _t('_adm_str_err_zip_not_available');
     }
     $oZip = new ZipArchive();
     if ($oZip->open($sFilePath) !== true) {
         return _t('_adm_str_err_cannot_unzip_package');
     }
     $sPackageFolder = '';
     if ($oZip->numFiles > 0) {
         $sPackageFolder = $oZip->getNameIndex(0);
     }
     if (empty($sPackageFolder)) {
         return _t('_adm_str_err_cannot_unzip_package');
     }
     $sPackagePath = BX_DIRECTORY_PATH_TMP . $sPackageFolder;
     if (file_exists($sPackagePath)) {
         // remove existing tmp folder with the same name
         @bx_rrmdir($sPackagePath);
     }
     if (!$oZip->extractTo(BX_DIRECTORY_PATH_TMP)) {
         return _t('_adm_str_err_cannot_unzip_package');
     }
     $oZip->close();
     umask($iUmaskSave);
     return true;
 }
Пример #7
0
 protected function deleteUpgradeFolder($sPatchPath)
 {
     @bx_rrmdir($this->getTmpFolderFromZip($sPatchPath));
 }
Пример #8
0
 function actionUpload($sType, $aFile, $aFtpInfo)
 {
     $sLogin = htmlspecialchars_adv(clear_xss($aFtpInfo['login']));
     $sPassword = htmlspecialchars_adv(clear_xss($aFtpInfo['password']));
     $sPath = htmlspecialchars_adv(clear_xss($aFtpInfo['path']));
     setParam('sys_ftp_login', $sLogin);
     setParam('sys_ftp_password', $sPassword);
     setParam('sys_ftp_dir', $sPath);
     $sErrMsg = false;
     $sName = mktime();
     $sAbsolutePath = BX_DIRECTORY_PATH_ROOT . "tmp/" . $sName . '.zip';
     $sPackageRootFolder = false;
     if (!class_exists('ZipArchive')) {
         $sErrMsg = '_adm_txt_modules_zip_not_available';
     }
     if (!$sErrMsg && $this->_isArchive($aFile['type']) && move_uploaded_file($aFile['tmp_name'], $sAbsolutePath)) {
         // extract uploaded zip package into tmp folder
         $oZip = new ZipArchive();
         if ($oZip->open($sAbsolutePath) !== TRUE) {
             $sErrMsg = '_adm_txt_modules_cannot_unzip_package';
         }
         if (!$sErrMsg) {
             $sPackageRootFolder = $oZip->numFiles > 0 ? $oZip->getNameIndex(0) : false;
             if (file_exists(BX_DIRECTORY_PATH_ROOT . 'tmp/' . $sPackageRootFolder)) {
                 // remove existing tmp folder with the same name
                 bx_rrmdir(BX_DIRECTORY_PATH_ROOT . 'tmp/' . $sPackageRootFolder);
             }
             if ($sPackageRootFolder && !$oZip->extractTo(BX_DIRECTORY_PATH_ROOT . 'tmp/')) {
                 $sErrMsg = '_adm_txt_modules_cannot_unzip_package';
             }
             $oZip->close();
         }
         // upload files to the correct folder via FTP
         if (!$sErrMsg && $sPackageRootFolder) {
             $oFtp = new BxDolFtp($_SERVER['HTTP_HOST'], $sLogin, $sPassword, $sPath);
             if (!$oFtp->connect()) {
                 $sErrMsg = '_adm_txt_modules_cannot_connect_to_ftp';
             }
             if (!$sErrMsg && !$oFtp->isDolphin()) {
                 $sErrMsg = '_adm_txt_modules_destination_not_valid';
             }
             if (!$sErrMsg) {
                 $sConfigPath = BX_DIRECTORY_PATH_ROOT . "tmp/" . $sPackageRootFolder . $this->_aTypesConfig[$sType]['configfile'];
                 if (file_exists($sConfigPath)) {
                     include $sConfigPath;
                     $sConfigVar = !empty($this->_aTypesConfig[$sType]['configvarindex']) ? ${$this->_aTypesConfig[$sType]['configvar']}[$this->_aTypesConfig[$sType]['configvarindex']] : ${$this->_aTypesConfig[$sType]['configvar']};
                     $sSubfolder = $this->_aTypesConfig[$sType]['subfolder'];
                     $sSubfolder = str_replace('{configvar}', $sConfigVar, $sSubfolder);
                     $sSubfolder = str_replace('{packagerootfolder}', $sPackageRootFolder, $sSubfolder);
                     if (!$oFtp->copy(BX_DIRECTORY_PATH_ROOT . "tmp/" . $sPackageRootFolder . '/', $this->_aTypesConfig[$sType]['folder'] . $sSubfolder)) {
                         $sErrMsg = '_adm_txt_modules_ftp_copy_failed';
                     }
                 } else {
                     $sErrMsg = '_adm_txt_modules_wrong_package_format';
                 }
             }
         } else {
             $sErrMsg = '_adm_txt_modules_cannot_unzip_package';
         }
         // remove temporary files
         bx_rrmdir(BX_DIRECTORY_PATH_ROOT . 'tmp/' . $sPackageRootFolder);
         unlink($sAbsolutePath);
     } else {
         $sErrMsg = '_adm_txt_modules_cannot_upload_package';
     }
     return $sErrMsg ? $sErrMsg : '_adm_txt_modules_success_upload';
 }