├── .github
├── javascript-syntax.json
├── php-syntax.json
└── workflows
│ ├── codestyle.yml
│ ├── javascript.yml
│ ├── php.yml
│ └── templates.yml
├── .phpcs.xml
├── LICENSE
├── README.md
├── acptemplates
├── __cmsVersion.tpl
├── __menuItemAddJavascript.tpl
├── __pageMenuInfo.tpl
├── boxContentType.tpl
├── categoryFileListDialog.tpl
├── columnsContentType.tpl
├── contentAdd.tpl
├── contentContentType.tpl
├── contentItemsList.tpl
├── contentList.tpl
├── contentTypeList.tpl
├── databaseObjectListContentType.tpl
├── fileContentType.tpl
├── fileDetails.tpl
├── fileList.tpl
├── fileListDialog.tpl
├── filePreview.tpl
├── fileUploadDialog.tpl
├── galleryContentType.tpl
├── googleMapsContentType.tpl
├── groupContentType.tpl
├── headlineContentType.tpl
├── imageContentType.tpl
├── imageList.tpl
├── import.tpl
├── linkContentType.tpl
├── linkPageType.tpl
├── menuContentType.tpl
├── pageAdd.tpl
├── pageList.tpl
├── pageMultiSelectOptionType.tpl
├── pagePageType.tpl
├── pageRevisionList.tpl
├── pageSelectOptionType.tpl
├── phpContentType.tpl
├── pieChartContentType.tpl
├── pollContentType.tpl
├── rssContentType.tpl
├── slideshowContentType.tpl
├── stats.tpl
├── stylesheetAdd.tpl
├── stylesheetList.tpl
├── tabMenuContentType.tpl
├── templateContentType.tpl
├── textContentType.tpl
├── userContentType.tpl
├── wsipImportContentType.tpl
└── youtubeContentType.tpl
├── constants.php
├── files
├── acp
│ ├── global.php
│ ├── index.php
│ ├── install_de.codequake.cms.php
│ └── js
│ │ ├── Fireball.ACP.js
│ │ └── Fireball.ACP.min.js
├── files
│ ├── .htaccess
│ └── thumbnails
│ │ └── .gitignore
├── global.php
├── index.php
├── js
│ ├── Fireball.js
│ ├── Fireball.min.js
│ └── codeQuake
│ │ └── Acp
│ │ └── FileInlineEditor.js
├── lib
│ ├── acp
│ │ ├── action
│ │ │ └── CMSExportAction.class.php
│ │ ├── form
│ │ │ ├── CMSImportForm.class.php
│ │ │ ├── ContentAddForm.class.php
│ │ │ ├── ContentEditForm.class.php
│ │ │ ├── FileCategoryAddForm.class.php
│ │ │ ├── FileCategoryEditForm.class.php
│ │ │ ├── PageAddForm.class.php
│ │ │ ├── PageEditForm.class.php
│ │ │ ├── StylesheetAddForm.class.php
│ │ │ └── StylesheetEditForm.class.php
│ │ └── page
│ │ │ ├── ContentListPage.class.php
│ │ │ ├── FileCategoryListPage.class.php
│ │ │ ├── FileListPage.class.php
│ │ │ ├── PageListPage.class.php
│ │ │ ├── StatsPage.class.php
│ │ │ └── StylesheetListPage.class.php
│ ├── data
│ │ ├── content
│ │ │ ├── BoxContentNodeTree.class.php
│ │ │ ├── Content.class.php
│ │ │ ├── ContentAction.class.php
│ │ │ ├── ContentCache.class.php
│ │ │ ├── ContentEditor.class.php
│ │ │ ├── ContentList.class.php
│ │ │ ├── ContentNode.class.php
│ │ │ ├── ContentNodeTree.class.php
│ │ │ ├── DrainedContentNodeTree.class.php
│ │ │ ├── DrainedPositionContentNodeTree.class.php
│ │ │ ├── ViewableContent.class.php
│ │ │ └── ViewableContentList.class.php
│ │ ├── file
│ │ │ ├── CategoryFileList.class.php
│ │ │ ├── File.class.php
│ │ │ ├── FileAction.class.php
│ │ │ ├── FileCache.class.php
│ │ │ ├── FileEditor.class.php
│ │ │ └── FileList.class.php
│ │ ├── page
│ │ │ ├── AccessiblePageNodeTree.class.php
│ │ │ ├── DrainedPageNodeTree.class.php
│ │ │ ├── Page.class.php
│ │ │ ├── PageAction.class.php
│ │ │ ├── PageCache.class.php
│ │ │ ├── PageEditor.class.php
│ │ │ ├── PageList.class.php
│ │ │ ├── PageNode.class.php
│ │ │ ├── PageNodeTree.class.php
│ │ │ ├── SearchResultPage.class.php
│ │ │ ├── SearchResultPageList.class.php
│ │ │ ├── ViewablePage.class.php
│ │ │ ├── ViewablePageNodeTree.class.php
│ │ │ └── revision
│ │ │ │ ├── PageRevision.class.php
│ │ │ │ ├── PageRevisionAction.class.php
│ │ │ │ ├── PageRevisionEditor.class.php
│ │ │ │ └── PageRevisionList.class.php
│ │ └── stylesheet
│ │ │ ├── Stylesheet.class.php
│ │ │ ├── StylesheetAction.class.php
│ │ │ ├── StylesheetCache.class.php
│ │ │ ├── StylesheetEditor.class.php
│ │ │ └── StylesheetList.class.php
│ ├── page
│ │ ├── AbstractCMSPage.class.php
│ │ ├── FileDownloadPage.class.php
│ │ ├── ICMSPage.class.php
│ │ ├── LinkPage.class.php
│ │ ├── PagePage.class.php
│ │ └── SitemapPage.class.php
│ ├── system
│ │ ├── CMSCore.class.php
│ │ ├── backup
│ │ │ └── BackupHandler.class.php
│ │ ├── bbcode
│ │ │ ├── CMSFileBBCode.class.php
│ │ │ ├── CMSFileUrlBBCode.class.php
│ │ │ └── PageBBCode.class.php
│ │ ├── cache
│ │ │ └── builder
│ │ │ │ ├── ContentCacheBuilder.class.php
│ │ │ │ ├── ContentPermissionCacheBuilder.class.php
│ │ │ │ ├── FileCacheBuilder.class.php
│ │ │ │ ├── FilePermissionCacheBuilder.class.php
│ │ │ │ ├── PageCacheBuilder.class.php
│ │ │ │ ├── PagePermissionCacheBuilder.class.php
│ │ │ │ └── StylesheetCacheBuilder.class.php
│ │ ├── category
│ │ │ └── FileCategoryType.class.php
│ │ ├── clipboard
│ │ │ └── action
│ │ │ │ ├── ContentClipboardAction.class.php
│ │ │ │ ├── FileClipboardAction.class.php
│ │ │ │ ├── PageClipboardAction.class.php
│ │ │ │ └── StylesheetClipboardAction.class.php
│ │ ├── comment
│ │ │ └── manager
│ │ │ │ └── PageCommentManager.class.php
│ │ ├── condition
│ │ │ └── PagePageCondition.class.php
│ │ ├── content
│ │ │ ├── ContentPermissionHandler.class.php
│ │ │ └── type
│ │ │ │ ├── AbstractContentType.class.php
│ │ │ │ ├── AbstractDatabaseObjectListContentType.class.php
│ │ │ │ ├── AbstractSearchableContentType.class.php
│ │ │ │ ├── AbstractStructureContentType.class.php
│ │ │ │ ├── BoxContentType.class.php
│ │ │ │ ├── ColumnsContentType.class.php
│ │ │ │ ├── ContentContentType.class.php
│ │ │ │ ├── FileContentType.class.php
│ │ │ │ ├── GalleryContentType.class.php
│ │ │ │ ├── GoogleMapsContentType.class.php
│ │ │ │ ├── GroupContentType.class.php
│ │ │ │ ├── HeadlineContentType.class.php
│ │ │ │ ├── IContentType.class.php
│ │ │ │ ├── ISearchableContentType.class.php
│ │ │ │ ├── ImageContentType.class.php
│ │ │ │ ├── LinkContentType.class.php
│ │ │ │ ├── MenuContentType.class.php
│ │ │ │ ├── PHPContentType.class.php
│ │ │ │ ├── PollContentType.class.php
│ │ │ │ ├── RssContentType.class.php
│ │ │ │ ├── SlideshowContentType.class.php
│ │ │ │ ├── TabMenuContentType.class.php
│ │ │ │ ├── TemplateContentType.class.php
│ │ │ │ ├── TextContentType.class.php
│ │ │ │ ├── UserContentType.class.php
│ │ │ │ ├── WSIPImportContentType.class.php
│ │ │ │ ├── YoutubeContentType.class.php
│ │ │ │ └── graph
│ │ │ │ └── PieChartContentType.class.php
│ │ ├── counter
│ │ │ └── VisitCountHandler.class.php
│ │ ├── cronjob
│ │ │ └── PublicationCronjob.class.php
│ │ ├── event
│ │ │ └── listener
│ │ │ │ ├── CommentActionListener.class.php
│ │ │ │ ├── DailyCleanUpListener.class.php
│ │ │ │ ├── UserRenameListener.class.php
│ │ │ │ └── WSIPImportContentTypeListener.class.php
│ │ ├── exporter
│ │ │ ├── Fireball2Exporter.class.php
│ │ │ └── InfinitePortalExporter.class.php
│ │ ├── file
│ │ │ └── FilePermissionHandler.class.php
│ │ ├── importer
│ │ │ ├── ContentImporter.class.php
│ │ │ ├── FileCategoryImporter.class.php
│ │ │ ├── FileImporter.class.php
│ │ │ ├── PageACLImporter.class.php
│ │ │ ├── PageCommentImporter.class.php
│ │ │ ├── PageCommentResponseImporter.class.php
│ │ │ ├── PageImporter.class.php
│ │ │ └── StylesheetImporter.class.php
│ │ ├── option
│ │ │ ├── CMSPageMultiSelectOptionType.class.php
│ │ │ └── CMSPageSelectOptionType.class.php
│ │ ├── page
│ │ │ ├── PagePermissionHandler.class.php
│ │ │ ├── handler
│ │ │ │ ├── PagePageHandler.class.php
│ │ │ │ └── TPageOnlineLocationPageHandler.class.php
│ │ │ └── type
│ │ │ │ ├── AbstractPageType.class.php
│ │ │ │ ├── IPageType.class.php
│ │ │ │ ├── LinkPageType.class.php
│ │ │ │ └── PagePageType.class.php
│ │ ├── poll
│ │ │ └── ContentPollHandler.class.php
│ │ ├── search
│ │ │ ├── PageSearch.class.php
│ │ │ └── acp
│ │ │ │ └── PageACPSearchResultProvider.class.php
│ │ ├── sitemap
│ │ │ └── object
│ │ │ │ └── PageSitemapObject.class.php
│ │ ├── stat
│ │ │ ├── PageCommentStatDailyHandler.class.php
│ │ │ └── PageStatDailyHandler.class.php
│ │ ├── style
│ │ │ └── StylesheetCompiler.class.php
│ │ ├── template
│ │ │ └── EnvironmentTemplateEngine.class.php
│ │ ├── user
│ │ │ ├── activity
│ │ │ │ └── event
│ │ │ │ │ ├── PageCommentResponseUserActivityEvent.class.php
│ │ │ │ │ └── PageCommentUserActivityEvent.class.php
│ │ │ ├── notification
│ │ │ │ ├── event
│ │ │ │ │ ├── PageCommentResponseUserNotificationEvent.class.php
│ │ │ │ │ └── PageCommentUserNotificationEvent.class.php
│ │ │ │ └── object
│ │ │ │ │ └── type
│ │ │ │ │ ├── PageCommentResponseUserNotificationObjectType.class.php
│ │ │ │ │ └── PageCommentUserNotificationObjectType.class.php
│ │ │ └── object
│ │ │ │ └── watch
│ │ │ │ └── PageUserObjectWatch.class.php
│ │ └── worker
│ │ │ ├── ContentRebuildDataWorker.class.php
│ │ │ ├── FileRebuildDataWorker.class.php
│ │ │ └── PageRebuildDataWorker.class.php
│ └── util
│ │ ├── Browser.php
│ │ ├── BrowserUtil.class.php
│ │ └── PageUtil.class.php
└── style
│ ├── cms.scss
│ ├── grid.scss
│ └── presetClasses.scss
├── files_wcf
├── lib
│ └── system
│ │ ├── event
│ │ └── listener
│ │ │ └── FireballRouteListener.class.php
│ │ └── request
│ │ └── route
│ │ └── FireballRequestRoute.class.php
└── style
│ └── ui
│ └── fireball.scss
├── install.sql
├── language
├── de-informal.xml
├── de.xml
└── en.xml
├── package.xml
├── templates
├── __copyright.tpl
├── __pageAddButton.tpl
├── cmsFileBBCodeTag.tpl
├── contentAddDialog.tpl
├── contentNodeList.tpl
├── contentTypeList.tpl
├── fileContentType.tpl
├── galleryContentType.tpl
├── googleMapsContentType.tpl
├── headlineContentType.tpl
├── imageContentType.tpl
├── inlineEditor_boxContentType.tpl
├── inlineEditor_columnsContentType.tpl
├── inlineEditor_contentContentType.tpl
├── inlineEditor_databaseObjectListContentType.tpl
├── inlineEditor_fileContentType.tpl
├── inlineEditor_galleryContentType.tpl
├── inlineEditor_googleMapsContentType.tpl
├── inlineEditor_groupContentType.tpl
├── inlineEditor_headlineContentType.tpl
├── inlineEditor_imageContentType.tpl
├── inlineEditor_linkContentType.tpl
├── inlineEditor_menuContentType.tpl
├── inlineEditor_phpContentType.tpl
├── inlineEditor_pieChartContentType.tpl
├── inlineEditor_pollContentType.tpl
├── inlineEditor_rssContentType.tpl
├── inlineEditor_slideshowContentType.tpl
├── inlineEditor_tabMenuContentType.tpl
├── inlineEditor_templateContentType.tpl
├── inlineEditor_textContentType.tpl
├── inlineEditor_userContentType.tpl
├── inlineEditor_youtubeContentType.tpl
├── linkContentType.tpl
├── menuContentType.tpl
├── page.tpl
├── pageAddDialog.tpl
├── pageEditor.tpl
├── pieChartContentType.tpl
├── rssContentType.tpl
├── sitemap.tpl
├── slideshowContentType.tpl
├── sortableContentList.tpl
├── tabMenuContentType.tpl
└── userContentType.tpl
└── xml
├── aclOption.xml
├── acpMenu.xml
├── acpSearchProvider.xml
├── bbcode.xml
├── clipboardAction.xml
├── cronjob.xml
├── eventlistener.xml
├── menuItem.xml
├── objectType.xml
├── objectTypeDefinition.xml
├── option.xml
├── page.xml
├── templateListener.xml
├── userGroupOption.xml
└── userNotificationEvent.xml
/.github/javascript-syntax.json:
--------------------------------------------------------------------------------
1 | {
2 | "problemMatcher": [
3 | {
4 | "owner": "node -c",
5 | "pattern": [
6 | {
7 | "regexp": "^(./\\S+):(\\d+) - (.*)$",
8 | "file": 1,
9 | "line": 2,
10 | "message": 3
11 | }
12 | ]
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/.github/php-syntax.json:
--------------------------------------------------------------------------------
1 | {
2 | "problemMatcher": [
3 | {
4 | "owner": "php -l",
5 | "pattern": [
6 | {
7 | "regexp": "^\\s*(PHP\\s+)?([a-zA-Z\\s]+):\\s+(.*)\\s+in\\s+(\\S+)\\s+on\\s+line\\s+(\\d+)$",
8 | "file": 4,
9 | "line": 5,
10 | "message": 3
11 | }
12 | ]
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/.github/workflows/codestyle.yml:
--------------------------------------------------------------------------------
1 | name: Code Style
2 |
3 | on:
4 | push:
5 | pull_request:
6 |
7 | jobs:
8 | php:
9 | name: PHP CodeSniffer
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - run: git clone --branch=master --depth=1 --quiet git://github.com/WoltLab/WCF.git WCF
14 | - uses: chekalsky/phpcs-action@e269c2f264f400adcda7c6b24c8550302350d495
15 |
--------------------------------------------------------------------------------
/.github/workflows/javascript.yml:
--------------------------------------------------------------------------------
1 | name: JavaScript
2 |
3 | on:
4 | push:
5 | pull_request:
6 |
7 | jobs:
8 | syntax:
9 | name: "Check Syntax"
10 | runs-on: ubuntu-latest
11 | strategy:
12 | fail-fast: false
13 | steps:
14 | - name: Set up node.js
15 | uses: actions/setup-node@v1
16 | with:
17 | node-version: "12"
18 | - uses: actions/checkout@v2
19 | - run: echo "::add-matcher::.github/javascript-syntax.json"
20 | - name: Remove files to be ignored
21 | run: |
22 | true
23 | - run: |
24 | ! find . -type f -name '*.js' -exec node -c '{}' \; 2>&1 \
25 | |awk 'BEGIN {m=0} /(.js):[0-9]+$/ {m=1; printf "%s - ",$0} m==1 && /^SyntaxError/ { m=0; print }' \
26 | |sed "s@$(pwd)@.@" \
27 | |grep '^'
28 |
--------------------------------------------------------------------------------
/.github/workflows/php.yml:
--------------------------------------------------------------------------------
1 | name: PHP
2 |
3 | on:
4 | push:
5 | pull_request:
6 |
7 | jobs:
8 | syntax:
9 | name: "Check Syntax (${{ matrix.php }})"
10 | runs-on: ubuntu-latest
11 | strategy:
12 | fail-fast: false
13 | matrix:
14 | php:
15 | - '7.2'
16 | - '7.3'
17 | - '7.4'
18 | - '8.0'
19 | steps:
20 | - name: Set up PHP
21 | uses: shivammathur/setup-php@v2
22 | with:
23 | php-version: ${{ matrix.php }}
24 | - uses: actions/checkout@v2
25 | - run: echo "::add-matcher::.github/php-syntax.json"
26 | - name: Remove files to be ignored
27 | run: |
28 | true
29 | - run: |
30 | ! find . -type f -name '*.php' -exec php -l '{}' \; 2>&1 |grep -v '^No syntax errors detected'
31 |
--------------------------------------------------------------------------------
/.github/workflows/templates.yml:
--------------------------------------------------------------------------------
1 | name: Templates
2 |
3 | on:
4 | push:
5 | pull_request:
6 |
7 | jobs:
8 | sync:
9 | name: Check for differing synced templates.
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - run: sudo apt-get install -y jq diffutils
14 | - name: Check for differences in frontend
15 | run: |
16 | for template in $(jq -r '.templates[] + ".tpl"' < syncTemplates.json); do
17 | defaultDirectory="$(jq -r '.directories[0]' < syncTemplates.json)"
18 | for directory in $(jq -r '.directories[]' < syncTemplates.json); do
19 | diff -u $defaultDirectory/$template $directory/$template
20 | done
21 | done
22 | - name: Check for differences in acp
23 | run: |
24 | for template in $(jq -r '.acptemplates[] + ".tpl"' < syncTemplates.json); do
25 | defaultDirectory="$(jq -r '.directories[0]' < syncTemplates.json)"
26 | for directory in $(jq -r '.directories[]' < syncTemplates.json); do
27 | diff -u $defaultDirectory/$template $directory/$template
28 | done
29 | done
30 |
--------------------------------------------------------------------------------
/.phpcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 | | {lang}wcf.global.objectID{/lang} | 10 |{lang}wcf.global.title{/lang} | 11 |{lang}cms.acp.file.fileType{/lang} | 12 |{lang}cms.acp.file.downloads{/lang} | 13 | 14 | {event name='columnHeads'} 15 | 16 | 17 | 18 | {foreach from=$fileList item=file} 19 ||
---|---|---|---|---|---|
21 | | {@$file->fileID} | 22 |{@$file->getIconTag()} | 23 |{$file->getTitle()} | 24 |{$file->fileType} | 25 |{#$file->downloads} | 26 | 27 | {event name='columnRows'} 28 |
{@$file->getIconTag(96)}
7 | {/if} 8 |{lang}cms.acp.content.type.de.codequake.cms.content.type.group.description{/lang}
2 | -------------------------------------------------------------------------------- /acptemplates/headlineContentType.tpl: -------------------------------------------------------------------------------- 1 |{lang}wcf.global.success{/lang}
11 | {/if} 12 | 13 |{lang}cms.acp.page.import.info{/lang}
14 | 15 | 50 | 51 |{lang}wcf.global.objectID{/lang} | 13 |{lang}cms.acp.page.revision.action{/lang} | 14 |{lang}wcf.user.username{/lang} | 15 |{lang}cms.acp.page.revision.time{/lang} | 16 | 17 | {event name='columnHeads'} 18 ||
---|---|---|---|---|
24 | 25 | 26 | 27 | {event name='rowButtons'} 28 | | 29 |{@$revision->revisionID} | 30 |{lang}cms.acp.page.revision.action.{$revision->action}{/lang} | 31 |{@$revision->username} | 32 |{@$revision->time|time} | 33 | 34 | {event name='columns'} 35 |
{lang}wcf.global.noItems{/lang}
42 | {/if} 43 | -------------------------------------------------------------------------------- /acptemplates/pageSelectOptionType.tpl: -------------------------------------------------------------------------------- 1 |{lang}cms.acp.content.type.de.codequake.cms.content.type.slideshow.description{/lang}
2 | -------------------------------------------------------------------------------- /acptemplates/tabMenuContentType.tpl: -------------------------------------------------------------------------------- 1 |{lang}cms.acp.content.type.de.codequake.cms.content.type.tabmenu.description{/lang}
2 | -------------------------------------------------------------------------------- /acptemplates/templateContentType.tpl: -------------------------------------------------------------------------------- 1 |6 | {$file->filesize|filesize} 7 |
8 |{lang}cms.acp.content.type.de.codequake.cms.content.type.group.description{/lang}
2 | -------------------------------------------------------------------------------- /templates/inlineEditor_headlineContentType.tpl: -------------------------------------------------------------------------------- 1 |{lang}cms.acp.content.type.de.codequake.cms.content.type.slideshow.description{/lang}
2 | -------------------------------------------------------------------------------- /templates/inlineEditor_tabMenuContentType.tpl: -------------------------------------------------------------------------------- 1 |{lang}cms.acp.content.type.de.codequake.cms.content.type.tabmenu.description{/lang}
2 | -------------------------------------------------------------------------------- /templates/inlineEditor_templateContentType.tpl: -------------------------------------------------------------------------------- 1 |{$user->getUserTitle()}
34 |