VERSION = $(shell head -n 1 VERSION) XUANVERSION = $(shell jq -r .pkg.xuanxuan.gitVersion < ci.json) XVERSION = $(shell jq -r .pkg.xuanxuan.version < ci.json) SUITEVERSION = $(shell jq -r .pkg.blocksuite.version < ci.json) XHPROF_VERSION = 2.3.9 XUANPATH := $(XUANXUAN_SRC_PATH) BUILD_KIND := $(if $(BUILD_KIND),$(BUILD_KIND),auto) BUILD_PATH := $(if $(ZENTAO_BUILD_PATH),$(ZENTAO_BUILD_PATH),$(shell pwd)) RELEASE_PATH := $(if $(ZENTAO_RELEASE_PATH),$(ZENTAO_RELEASE_PATH),$(shell pwd)) XUAN_WEB_PATH := $(ZENTAO_BUILD_PATH)/web DELETE_TEST := $(DELETE_TEST) all: make clean make ci clean: rm -fr zentaopms rm -fr zentaostory rm -fr zentaotask rm -fr zentaotest rm -fr *.tar.gz rm -fr *.tar.xz rm -fr *.zip rm -fr build/linux/lampp rm -rf buildroot/ rm -fr lampp rm -fr zentaoxx rm -fr tmp/ rm -f *.sh rm -f *.deb *.rpm common: mkdir zentaopms cp LICENSE.CN zentaopms/ cp LICENSE.EN zentaopms/ cp -fr api zentaopms/ cp -fr bin zentaopms/ cp -fr config zentaopms/ && rm -fr zentaopms/config/my.php cp -fr db zentaopms/ cp -fr doc zentaopms/ && rm -fr zentaopms/doc/phpdoc zentaopms/doc/doxygen zentaopms/doc/LICENSE.LITE.* zentaopms/doc/standard.php cp -fr framework zentaopms/ cp -fr lib zentaopms/ cp -fr module zentaopms/ cp -fr extension zentaopms/ cp -fr sdk zentaopms/ cp -fr roadrunner zentaopms/ cp -fr www zentaopms && rm -fr zentaopms/www/data/ && mkdir -p zentaopms/www/data/upload && mkdir zentaopms/www/data/course # 删除不需要的包和文件 cd zentaopms/lib/; rm -fr composer.json composer.lock patches vendor/bin vendor/cweagans vendor/laminas vendor/markbaker vendor/paragonie vendor/phpseclib vendor/symfony cd zentaopms/lib/vendor/box/spout; rm -fr appveyor.yml composer.json PATCHES.txt README.md UPGRADE-3.0.md cd zentaopms/lib/vendor/dragonmantank/cron-expression; rm -fr tests CHANGELOG.md composer.json README.md cd zentaopms/lib/vendor/erusev/parsedown; rm -fr composer.json PATCHES.txt README.md cd zentaopms/lib/vendor/ezyang/htmlpurifier; rm -fr composer.json CREDITS README.md VERSION cd zentaopms/lib/vendor/gorhill/php-fine-diff; rm -fr composer.json PATCHES.txt sample_from.txt sample_to.txt viewdiff-ex.php viewdiff.php cd zentaopms/lib/vendor/gregwar/captcha; rm -fr composer.json README.md cd zentaopms/lib/vendor/masterexploder/phpthumb; rm -fr examples tests composer.json PATCHES.txt phpunit.xml.dist README.md cd zentaopms/lib/vendor/mobiledetect/mobiledetectlib; rm -fr tests composer.json docker-compose.yml phpcs.xml README.md cd zentaopms/lib/vendor/mustangostang/spyc; rm -fr examples php4 tests composer.json PATCHES.txt phpunit.xml README.md spyc.yaml cd zentaopms/lib/vendor/overtrue/pinyin; rm -fr composer.json README.md cd zentaopms/lib/vendor/pclzip/pclzip; rm -fr composer.json PATCHES.txt readme.txt cd zentaopms/lib/vendor/phpmailer/phpmailer; rm -fr COMMITMENT composer.json README.md SECURITY.md SMTPUTF8.md VERSION; find language -type f -not -name '*zh*' -delete cd zentaopms/lib/vendor/phpoffice/phpspreadsheet; rm -fr bin docs samples CHANGELOG.md CHANGELOG.PHPExcel.md composer.json composer.lock CONTRIBUTING.md mkdocs.yml PATCHES.txt phpunit.xml.dist cd zentaopms/lib/vendor/phpoffice/phpword; rm -fr CHANGELOG.md composer.json CONTRIBUTING.md COPYING COPYING.LESSER phpword.ini.dist README.md sonar-project.properties cd zentaopms/lib/vendor/psr/simple-cache; rm -fr composer.json README.md cd zentaopms/lib/vendor/rmccue/requests; rm -fr CHANGELOG.md composer.json README.md # 清理自动加载文件,移除已删除包的引用 php misc/cleanup_autoload.php zentaopms/lib/vendor > /dev/null # 把隐式可空类型声明 Type $param = null 改为显式可空类型声明 ?Type $param = null php misc/fix_nullable_types.php zentaopms/lib/vendor > /dev/null && rm misc/nullable_types_fix_*.log if [ ! -d "zentaopms/www/js/zui3/editor" ]; then mkdir -p zentaopms/www/js/zui3/editor; fi curl https://$(GITFOX_HOST)/_artifacts/zentao/raw/zui3/static/blocksuite/$(SUITEVERSION)/blocksuite-$(SUITEVERSION).tar.gz | tar zxf - -C zentaopms/www/js/zui3/editor/ # disable the autoExclude function. sed -i 's/\$$autoExclude = true;/\$$autoExclude = false;/' zentaopms/lib/base/dao/dao.class.php mkdir zentaopms/tmp mkdir zentaopms/tmp/cache/ mkdir zentaopms/tmp/duckdb/ mkdir zentaopms/tmp/extension/ mkdir zentaopms/tmp/log/ mkdir zentaopms/tmp/model/ mv zentaopms/www/install.php.tmp zentaopms/www/install.php mv zentaopms/www/upgrade.php.tmp zentaopms/www/upgrade.php cp VERSION zentaopms/ # create index.html of each folder. find zentaopms/ -type d -not -path "zentaopms/lib*" -exec touch {}/index.html \; rm zentaopms/www/index.html # combine js and css files. cp -fr misc zentaopms/misc && cd zentaopms/misc/ && php ./minifyfront.php rm -fr zentaopms/misc # delete the cache file. rm -fr zentaopms/www/cache.php # create the restart file for svn. # touch zentaopms/module/svn/restart # delete the unused files. find zentaopms -name .gitkeep |xargs rm -fr find zentaopms -name tests |xargs rm -fr if [ "$(DELETE_TEST)" != "false" ]; then find zentaopms -name test |xargs rm -fr; fi # notify.zip. mkdir zentaopms/www/data/notify/ zentaoxx: #xuanxuan mkdir -p zentaoxx/config/ext mkdir -p zentaoxx/lib mkdir -p zentaoxx/extension/xuan mkdir -p zentaoxx/framework mkdir -p zentaoxx/db mkdir -p zentaoxx/www mkdir -p zentaoxx/extension/xuan/common/ext/model/ cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip mv $(XUANPATH)/xuan.zip . unzip -q xuan.zip cp xuan/xxb/config/ext/_0_xuanxuan.php zentaoxx/config/ext/ cp -r xuan/xxb/lib/phpaes zentaoxx/lib/ cp -r xuan/xxb/framework/xuanxuan.class.php zentaoxx/framework/ cp -r xuan/xxb/db/*.sql zentaoxx/db/ cp -r xuan/xxb/module/im zentaoxx/extension/xuan/ cp -r xuan/xxb/module/client zentaoxx/extension/xuan/ cp -r xuan/xxb/module/conference zentaoxx/extension/xuan/ cp -r xuan/xxb/module/watermark zentaoxx/extension/xuan/ cp -r xuan/xxb/module/log zentaoxx/extension/xuan/ cp -r xuan/xxb/module/integration zentaoxx/extension/xuan/ mkdir -p zentaoxx/extension/xuan/common/view cp -r xuan/xxb/module/common/view/header.modal.html.php zentaoxx/extension/xuan/common/view cp -r xuan/xxb/module/common/view/marked.html.php zentaoxx/extension/xuan/common/view cp -r xuan/xxb/module/common/view/footer.modal.html.php zentaoxx/extension/xuan/common/view cp -r xuan/xxb/module/common/view/version.html.php zentaoxx/extension/xuan/common/view mkdir -p zentaoxx/www/js/ cp -r xuan/xxb/www/js/markedjs zentaoxx/www/js/ cp -r xuan/xxb/www/js/version.js zentaoxx/www/js/ cp -r xuan/xxb/www/x.php zentaoxx/www/ mkdir zentaoxx/extension/xuan/action cp -r xuan/xxb/module/action/ext zentaoxx/extension/xuan/action cp -r xuan/xxb/config/ext/_1_maps.php zentaoxx/config/ext/ cp -r extension/xuanxuan/config/* zentaoxx/config/ cp -r extension/xuanxuan/extension/xuan/* zentaoxx/extension/xuan/ cp -r extension/xuanxuan/www/* zentaoxx/www/ cp -r $(XUAN_WEB_PATH) zentaoxx/www/data/xuanxuan/ rm -rf zentaoxx/www/data/xuanxuan/web/node_modules zentaoxx/www/data/xuanxuan/web/*.json zentaoxx/www/data/xuanxuan/web/resources zentaoxx/www/data/xuanxuan/web/media/img zentaoxx/www/data/xuanxuan/web/media/twemoji zentaoxx/www/data/xuanxuan/web/assets/draft.dev.js find zentaoxx/www/data/xuanxuan/web/media/sound -not -name 'message.mp3' -type f -delete find zentaoxx/www/data/xuanxuan/web/lang -not -name 'zh-*.json' -not -name 'en.json' -type f -delete mv zentaoxx/db/ zentaoxx/db_bak mkdir zentaoxx/db/ sed -i "s/datetime NOT NULL DEFAULT '0000-00-00 00:00:00'/datetime NULL/" zentaoxx/db_bak/*.sql sed -i "s/datetime NOT NULL/datetime NULL/" zentaoxx/db_bak/*.sql sed -i "s/text NOT NULL DEFAULT ''/text NULL/" zentaoxx/db_bak/*.sql sed -i "s/text NOT NULL/text NULL/" zentaoxx/db_bak/*.sql sed -i "s/ENGINE=MyISAM/ENGINE=InnoDB/" zentaoxx/db_bak/*.sql sed -i "s/utf8/utf8mb4/g" zentaoxx/db_bak/*.sql sed -i "/`xxb_user` ADD `clientStatus`/d; /`xxb_user` ADD `clientLang`/d; /`xxb_file` CHANGE `pathname`/d" zentaoxx/db_bak/xuanxuan.sql cp zentaoxx/db_bak/upgradexuanxuan*.sql zentaoxx/db_bak/xuanxuan.sql zentaoxx/db/ rm -rf zentaoxx/db_bak/ sed -i "s/\$$accountAdmin = \$$this->dao->select('account, admin')->from(TABLE_USER)->where('id')->eq(\$$userID)->fetch();/\$$accountAdmin = \$$this->dao->select('account')->from(TABLE_USER)->where('id')->eq(\$$userID)->fetch();\n\$$sysAdmins = \$$this->dao->select('admins')->from(TABLE_COMPANY)->where('id')->eq(\$$this->app->company->id)->fetch('admins');\n\$$sysAdminArray = explode(',', \$$sysAdmins);\n\$$accountAdmin->admin = in_array(\$$accountAdmin->account, \$$sysAdminArray) ? 'super' : '';\n/" zentaoxx/extension/xuan/im/model/chat.php sed -i "s/\$$sysAdmins = \$$this->dao->select('id')->from(TABLE_USER)->where('admin')->eq('super')->fetchPairs();/\$$account = \$$this->loadModel('user')->getById(\$$userID);\n\$$admins = \$$this->dao->select('admins')->from(TABLE_COMPANY)->where('id')->eq(\$$this->app->company->id)->fetch('admins');\n\$$adminArray = explode(',', \$$admins);\nreturn in_array(\$$account, \$$adminArray);\n/" zentaoxx/extension/xuan/im/model/chat.php sed -i "/->on('tc.ownedBy=tu.account')/{ N ; s/type/tc.type/}" zentaoxx/extension/xuan/im/model/chat.php sed -i "/\$$this->dao->update(TABLE_IM_CHAT)->data(\$$chat)->where('gid')->eq(\$$chat->gid)/i foreach(array('dismissDate', 'mergedDate', 'archiveDate') as \$$nullable) if(isset(\$$chat->\$$nullable) && empty(\$$chat->\$$nullable)) \$$chat->\$$nullable = null;" zentaoxx/extension/xuan/im/model/chat.php sed -i -z "s/\$$account = \$$this->dao->select('account')->from(TABLE_USER)->where('id')->eq(\$$userID)->fetch('account');\s*\$$this->setting->setItem(\"\$$account\./\$$account = \$$this->dao->select('account')->from(TABLE_USER)->where('id')->eq(\$$userID)->fetch('account');\nif(\!isset(\$$this->app->user)) \$$this->app->user = new stdclass();\n\$$this->app->user->account = \$$account;\n\$$this->setting->setItem(\"\$$account\./" zentaoxx/extension/xuan/im/model/chat.php sed -i "s/owner=system\&module=chat\§ion=settings\&key=\$$account/owner=\$$account\&module=chat\§ion=clientSettings\&key=settings/g" zentaoxx/extension/xuan/im/control.php sed -i "s/system.chat.settings.\$$account/\$$account.chat.clientSettings.settings/g" zentaoxx/extension/xuan/im/control.php sed -i 's/\$$this->setting->setItem("\$$account/\$$this->app->user = (object)array("account" => \$$account); \$$this->setting->setItem("\$$account/' zentaoxx/extension/xuan/im/control.php sed -i "s/\$$super = \$$this->dao->select('admin')->from(TABLE_USER)->where('id')->eq(\$$userID)->fetch('admin');/\$$account = \$$this->dao->select('account')->from(TABLE_USER)->where('id')->eq(\$$userID)->fetch('account');\n\$$sysAdmins = \$$this->dao->select('admins')->from(TABLE_COMPANY)->where('id')->eq(\$$this->app->company->id)->fetch('admins');\n\$$sysAdminArray = explode(',', \$$sysAdmins);\n\$$super = in_array(\$$account, \$$sysAdminArray) ? 'super' : '';/g" zentaoxx/extension/xuan/im/control.php sed -i "/foreach(\$$users as \$$user)/i \$$admins = \$$this->dao->select('admins')->from(TABLE_COMPANY)->where('id')->eq(\$$this->app->company->id)->fetch('admins');\$$adminArray = explode(',', \$$admins);" zentaoxx/extension/xuan/im/model/user.php sed -i "/if(\!isset(\$$user->signed)) \$$user->signed = 0;/a \$$user->admin = in_array(\$$user->account, \$$adminArray) ? 'super' : '';" zentaoxx/extension/xuan/im/model/user.php sed -i "/updateUser->ping/d" zentaoxx/extension/xuan/im/model/user.php sed -i "s/\$$file->fullURL/\$$file->webPath/" zentaoxx/extension/xuan/im/control.php sed -i 's/XXBVERSION/$(XVERSION)/g' zentaoxx/config/ext/_0_xuanxuan.php sed -i "/\$$config->xuanxuan->backend /c\\\$$config->xuanxuan->backend = 'zentao';" zentaoxx/config/ext/_0_xuanxuan.php sed -i 's/site,//' zentaoxx/extension/xuan/im/model/user.php sed -i 's/admin, g/g/' zentaoxx/extension/xuan/im/model/user.php sed -i '/password = md5/d' zentaoxx/extension/xuan/im/model/user.php sed -i 's/md5(\$$user->password.*$$/\$$user->password;/g' zentaoxx/extension/xuan/im/model/user.php sed -i '/getSignedTime/d' zentaoxx/extension/xuan/im/control.php sed -i "/loadModel('push')/d" zentaoxx/extension/xuan/im/control.php sed -i "/this->push/d" zentaoxx/extension/xuan/im/control.php sed -i "s/(int)(microtime/(double)(microtime/" zentaoxx/extension/xuan/im/control.php sed -i -z 's/class im extends control\n{/class im extends control\n{ public function __construct($$moduleName = "", $$methodName = "") { parent::__construct($$moduleName, $$methodName); $$this->dao->exec("SET @@sql_mode='\'''\''"); }/' zentaoxx/extension/xuan/im/control.php # use strict mode later. sed -i 's/$$output->data\s*= $$fileID;/$$output->data = "$$fileID";/' zentaoxx/extension/xuan/im/control.php sed -i "s/'yahoo', //g" zentaoxx/extension/xuan/im/config.php sed -i "s/'gtalk', //g" zentaoxx/extension/xuan/im/config.php sed -i "s/'wangwang', //g" zentaoxx/extension/xuan/im/config.php sed -i "s/'site', //g" zentaoxx/extension/xuan/im/config.php sed -i 's/xuanim.com/zentao.net/g' zentaoxx/extension/xuan/im/config.php sed -i 's/xuanxuan/zentaoclient/g' zentaoxx/extension/xuan/im/config.php sed -i "s/'reload'/inlink('browse')/g" zentaoxx/extension/xuan/client/control.php sed -i 's/tree/dept/' zentaoxx/extension/xuan/im/model.php sed -i 's/tree/dept/' zentaoxx/extension/xuan/im/control.php sed -i 's/im_/zt_im_/g' zentaoxx/db/*.sql sed -i 's/xxb_user/zt_user/g' zentaoxx/db/*.sql sed -i 's/xxb_file/zt_file/g' zentaoxx/db/*.sql sed -i '/xxb_entry/d' zentaoxx/db/*.sql sed -i '/deviceToken/d' zentaoxx/db/*.sql sed -i '/deviceType/d' zentaoxx/db/*.sql sed -i 's/xxb_/zt_/g' zentaoxx/db/*.sql sed -i "/fetch('push', 'pushMessage');/d" zentaoxx/extension/xuan/im/control.php #sed -i "s/marked\.html\.php';?>/marked\.html\.php';?>\n