protected function postUpload($tmp_name, $filename) { if (strpos($filename, '..') !== false || strpos($filename, '.php.') !== false || preg_match('/\\.php$/', $filename)) { exit('illegal file type!'); } WindFolder::mkRecur(dirname($filename)); if (function_exists("move_uploaded_file") && @move_uploaded_file($tmp_name, $filename)) { @unlink($tmp_name); @chmod($filename, 0777); return filesize($filename); } elseif (@copy($tmp_name, $filename)) { @unlink($tmp_name); @chmod($filename, 0777); return filesize($filename); } elseif (is_readable($tmp_name)) { Wind::import('WIND:utility.WindFile'); WindFile::write($filename, WindFile::read($tmp_name)); @unlink($tmp_name); if (file_exists($filename)) { @chmod($filename, 0777); return filesize($filename); } } return false; }
/** * 解析properties文件并返回一个多维数组 * * 载入一个由 filename 指定的 properties 文件, * 并将其中的设置作为一个联合数组返回。 * * @param string $filename 文件名 * @return array */ private function parse_properties_file($filename) { if (!is_file($filename) || !in_array(substr($filename, strrpos($filename, '.') + 1), array('properties'))) { return array(); } $content = explode("\n", WindFile::read($filename)); $data = array(); $last_process = $current_process = ''; foreach ($content as $key => $value) { $value = str_replace(array("\n", "\r"), '', trim($value)); if (0 === strpos(trim($value), self::COMMENT) || in_array(trim($value), array('', "\t", "\n"))) { continue; } $tmp = explode('=', $value, 2); if (0 === strpos(trim($value), self::LPROCESS) && strlen($value) - 1 === strrpos($value, self::RPROCESS)) { $current_process = $this->trimChar(trim($value), array(self::LPROCESS, self::RPROCESS)); $data[$current_process] = array(); $last_process = $current_process; continue; } $tmp[0] = trim($tmp[0]); if (count($tmp) == 1) { $last_process ? $data[$last_process][$tmp[0]] = '' : ($data[$tmp[0]] = ''); continue; } $tmp[1] = trim($tmp[1], '\'"'); $__tmpValue = strtolower($tmp[1]); $tmp[1] = 'false' === $__tmpValue ? false : ('true' === $__tmpValue ? true : $tmp[1]); $last_process ? $data[$last_process][$tmp[0]] = $tmp[1] : ($data[$tmp[0]] = $tmp[1]); } return $data; }
/** * 获得模板文件内容,目前只支持本地文件获取 * * @param string $templateFile * @return string */ private function getTemplateFileContent($templateFile) { if (false === ($content = WindFile::read($templateFile))) { throw new WindViewException('[viewer.AbstractWindViewTemplate.getTemplateFileContent] Unable to open the template file \'' . $templateFile . '\'.'); } return $content; }
private static function _getMP3Audio() { self::$_audioVerify = ''; $_len = Pw::strlen(self::$verifyCode); for ($i = 0; $i < $_len; $i++) { $_code = strtoupper(self::$verifyCode[$i]); self::$_audioVerify .= WindFile::read(self::$_audioPath . '/' . $_code . '.mp3', WindFile::READ); } }
public static function uploadRequest($url, $file, $timeout = 30) { if (!function_exists('fsockopen')) { $urlArr = parse_url($url); $port = isset($urlArr['port']) ? $urlArr['port'] : 80; $boundary = "---------------------" . substr(md5(rand(0, 32000)), 0, 10); $header = "POST " . $urlArr['path'] . '?' . $urlArr['query'] . " HTTP/1.0\r\n"; $header .= "Host: " . $urlArr['host'] . "\r\n"; $header .= "Content-type: multipart/form-data, boundary=" . $boundary . "\r\n"; if (!file_exists($file)) { return false; } $imageInfo = @getimagesize($file); $exts = array('1' => 'gif', '2' => 'jpg', '3' => 'png'); if (!isset($exts[$imageInfo[2]])) { continue; } $ext = $exts[$imageInfo[2]]; $filename = rand(1000, 9999) . '.' . $ext; $data = ''; $data .= "--{$boundary}\r\n"; $data .= "Content-Disposition: form-data; name=\"FileData\"; filename=\"" . $filename . "\"\r\n"; $data .= "Content-Type: " . $imageInfo['mime'] . "\r\n\r\n"; $data .= WindFile::read($file) . "\r\n"; $data .= "--{$boundary}--\r\n"; $header .= "Content-length: " . strlen($data) . "\r\n\r\n"; $fp = fsockopen($urlArr['host'], $port); fputs($fp, $header . $data); $response = ''; while (!feof($fp)) { $response .= fgets($fp, 128); } fclose($fp); preg_match("/Content-Length:.?(\\d+)/", $response, $matches); if (isset($matches[1])) { $response = substr($response, strlen($response) - intval($matches[1])); } return $response; } elseif (function_exists('curl_init')) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $file); curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); return $response; } else { return false; } }
/** * 存储附件,如果是远程存储,记得删除本地文件 * * @param string $source 本地源文件地址 * @param string $filePath 存储相对位置 * @return bool */ public function save($source, &$filePath) { $data = WindFile::read($source); $stuff = WindFile::getSuffix($source); $result = $this->_getCdn()->write($data, $stuff); if ($result) { Pw::deleteFile($source); $filePath = $result; return true; } else { return false; } }
/** * 将给出的文件列表进行打包 * * @param mixed $fileList 文件列表 * @param string $dst 打包文件的存放位置 * @param method $packMethod 打包的方式,默认为stripWhiteSpaceByPhp * @param boolean $compress 打包是否采用压缩的方式,默认为true * @return boolean */ public function packFromFileList($fileList, $dst, $packMethod = WindPack::STRIP_PHP, $compress = true) { if (empty($dst) || empty($fileList)) { return false; } $content = array(); $this->readContentFromFileList($fileList, $packMethod, $content); $replace = $compress ? ' ' : "\n"; $content = implode($replace, $content); $content = $this->callBack($content, $replace); $content = $this->stripNR($content, $replace); $content = $this->stripPhpIdentify($content, ''); return WindFile::write($dst, '<?php' . $replace . $content . '?>'); }
/** * 编译模板并返回编译后模板地址及内容 * * <pre> * <i>$output==true</i>返回编译文件绝对路径地址和内容,不生成编译文件; * <i>$output==false</i>返回编译文件绝对路径地址和内容,生成编译文件 * </pre> * * @param string $template 模板名称 必填 * @param string $suffix 模板后缀 默认为空 * @param boolean $readOnly 是否直接输出模板内容,接受两个值true,false 默认值为false * @param boolean $forceOutput 是否强制返回模板内容,默认为不强制 * @return array(compileFile,content) <pre> * <i>compileFile</i>模板编译文件绝对地址, * <i>content</i>编译后模板输出内容,当<i>$output</i> * 为false时将content写入compileFile</pre> */ public function compile($template, $suffix = '', $readOnly = false, $forceOutput = false) { $templateFile = $this->windView->getViewTemplate($template, $suffix); if (!is_file($templateFile)) { throw new WindViewException('[component.viewer.WindViewerResolver.compile] ' . $templateFile, WindViewException::VIEW_NOT_EXIST); } $compileFile = $this->windView->getCompileFile($template); if (!$this->checkReCompile($templateFile, $compileFile)) { return array($compileFile, $forceOutput ? WindFile::read($compileFile) : ''); } /* @var $_windTemplate WindViewTemplate */ $_windTemplate = Wind::getApp()->getComponent('template'); $_output = $_windTemplate->compile($templateFile, $this); $readOnly === false && WindFile::write($compileFile, $_output); return array($compileFile, $_output); }
/** * 编译模板并返回编译后模板地址及内容 * <pre> * <i>$output==true</i>返回编译文件绝对路径地址和内容,不生成编译文件; * <i>$output==false</i>返回编译文件绝对路径地址和内容,生成编译文件 * </pre> * * @param string $template 模板名称 必填 * @param string $suffix 模板后缀 默认为空 * @param boolean $readOnly 是否直接输出模板内容,接受两个值true,false 默认值为false * @param boolean $forceOutput 是否强制返回模板内容,默认为不强制 * @return array(compileFile,content) <pre> * <i>compileFile</i>模板编译文件绝对地址, * <i>content</i>编译后模板输出内容,当<i>$output</i> * 为false时将content写入compileFile</pre> */ public function compile($template, $suffix = '', $readOnly = false, $forceOutput = false) { list($templateFile, $compileFile, $this->currentThemeKey) = $this->windView->getViewTemplate($template, $suffix); if (!is_file($templateFile)) { throw new WindViewException('[viewer.resolver.WindViewerResolver.compile] ' . $templateFile, WindViewException::VIEW_NOT_EXIST); } if (!$this->checkReCompile($templateFile, $compileFile)) { return array($compileFile, $forceOutput || $readOnly ? WindFile::read($compileFile) : ''); } /* @var $_windTemplate WindViewTemplate */ $_windTemplate = Wind::getComponent('template'); $_output = $_windTemplate->compile($templateFile, $this); if (false === $readOnly) { WindFolder::mkRecur(dirname($compileFile)); WindFile::write($compileFile, $_output); } return array($compileFile, $_output); }
/** * 判断是否是子域名 * * 此方法不够严谨,如果遇到主域名正好就是域名后缀的时候,类似www.info.com,www.net.cn时有bug。 * * @param string $domain1 * @param string $domain2 */ public static function isMyBrother($domain1, $domain2) { if ($domain1 == $domain2) { return true; } if (WindFile::getSuffix($domain1) != WindFile::getSuffix($domain2)) { return false; } $domain1 = str_replace(array('http://'), 'https://', $domain1); $domain2 = str_replace(array('http://'), 'https://', $domain2); $suffix = array('com', 'cn', 'name', 'org', 'net', 'edu', 'gov', 'info', 'pro', 'museum', 'coop', 'aero', 'xxx', 'idv', 'hk', 'tw', 'mo', 'me', 'biz'); $preg = implode('|', $suffix); $domain1 = preg_replace("/(\\.({$preg}))*\\.({$preg})\$/iU", '', $domain1); $domain2 = preg_replace("/(\\.({$preg}))*\\.({$preg})\$/iU", '', $domain2); $r = explode('.', $domain1); $main1 = end($r); $r = explode('.', $domain2); $main2 = end($r); return $main1 == $main2; }
/** * @param string $stylePackage * @param booelan $isManifestChanged * @return boolean */ private function _doCss($stylePackage) { $file = $stylePackage . '/' . $this->manifest; $dir = $stylePackage . '/' . $this->cssDevDir; $_dir = $stylePackage . '/' . $this->cssDir; WindFolder::mkRecur($_dir); $files = WindFolder::read($dir, WindFolder::READ_FILE); foreach ($files as $v) { if (WindFile::getSuffix($v) === 'css') { $dev_css = $dir . '/' . $v; //待编译文件 $css = $_dir . '/' . $v; //编译后文件 $data = WindFile::read($dir . '/' . $v); $_data = $this->_compress($data); if (WindFile::write($css, $_data) === false) { return new PwError('STYLE:style.css.write.fail'); } } } return true; }
public function doCompile() { $JS_DEV_PATH = Wind::getRealDir('PUBLIC:res.js.dev'); $JS_BUILD_PATH = Wind::getRealDir('PUBLIC:res.js.build'); Wind::import('Wind:utility.WindFolder'); $files = $this->_getFiles($JS_DEV_PATH); foreach ($files as $file) { $newfile = $JS_BUILD_PATH . substr($file, strlen($JS_DEV_PATH)); WindFolder::mkRecur(dirname($newfile)); if (substr($file, -3) != '.js') { if (!copy($file, $newfile)) { return new PwError('copy failed'); } continue; } $content = WindFile::read($file); $compress = jscompress::pack($content); if (!WindFile::write($newfile, $compress)) { return new PwError('write failed'); } } }
/** * 查找未安装的风格 * * @return array 未安装的风格名 */ public function getUnInstalledThemes() { $config = Wekit::load('APPCENTER:service.srv.PwInstallApplication')->getConfig('style-type'); $themes = array(); foreach ($config as $k => $v) { $dir = Wind::getRealDir('THEMES:' . $v[1]); $files = WindFolder::read($dir, WindFolder::READ_DIR); foreach ($files as $file) { if (WindFile::isFile($dir . '/' . $file . '/' . $this->manifest)) { $themes[$k][] = $file; } } } if (empty($themes)) { return array(); } $styles = array(); foreach ($themes as $k => $v) { $r = $this->_styleDs()->fetchStyleByAliasAndType($v, $k, 'alias'); $r = array_diff($v, array_keys($r)); $r && ($styles[$k] = $r); } return $styles; }
public function checkTxt($filename = '', $content = '') { if (!$filename && !$content) { return new PwError("DESIGN:upload.file.error"); } if ($filename) { if (!($content = WindFile::read($filename))) { return new PwError("DESIGN:upload.file.error"); } } $content = preg_replace("/\\/\\*(.+)\\*\\//", '', $content); $content = unserialize(base64_decode($content)); $_array = array('page', 'segment', 'structure', 'module'); foreach ($_array as $v) { if (!isset($content[$v])) { return new PwError("DESIGN:file.check.fail"); } } $this->_content = $content; if ($filename) { WindFile::del($filename); } return true; }
private function _getTemplate($path) { list($tpl, $compile) = $this->windViewerResolver->getWindView()->getViewTemplate($path); if (!$tpl) { return ''; } return WindFile::read($tpl); }
/** * 导出压缩包 * */ public function exportAction() { $alias = $this->getInput('alias', 'get'); Wind::import('LIB:utility.PwZip'); $dir = Wind::getRealDir('EXT:' . $alias); if (!is_dir($dir)) { $this->showError('fail'); } $target = Wind::getRealPath('DATA:tmp.' . $alias . '.zip', true); PwApplicationHelper::zip($dir, $target); $timestamp = Pw::getTime(); $this->getResponse()->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', $timestamp + 86400) . ' GMT'); $this->getResponse()->setHeader('Expires', gmdate('D, d M Y H:i:s', $timestamp + 86400) . ' GMT'); $this->getResponse()->setHeader('Cache-control', 'max-age=86400'); $this->getResponse()->setHeader('Content-type', 'application/x-zip-compressed'); $this->getResponse()->setHeader('Content-Disposition', 'attachment; filename=' . $alias . '.zip'); $this->getResponse()->sendHeaders(); @readfile($target); WindFile::del($target); $this->getResponse()->sendBody(); exit; }
/** * 自定义页面升级 start * * @return boolean */ protected function _designUpgrade() { Wind::import('SRV:design.srv.vo.PwDesignPortalSo'); $vo = new PwDesignPortalSo(); $vo->setIsopen(1); $list = $this->_getPortalDs()->searchPortal($vo, 0, 100); $dirList = array(); foreach ($list as $k => $v) { if (empty($v['template'])) { $dirList[$k] = $v['id']; } } $dir = Wind::getRealDir('THEMES:portal.local.'); $_dir = array(); if (!is_dir($dir)) { return array(); } if (!($handle = @opendir($dir))) { return array(); } while (false !== ($file = @readdir($handle))) { if ('.' === $file || '..' === $file) { continue; } $fileName = $dir . $file; if (is_file($fileName)) { continue; } elseif (is_dir($fileName) && is_numeric($file)) { $key = array_search($file, $dirList); unset($dirList[$k]); if ((int) $file != $file) { continue; } $tplPath = 'special_' . $file; Wind::import('SRV:design.dm.PwDesignPortalDm'); $dm = new PwDesignPortalDm($file); $dm->setTemplate($tplPath); Wekit::load('design.PwDesignPortal')->updatePortal($dm); $this->copyRecur($fileName, $dir . $tplPath . '/'); } } $srv = Wekit::load('design.srv.PwDesignService'); foreach ($dirList as $k => $v) { $tplPath = 'special_' . $v; $result = $srv->defaultTemplate($k, $tplPath); if ($result) { WindFile::write($dir . $tplPath . '/template/index.htm', $this->_tpl()); Wind::import('SRV:design.dm.PwDesignPortalDm'); $dm = new PwDesignPortalDm($v); $dm->setTemplate($tplPath); Wekit::load('design.PwDesignPortal')->updatePortal($dm); } } @closedir($handle); return true; }
private function _clear() { WindFolder::clearRecur(dirname($this->upgrade_temp), true); $useFtp = Wekit::cache()->get('system_upgrade_ftp'); $phps = $this->_getPhps(); $sql = PUBLIC_PATH . 'update.sql'; if ($phps || file_exists($sql)) { if ($useFtp) { try { $ftp = $useFtp['sftp'] ? new PwSftpSave($useFtp) : new PwFtpSave($useFtp); $ftp->delete(str_replace(ROOT_PATH, '', $sql)); } catch (WindFtpException $e) { } } else { WindFile::del($sql); } foreach ($phps as $php) { $file = PUBLIC_PATH . $php; if ($useFtp) { $file = str_replace(ROOT_PATH, '', $file); $ftp->delete($file); } else { WindFile::del($file); } } $ftp && $ftp->close(); } WindFile::del(DATA_PATH . 'upgrade/sql.tmp'); Wekit::cache()->batchDelete(array('system_upgrade', 'system_upgrade_step', 'system_upgrade_db_step', 'system_upgrade_php_step', 'system_upgrade_ftp', 'system_upgrade_download_step', 'system_upgrade_info', 'system_upgrade_replace')); }
/** * 删除本地文件 * * @param string $filename 文件绝对地址 * @return bool */ public static function deleteFile($filename) { return WindFile::del(WindSecurity::escapePath($filename, true)); }
public function generate() { $addons = Wekit::load('APPS:appcenter.service.srv.PwInstallApplication')->getConfig('style-type'); $base = str_replace('/', '.', $addons[$this->style_type][1]); $this->defaultDir = Wind::getRealDir('THEMES:' . $base . '.default'); if (!is_dir($this->defaultDir)) { return new PwError('APPCENTER:generate.style.unsupport'); } $this->baseDir = Wind::getRealDir('THEMES:' . $base . '.' . $this->alias); if (is_dir($this->baseDir)) { return new PwError('APPCENTER:alias.exist'); } WindFolder::mkRecur($this->baseDir); Wind::import('APPS:appcenter.service.srv.helper.PwSystemHelper'); $writable = PwSystemHelper::checkWriteAble($this->baseDir . '/'); if (!$writable) { return new PwError('APPCENTER:generate.copy.fail'); } PwApplicationHelper::copyRecursive($this->defaultDir, $this->baseDir); $file = $this->baseDir . '/Manifest.xml'; Wind::import('WIND:parser.WindXmlParser'); $parser = new WindXmlParser(); $manifest = $parser->parse($file); $manifest['application']['name'] = $this->name; $manifest['application']['alias'] = $this->alias; $manifest['application']['description'] = $this->description; $manifest['application']['version'] = $this->version; $manifest['application']['pw-version'] = $this->pwversion; $manifest['application']['website'] = $this->website; $manifest['application']['author-name'] = $this->author; $manifest['application']['author-email'] = $this->email; $parser = new WindXmlParser(); $manifest = str_replace('><', ">\n\t<", $parser->parseToXml(array('manifest' => $manifest), Wind::getApp()->getResponse()->getCharset())); WindFile::write($this->baseDir . '/Manifest.xml', $manifest); return 'THEMES:' . $base . '.' . $this->alias; }
public function doimportAction() { Wind::import('SRV:upload.action.PwWordUpload'); Wind::import('LIB:upload.PwUpload'); $bhv = new PwWordUpload(); $upload = new PwUpload($bhv); if (($result = $upload->check()) === true) { $result = $upload->execute(); } if ($result !== true) { $error = $result->getError(); if (is_array($error)) { list($error, ) = $error; if ($error == 'upload.ext.error') { $this->showError('WORD:ext.error'); } } $this->showError($result->getError()); } $source = $bhv->getAbsoluteFile(); if (!WindFile::isFile($source)) { $this->showError('operate.fail'); } $content = WindFile::read($source); pw::deleteAttach($bhv->dir . $bhv->filename, 0, $bhv->isLocal); $content = explode("\n", $content); if (!$content) { $this->showError('WORD:import.data.empty'); } $wordService = $this->_getWordService(); $typeMap = $this->_getWordDS()->getTypeMap(); Wind::import('SRV:word.dm.PwWordDm'); foreach ($content as $value) { list($word, $type, $replace) = $this->_parseTextUseInImport($value, $typeMap); if (!$word || !$type || $wordService->isExistWord($word)) { continue; } $dm = new PwWordDm(); /* @var $dm PwWordDm */ $dm->setWord($word)->setWordType($type); $replace = $this->_getWordDS()->isReplaceWord($type) ? $replace ? $replace : '****' : ''; $dm->setWordReplace($replace); $this->_getWordDS()->add($dm); } $this->_getWordFilter()->updateCache(); $this->showMessage('success'); }
/** * 清理安装过程中产生的临时信息 * * step 5 * * @return void */ public function clear() { list(, , $install) = $this->resolvedInstallation($this->tmpInstallLog); if (is_file($this->tmpInstallLog)) { WindFile::del($this->tmpInstallLog); } if ($install->getTmpPackage()) { WindFolder::rm($install->getTmpPackage(), true); } if ($install->getTmpPath()) { WindFolder::rm($install->getTmpPath(), true); } }
protected function getImage($url, $path, $filename = "") { if ($url == "" || $path == "") { return false; } if (!$this->createFolder($path)) { return false; } $ext = strrchr($url, "."); if ($ext != ".gif" && $ext != ".jpg" && $ext != ".png") { return false; } $filename = $filename ? $filename : mt_rand(1, 999999) . '.' . $ext; $filename = $path . $filename; if ($this->store instanceof PwStorageFtp) { $ftp = Wekit::load('design.srv.ftp.PwDesignFtp'); $ftp->download($this->image, $filename); } else { ob_start(); echo $this->getContents($url); $img = ob_get_contents(); ob_end_clean(); WindFile::write($filename, $img); } return $filename; }
public function install($patch) { $tmpfiles = $this->bakFiles = array(); WindFolder::mkRecur($this->tmpPath); if ($this->ftp && !is_object($this->ftp)) { try { $this->ftp = $this->ftp['sftp'] ? new PwSftpSave($this->ftp) : new PwFtpSave($this->ftp); } catch (WindFtpException $e) { return false; } } foreach ($patch['rule'] as $rule) { $rule['filename'] = $this->sortFile($rule['filename']); $filename = ROOT_PATH . $rule['filename']; $search = base64_decode($rule['search']); $replace = base64_decode($rule['replace']); $count = $rule['count']; $nums = $rule['nums']; $str = WindFile::read($filename); $realCount = substr_count($str, $search); if ($realCount != $count) { return new PwError('APPCENTER:upgrade.patch.update.fail', array($patch['id'])); } $bakfile = basename($rule['filename']) . '.' . Pw::time2str(WEKIT_TIMESTAMP, 'Ymd') . '.bak'; $bakfile = $this->ftp ? dirname($rule['filename']) . '/' . $bakfile : dirname($filename) . '/' . $bakfile; $tmpfile = tempnam($this->tmpPath, 'patch'); $replacestr = PwSystemHelper::replaceStr($str, $search, $replace, $count, $nums); WindFile::write($tmpfile, $replacestr); if ($this->ftp) { try { $this->ftp->upload($filename, $bakfile); $this->ftp->upload($tmpfile, $rule['filename']); } catch (WindFtpException $e) { return false; } } else { if (!@copy($filename, $bakfile)) { return new PwError('APPCENTER:upgrade.copy.fail', array($rule['filename'])); } if (!@copy($tmpfile, $filename)) { return new PwError('APPCENTER:upgrade.copy.fail', array($rule['filename'])); } } $tmpfiles[] = $tmpfile; $this->bakFiles[] = $bakfile; } $this->_ds()->addLog($patch['id'], $patch, 2); return true; }
/** * 对模块进行删除 * PS:不是真正的删除,记录为isused = 0状态 */ public function deleteAction() { $moduleid = (int) $this->getInput('moduleid', 'post'); $module = $this->_getModuleDs()->getModule($moduleid); if (!$module || $module['page_id'] < 1) { $this->showError('operate.fail'); } Wekit::load('design.PwDesignPermissions'); $permissions = $this->_getPermissionsService()->getPermissionsForModule($this->loginUser->uid, $moduleid); if ($permissions < PwDesignPermissions::IS_DESIGN) { $this->showError("DESIGN:permissions.fail"); } Wind::import('SRV:design.bo.PwDesignPageBo'); $pageBo = new PwDesignPageBo($module['page_id']); if ($pageBo->getLock()) { $this->showError('DESIGN:page.edit.other.user'); } Wind::import('SRV:design.dm.PwDesignModuleDm'); $dm = new PwDesignModuleDm($moduleid); $dm->setIsused(0); $resource = $this->_getModuleDs()->updateModule($dm); if ($resource instanceof PwError) { $this->showError($resource->getError()); } //if (!$this->_getModuleDs()->deleteModule($moduleid)) $this->showMessage("operate.fail"); $this->_getDataDs()->deleteByModuleId($moduleid); Wekit::load('design.PwDesignPush')->deleteByModuleId($moduleid); //删除导入数据的模版内容 $dir = Wind::getRealDir('THEMES:portal.local.'); $path = $dir . $pageBo->getTplPath() . '/template/'; $files = WindFolder::read($path, WindFolder::READ_FILE); foreach ($files as $file) { $filePath = $path . $file; $content = WindFile::read($filePath); if (!$content) { continue; } $tmp = preg_replace('/\\<pw-list\\s*id=\\"' . $moduleid . '\\"\\s*>(.+)<\\/pw-list>/isU', '', $content); if ($tmp != $content) { WindFile::write($filePath, $tmp); } } $this->showMessage("operate.success"); }
public static function log($msg, $version, $start = false) { static $log; if (!$log) { $log = Wind::getRealDir('DATA:upgrade.log', true) . '/' . $version . '.log'; WindFolder::mkRecur(dirname($log)); } $status = $start ? WindFile::READWRITE : WindFile::APPEND_WRITEREAD; WindFile::write($log, "\r\n" . date('Y-m-d H:i') . ' ' . $msg, $status); }
protected function getCacheArea() { $file = Wind::getRealPath('DATA:area.area.php', true); if (WindFile::isFile($file)) { return include $file; } return $this->updateCache(); }
/** * 存储附件,如果是远程存储,记得删除本地文件 * * @param string $source 本地源文件地址 * @param string $filePath 存储相对位置 * @return bool */ public function save($source, $filePath) { $this->_getFtp()->upload($source, $filePath, 'I'); WindFile::del(WindSecurity::escapePath($source, true)); return true; }
/** * 递归的删除目录 * * @param string $dir 目录 * @param Boolean $delFolder 是否删除目录 */ public static function clearRecur($dir, $delFolder = false) { if (!self::isDir($dir)) { return false; } if (!($handle = @opendir($dir))) { return false; } while (false !== ($file = readdir($handle))) { if ('.' === $file || '..' === $file) { continue; } $_path = $dir . '/' . $file; if (self::isDir($_path)) { self::clearRecur($_path, $delFolder); } elseif (WindFile::isFile($_path)) { WindFile::del($_path); } } $delFolder && @rmdir($dir); @closedir($handle); return true; }
protected function deleteValue($key) { return WindFile::write($key, ''); }