Commit adbdc356 authored by Sascha Schmidt's avatar Sascha Schmidt
Browse files

Merge branch 'develop' into 'assets'

Develop

See merge request !80
parents 8dead158 c7772e0a
Pipeline #2393 failed with stage
in 11 seconds
......@@ -31,7 +31,7 @@ build:
layout:
stage: layout
image: node:7
image: node:latest
before_script:
- cd html/typo3conf/ext/t3olayout/Build
script:
......@@ -89,12 +89,10 @@ dump-assets:
expire_in: '3d'
script:
- apk add rsync --no-cache
- rsync -ah -e "ssh -p 22191" --exclude=fileadmin/Import/ tthreeorgstage@stage.typo3.org:ci/shared/ ./assets/
- rsync -ah -e "ssh -p 22191" --exclude=import/ tthreeorgstage@stage.typo3.org:ci/shared/ ./assets/
- ssh -p22191 tthreeorgstage@stage.typo3.org "mysqldump -u${STAGE_DATABASE_USER} -p${STAGE_DATABASE_PASSWORD} -h127.0.0.1 tthreeorgstage | gzip -9 -c" > ./assets/db.sql.gz
dependencies:
when:
tags:
- proxy
only:
- assets
except:
......@@ -44,7 +44,7 @@ set('rsync', [
'filter' => [],
'filter-file' => false,
'filter-perdir' => false,
'flags' => 'az',
'flags' => 'avz',
'options' => ['delete'],
'timeout' => 300
]);
......@@ -53,6 +53,7 @@ set('keep_releases', 10);
serverList('/src/.gitlab-ci/deployer/servers.yml');
task('typo3', function () {
run('cd {{release_path}} && /opt/php/php70/bin/php bin/typo3cms install:generatepackagestates 0 1');
run('cd {{release_path}} && /opt/php/php70/bin/php bin/typo3cms database:updateschema');
run('cd {{release_path}} && /opt/php/php70/bin/php bin/typo3cms language:update');
run('cd {{release_path}} && /opt/php/php70/bin/php bin/typo3cms install:fixfolderstructure');
......
<?php
namespace Deployer;
set('bin/typo3cms', function () {
$releasePath = get('release_path');
$executablePath = "$releasePath/bin/typo3cms";
return $executablePath;
});
$consoleFunctions = [
'database:updateschema',
'language:update',
'install:fixfolderstructure',
'install:generatepackagestates',
'cache:flush'
];
foreach ($consoleFunctions as $consoleFunction) {
set("typo3:$consoleFunction:options", []);
task("typo3:$consoleFunction", function () use ($consoleFunction) {
$executable = get('bin/typo3cms');
$command = "$executable $consoleFunction";
$options = get("typo3:$consoleFunction:options");
if (is_array($options)) {
foreach ($options as $option) {
$command .= " --$option";
}
}
writeln(run($command));
})->desc(
"Direct wrapper for $consoleFunction. Supply options" .
" with set(\"typo3:$consoleFunction:options\", array([option [, ...]]))"
);
}
All documentation for this project can be found at:
https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-041/T3oRelaunch2017/Index.html#
\ No newline at end of file
{
"name": "t3o/typo3.org",
"description": "Website for TYPO3.org",
"minimum-stability": "stable",
"minimum-stability": "dev",
"prefer-stable": true,
"authors": [
{
"name": "t3o team",
......@@ -23,15 +24,19 @@
},
{
"type": "vcs",
"url": "https://git-t3o.typo3.org/t3o/t3o_news.git"
"url": "https://git-t3o.typo3.org/t3o/typo3_roadmap.git"
},
{
"type": "vcs",
"url": "https://github.com/georgringer/eventnews.git"
"url": "https://git-t3o.typo3.org/t3o/t3o_membership.git"
},
{
"type": "vcs",
"url": "https://git-t3o.typo3.org/t3o/randombanners.git"
}
],
"require": {
"typo3/cms": "8.7.1",
"typo3/cms": "^8.7",
"helhum/typo3-console": "^4.2",
"dmitryd/typo3-realurl": "^2.1",
"t3o/t3olayout": "dev-develop",
......@@ -39,7 +44,10 @@
"georgringer/news": "^6.0",
"apache-solr-for-typo3/solr": "^6.1",
"reelworx/rx-shariff": "^10.0",
"derhansen/sf_event_mgt": "^2.0"
"derhansen/sf_event_mgt": "dev-development",
"t3o/typo3_roadmap": "dev-master",
"t3o/t3o_membership": "dev-master",
"t3o/randombanners": "dev-master"
},
"config": {
"bin-dir": "bin"
......@@ -55,7 +63,8 @@
},
"autoload": {
"psr-4": {
"t3o\\t3olayout\\": "html/typo3conf/ext/t3olayout/Classes"
"T3o\\T3olayout\\": "html/typo3conf/ext/t3olayout/Classes",
"T3o\\T3orgLayout\\": "html/typo3conf/ext/t3org_layout/Classes"
}
}
}
/* TEAM */
Project Lead: Thomas Löffler
Twitter: @spooner_web
Site: https://spooner-web.de/
GitHub: https://github.com/spoonerWeb
From: Stuttgart, Germany
Project Owner: Stefan Busemann
Twitter: @in2code_stefan
Site: https://www.in2code.de/
From: Rosenheim, Germany
Developer: Viktor Ayzenshtadt
Twitter: @kynsuperhero
From: Hannover, Germany
Developer: Lukas Raschke
Twitter: @RaLu_92
From: Stuttgart, Germany
/* THANKS */
<role>: <name>
Twitter: @<yourname>
From: <city>, <state>, <country>
<role>: <name>
Twitter: @<yourname>
From: <city>, <state>, <country>
/* SITE */
Last update: 2017/07/14
Language: English
Doctype: HTML5
......@@ -21,6 +21,7 @@ return [
],
'EXT' => [
'extConf' => [
'ig_ldap_sso_auth' => 'a:18:{s:18:"checkConfiguration";s:1:"0";s:21:"throwExceptionAtLogin";s:1:"1";s:22:"forceLowerCaseUsername";s:1:"1";s:26:"enableBELDAPAuthentication";s:1:"0";s:17:"TYPO3BEGroupExist";s:1:"0";s:16:"TYPO3BEUserExist";s:1:"0";s:10:"BEfailsafe";s:1:"0";s:27:"TYPO3BEGroupsNotSynchronize";s:1:"0";s:12:"keepBEGroups";s:1:"0";s:11:"enableBESSO";s:1:"0";s:26:"enableFELDAPAuthentication";s:1:"1";s:31:"TYPO3FEDeleteUserIfNoLDAPGroups";s:1:"0";s:32:"TYPO3FEDeleteUserIfNoTYPO3Groups";s:1:"0";s:17:"TYPO3FEGroupExist";s:1:"0";s:16:"TYPO3FEUserExist";s:1:"0";s:27:"TYPO3FEGroupsNotSynchronize";s:1:"1";s:12:"keepFEGroups";s:1:"1";s:11:"enableFESSO";s:1:"0";}',
'rsaauth' => 'a:1:{s:18:"temporaryDirectory";s:0:"";}',
'rte_ckeditor' => 'a:0:{}',
'saltedpasswords' => 'a:2:{s:3:"BE.";a:4:{s:21:"saltedPWHashingMethod";s:41:"TYPO3\\CMS\\Saltedpasswords\\Salt\\PhpassSalt";s:11:"forceSalted";i:0;s:15:"onlyAuthService";i:0;s:12:"updatePasswd";i:1;}s:3:"FE.";a:5:{s:7:"enabled";i:1;s:21:"saltedPWHashingMethod";s:41:"TYPO3\\CMS\\Saltedpasswords\\Salt\\PhpassSalt";s:11:"forceSalted";i:0;s:15:"onlyAuthService";i:0;s:12:"updatePasswd";i:1;}}',
......@@ -28,9 +29,9 @@ return [
],
],
'FE' => [
'cHashIncludePageId' => true,
'debug' => true,
'loginSecurityLevel' => 'rsa',
'pageNotFound_handling' => '/index.php?id=404&no_cache=1',
],
'GFX' => [
'jpg_quality' => '80',
......
<?php
namespace T3o\T3orgLayout\Controller;
use ApacheSolrForTypo3\Solr\Domain\Site\SiteRepository;
use ApacheSolrForTypo3\Solr\Query;
use ApacheSolrForTypo3\Solr\Search;
use ApacheSolrForTypo3\Solr\Util;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\View\StandaloneView;
use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
use TYPO3\CMS\Frontend\Utility\EidUtility;
/**
* Search eid for solr
* url: index.php?eID=SolrSuggest&term=sdfsdfsdf
*
* @scope frontend
*/
class SolrInstantSearchController
{
/**
* @var Query
*/
protected $query = null;
/**
* @param string $term
*/
public static function suggest($term)
{
EidUtility::initTCA();
$GLOBALS['TSFE'] = GeneralUtility::makeInstance(
TypoScriptFrontendController::class,
$GLOBALS['TYPO3_CONF_VARS'],
0,
0
);
$GLOBALS['TSFE']->connectToDB();
$GLOBALS['TSFE']->initFEuser();
$GLOBALS['TSFE']->determineId();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->getConfigArray();
$siteRepository = GeneralUtility::makeInstance(SiteRepository::class);
$site = $siteRepository->getSiteByPageId($GLOBALS['TSFE']->id);
$searchTerm = GeneralUtility::_GP('term');
$solrConfiguration = Util::getSolrConfigurationFromPageId($GLOBALS['TSFE']->id, FALSE, $GLOBALS['TSFE']->sys_language_uid);
$solrConfiguration = $solrConfiguration->getSearchConfiguration();
$query = GeneralUtility::makeInstance(Query::class, $searchTerm . '*');
$query->setGrouping(true);
$query->addReturnField('title');
$query->addReturnField('url');
$query->addReturnField('score');
$query->addReturnField('uid');
$query->addGroupField('type');
$query->setNumberOfResultsPerGroup(5);
if (!empty($solrConfiguration['query.']['boostFunction'])) {
$query->setBoostFunction($solrConfiguration['query.']['boostFunction']);
}
if (!empty($solrConfiguration['query.']['boostQuery'])) {
$query->setBoostQuery($solrConfiguration['query.']['boostQuery']);
}
if (!empty($solrConfiguration['query.']['boostQuery.'])) {
$boostQueries = [];
$boostConfiguration = $solrConfiguration['query.']['boostQuery.'];
foreach ($boostConfiguration as $boostQuery) {
$boostQueries[] = $boostQuery;
}
$query->setBoostQuery($boostQueries);
}
$query->setSiteHashFilter($site->getDomain());
$solrSearch = new Search();
$search = $solrSearch->search($query, 0, 5);
$response = json_decode($search->getRawResponse());
/** @var StandaloneView $template */
$template = GeneralUtility::makeInstance(StandaloneView::class);
$template->setTemplatePathAndFilename(
ExtensionManagementUtility::extPath(
't3org_layout'
) . '/Resources/Private/Templates/Solr/Suggest.html'
);
$template->assign('response', $response);
$template->assign('searchTerm', urlencode($searchTerm));
echo $template->render();
}
}
\ No newline at end of file
<?php
namespace T3o\T3orgLayout\Domain\Model;
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Service\FlexFormService;
/**
* Event
*
* @author Torben Hansen <derhansen@gmail.com>
*/
class Event extends \DERHANSEN\SfEventMgt\Domain\Model\Event
{
/**
* @var string
*/
protected $skills;
/**
* @return array
*/
public function getSkills(): array
{
$flexFormService = GeneralUtility::makeInstance(FlexFormService::class);
return $flexFormService->convertFlexFormContentToArray($this->skills);
}
}
TCEMAIN.linkHandler.tx_news {
handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler
label = News
configuration {
table = tx_news_domain_model_news
storagePid = 179
hidePageTree = 1
}
scanAfter = page
}
tx_sfeventmgt.templateLayouts {
1 = Latest view
}
<?php
$GLOBALS['TCA']['tx_sfeventmgt_domain_model_event']['columns']['skills'] = [
'label' => 'LLL:EXT:t3org_layout/Resources/Private/Language/locallang.xlf:tx_t3org_layout.events.skills',
'config' => [
'type' => 'flex',
'ds' => [
'default' => '
<T3DataStructure>
<sheets>
<sSection>
<ROOT>
<TCEforms>
<sheetTitle>section</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<skills>
<title>Skills</title>
<type>array</type>
<section>1</section>
<el>
<skill>
<type>array</type>
<title>Skill</title>
<el>
<title>
<TCEforms>
<label>Title</label>
<config>
<type>input</type>
</config>
</TCEforms>
</title>
</el>
</skill>
</el>
</skills>
</el>
</ROOT>
</sSection>
</sheets>
</T3DataStructure>
',
],
],
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
'tx_sfeventmgt_domain_model_event',
'skills',
'',
'after:program'
);
# PID with fe_users
styles.content.loginform.pid = 178
# Page layout settings
tx_t3olayout.page.metamenuid = 7
tx_t3olayout.page.searchResultsPid = 184
tx_t3olayout.page.searchid = 184
tx_t3olayout.page.loginid = 187
# Styling settings
styles.content.textmedia.maxW = 1500
styles.content.textmedia.maxWInText = 1500
# Plugin persistence PIDs
plugin.tx_certifications.persistence.storagePid = 212
plugin.tx_t3omembership.persistence.storagePid = 227
plugin.tx_typo3roadmap.persistence.storagePid = 228
# Events settings
plugin.tx_sfeventmgt.settings.detailPid = 230
# News Settings
plugin.tx_news.settings.detailPid = 185
<INCLUDE_TYPOSCRIPT: source="DIR:EXT:t3org_layout/Configuration/TypoScript/Ext/" extensions="ts">
\ No newline at end of file
<INCLUDE_TYPOSCRIPT: source="DIR:EXT:t3org_layout/Configuration/TypoScript/Ext/" extensions="ts">
# Let table allow all classes
lib.parseFunc_RTE.externalBlocks.table.stdWrap.HTMLparser.tags.table.fixAttrib.class >
......@@ -16,4 +16,110 @@ plugin.tx_news {
1 = EXT:t3olayout/Resources/Private/Layouts/News/
}
}
}
\ No newline at end of file
settings {
list {
media {
image {
width = 480
height = 270c
}
dummyImage = typo3conf/ext/t3org_layout/Resources/Public/Images/News_Dummy.svg
}
}
defaultDetailPid = 185
}
}
config.recordLinks.tx_news {
typolink {
parameter = 185
additionalParams.data = field:uid
additionalParams.wrap = &tx_news_pi1[news]=|
useCacheHash = 1
}
}
# RSS feed with the latest 30 news (default)
[globalVar = TSFE:type = 100]
config {
disableAllHeaderCode = 1
xhtml_cleaning = none
admPanel = 0
debug = 0
disablePrefixComment = 1
metaCharset = utf-8
additionalHeaders.10.header = Content-Type:application/rss+xml;charset=utf-8
absRefPrefix = {$plugin.tx_news.rss.channel.link}
}
pageNewsRSS = PAGE
pageNewsRSS {
typeNum = 100
10 = USER
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = News
vendorName = GeorgRinger
pluginName = Pi1
switchableControllerActions {
News {
1 = list
}
}
settings < plugin.tx_news.settings
settings {
limit = 30
detailPid = 185
startingpoint = 179
format = xml
list.rss.channel {
title = typo3.org news
link = {$plugin.tx_news.rss.channel.link}
}
}
}
}
[global]
# RSS feed with all news elements, used by discourse integration
[globalVar = TSFE:type = 155]
config {
disableAllHeaderCode = 1
xhtml_cleaning = none
admPanel = 0
debug = 0
disablePrefixComment = 1
metaCharset = utf-8
additionalHeaders.10.header = Content-Type:application/rss+xml;charset=utf-8
absRefPrefix = {$plugin.tx_news.rss.channel.link}
}
pageNewsRSS = PAGE
pageNewsRSS {
typeNum = 155
10 = USER
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = News
vendorName = GeorgRinger
pluginName = Pi1
switchableControllerActions {
News {
1 = list
}
}
settings < plugin.tx_news.settings
settings {
detailPid = 185
startingpoint = 179
format = xml
list.rss.channel {
title = typo3.org news
link = {$plugin.tx_news.rss.channel.link}
}
}
}
}
[global]
plugin.tx_sfeventmgt {
view {
templateRootPaths {
100 = EXT:t3org_layout/Resources/Private/Extensions/SfEventMgt/Templates
}
partialRootPaths {
100 = EXT:t3org_layout/Resources/Private/Extensions/SfEventMgt/Partials
}
layoutRootPaths {
100 = EXT:t3org_layout/Resources/Private/Extensions/SfEventMgt/Layouts
}
}
settings.detailPid = {$plugin.tx_sfeventmgt.settings.detailPid}
}
plugin.tx_solr {
templateFiles {
results = EXT:t3olayout/Resources/Private/Templates/Solr/Results.html
pagebrowser = EXT:t3org_layout/Resources/Private/Templates/Solr/Pagebrowser.html
}
cssFiles {
results =
}
search {
query {
allowedSites = __all
}
}
}
<li class="event-calendar__day event-calendar__day{f:format.date(date: day.timestamp, format: 'N')} {f:if(condition: '{day.isCurrentMonth}', then: '', else: 'event-calendar__day-other-month')}{f:if(condition: '{day.events}', then: ' has-events')}{f:if(condition: '{day.isCurrentDay}', then: ' event-calendar__day-today')}">
<f:if condition="{day.events}">
<f:then>
<div class="event-calendar__day-date">{day.day}</div>
<f:for each="{day.events}" as="event">
<div class="event-calendar__day-event">