Commit 79a4bb95 authored by Thomas Löffler's avatar Thomas Löffler
Browse files

Merge branch 'develop' into 'master'

Weekly Release 14-09-17

See merge request !205
parents 329a31ad a460ef2a
Pipeline #2236 passed with stages
in 2 minutes and 33 seconds
......@@ -2,44 +2,42 @@
# top-most EditorConfig file
root = true
charset = utf-8
# Get rid of whitespace to avoid diffs with a bunch of EOL changes
trim_trailing_whitespace = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
# CSS-Files
[*.css]
indent_style = tab
indent_style = space
indent_size = 4
# HTML-Files
[*.html]
indent_style = tab
indent_size = 2
indent_style = space
indent_size = 4
# TMPL-Files
[*.tmpl]
indent_style = tab
indent_style = space
indent_size = 4
# LESS-Files
[*.less]
indent_style = tab
# SCSS-Files
[*.scss]
indent_style = space
indent_size = 4
# JS-Files
[*.js]
indent_style = tab
indent_style = space
indent_size = 4
# JSON-Files
[*.json]
indent_style = tab
indent_style = space
indent_size = 4
# PHP-Files
......@@ -62,23 +60,27 @@ indent_size = 4
indent_style = space
indent_size = 2
# package.json or .travis.yml
[{package.json,.travis.yml}]
# package.json
# .travis.yml
# bower.json
[{package.json,.travis.yml,bower.json}]
indent_style = space
indent_size = 2
indent_size = 4
# TypoScript
[*.ts]
indent_style = space
indent_size = 2
indent_size = 4
[*.typoscript]
indent_style = space
indent_size = 4
# XLF-Files
[*.xlf]
indent_style = tab
indent_style = space
indent_size = 4
# SQL-Files
[*.sql]
indent_style = tab
indent_style = space
indent_size = 2
......@@ -1625,11 +1625,11 @@
},
{
"name": "t3o/t3olayout",
"version": "1.0.7",
"version": "1.0.9",
"source": {
"type": "git",
"url": "https://git-t3o.typo3.org/t3o/t3olayout.git",
"reference": "ff8cfafd888af207cd74c1b48915e94ff34b9926"
"reference": "30ce7a4a02711578191cf57e3ca11ec946715d6a"
},
"require": {
"typo3-ter/ig-ldap-sso-auth": "^3.2"
......@@ -1648,7 +1648,7 @@
"keywords": [
"TYPO3 CMS"
],
"time": "2017-08-28T21:32:11+00:00"
"time": "2017-09-14T10:29:21+00:00"
},
{
"name": "typo3-ter/ig-ldap-sso-auth",
......
......@@ -37,6 +37,7 @@ return [
'FE' => [
'debug' => true,
'loginSecurityLevel' => 'rsa',
'pageNotFound_handling' => '404'
],
'GFX' => [
'jpg_quality' => '80',
......
This diff is collapsed.
......@@ -14,4 +14,4 @@
*/
class tx_ter_exception extends Exception
{
}
\ No newline at end of file
}
......@@ -42,7 +42,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
// Make sure that we are executed only in TYPO3 context
if (!defined('TYPO3_MODE')) {
die ('Access denied.');
die('Access denied.');
}
// Error codes:
......@@ -135,25 +135,30 @@ class tx_ter_helper
public function getValidUser($accountData)
{
if (!strlen($accountData->username) || (!strlen($accountData->password))) {
throw new tx_ter_exception_unauthorized ('No user or no password submitted.', TX_TER_ERROR_GENERAL_NOUSERORPASSWORD);
throw new tx_ter_exception_unauthorized('No user or no password submitted.', TX_TER_ERROR_GENERAL_NOUSERORPASSWORD);
}
$res = $this->getDatabaseConnection()->exec_SELECTquery(
'*', 'fe_users',
'*',
'fe_users',
'username=' . $this->getDatabaseConnection()->fullQuoteStr($accountData->username, 'fe_users') . $this->getTyposcriptFrontendObject()->sys_page->enableFields('fe_users')
);
if ($row = $this->getDatabaseConnection()->sql_fetch_assoc($res)) {
if (!$this->userIsAlreadyLoggedIn($accountData) && !$this->ldapValidationSucceeded($accountData)) {
if (!$this->userIsAlreadyLoggedIn( $accountData
) && !$this->ldapValidationSucceeded($accountData)
) {
throw new tx_ter_exception_unauthorized ('Wrong password.', TX_TER_ERROR_GENERAL_WRONGPASSWORD);
}
} else {
throw new tx_ter_exception_unauthorized ('The specified user does not exist. You need to login first on extensions.typo3.org.', TX_TER_ERROR_GENERAL_USERNOTFOUND);
throw new tx_ter_exception_unauthorized('The specified user does not exist. You need to login first on extensions.typo3.org.', TX_TER_ERROR_GENERAL_USERNOTFOUND);
}
$row['admin'] = (intval($this->pluginObj->conf['adminFrontendUsergroupUid']) && GeneralUtility::inList(
$row['usergroup'], $this->pluginObj->conf['adminFrontendUsergroupUid']
));
$row['usergroup'],
$this->pluginObj->conf['adminFrontendUsergroupUid']
));
return $row;
}
......@@ -211,13 +216,18 @@ class tx_ter_helper
} else {
$success = false;
$res = $this->getDatabaseConnection()->exec_SELECTquery(
'*', 'fe_users', 'username=' . $this->getDatabaseConnection()->fullQuoteStr(
$accountData->username, 'fe_users'
'*',
'fe_users',
'username=' . $this->getDatabaseConnection()->fullQuoteStr(
$accountData->username,
'fe_users'
) . $GLOBALS['TSFE']->sys_page->enableFields('fe_users')
);
if ($row = $this->getDatabaseConnection()->sql_fetch_assoc($res)) {
if ($this->ldapValidationSucceeded($accountData)) {
if ($this->ldapValidationSucceeded( $accountData)
) {
$success = true;
}
}
......@@ -243,7 +253,9 @@ class tx_ter_helper
$isAvailable = true;
$res = $this->getDatabaseConnection()->exec_SELECTquery(
'extensionkey', 'tx_ter_extensionkeys', 'pid=' . intval($this->pluginObj->extensionsPID)
'extensionkey',
'tx_ter_extensionkeys',
'pid=' . intval($this->pluginObj->extensionsPID)
);
while ($row = $this->getDatabaseConnection()->sql_fetch_row($res)) {
if ($cleanedExtensionKey === str_replace('_', '', $row[0])) {
......@@ -287,7 +299,9 @@ class tx_ter_helper
public function getLatestVersionNumberOfExtension($extensionKey)
{
$res = $this->getDatabaseConnection()->exec_SELECTquery(
'version', 'tx_ter_extensions', 'extensionkey=' . $this->getDatabaseConnection()->fullQuoteStr($extensionKey, 'tx_ter_extensions') . '
'version',
'tx_ter_extensions',
'extensionkey=' . $this->getDatabaseConnection()->fullQuoteStr($extensionKey, 'tx_ter_extensions') . '
AND pid=' . intval($this->pluginObj->extensionsPID)
);
$latestVersion = false;
......@@ -333,22 +347,31 @@ class tx_ter_helper
GeneralUtility::devLog('writing extension index!', 'tx_ter_helper', 0);
if (!@is_dir($this->pluginObj->repositoryDir)) {
throw new tx_ter_exception_internalServerError(
'Extension repository directory does not exist.', TX_TER_ERROR_GENERAL_EXTREPDIRDOESNTEXIST
'Extension repository directory does not exist.',
TX_TER_ERROR_GENERAL_EXTREPDIRDOESNTEXIST
);
}
// Check if update of files requested
$updateRequestedFile = $this->pluginObj->repositoryDir . 'extensions.xml.gz.needsupdate';
if (@filemtime($updateRequestedFile) <= @filemtime($this->pluginObj->repositoryDir . 'extensions.xml.gz')) {
return;
}
$trackTime = microtime();
$res = $this->getDatabaseConnection()->exec_SELECTquery(
'uid,tstamp,extensionkey,version,title,description,state,reviewstate,category,downloadcounter,t3xfilemd5',
'tx_ter_extensions', '1'
'tx_ter_extensions',
'1'
);
// Read the extension records from the DB:
$extensionsAndVersionsArr = [];
$extensionsTotalDownloadsArr = [];
while ($row = $this->getDatabaseConnection()->sql_fetch_assoc($res)) {
$res2 = $this->getDatabaseConnection()->exec_SELECTquery(
'ownerusername,downloadcounter', 'tx_ter_extensionkeys',
'ownerusername,downloadcounter',
'tx_ter_extensionkeys',
'extensionkey=' . $this->getDatabaseConnection()->fullQuoteStr($row['extensionkey'], 'tx_ter_extensionkeys')
);
$extensionKeyRow = $this->getDatabaseConnection()->sql_fetch_assoc($res2);
......@@ -357,7 +380,8 @@ class tx_ter_helper
$res2 = $this->getDatabaseConnection()->exec_SELECTquery(
'lastuploaddate,uploadcomment,dependencies,composerinfo,authorname,authoremail,authorcompany',
'tx_ter_extensiondetails', 'extensionuid=' . (int)$row['uid']
'tx_ter_extensiondetails',
'extensionuid=' . (int)$row['uid']
);
$detailsRow = $this->getDatabaseConnection()->sql_fetch_assoc($res2);
if (is_array($detailsRow)) {
......@@ -366,23 +390,24 @@ class tx_ter_helper
$extensionsAndVersionsArr [$row['extensionkey']]['versions'][$row['version']] = $row;
}
// Prepare the DOM object:
$dom = new DOMDocument ('1.0', 'utf-8');
$dom = new DOMDocument('1.0', 'utf-8');
$dom->formatOutput = true;
$extensionsObj = $dom->appendChild(new DOMElement('extensions'));
// Create the nested XML structure:
foreach ($extensionsAndVersionsArr as $extensionKey => $extensionVersionsArr) {
$extensionObj = $extensionsObj->appendChild(new DOMElement('extension'));
$extensionObj->appendChild(new DOMAttr ('extensionkey', $extensionKey));
$extensionObj->appendChild(new DOMAttr('extensionkey', $extensionKey));
$extensionObj->appendChild(
new DOMElement (
'downloadcounter', $this->xmlentities($extensionsTotalDownloadsArr[$extensionKey])
new DOMElement(
'downloadcounter',
$this->xmlentities($extensionsTotalDownloadsArr[$extensionKey])
)
);
foreach ($extensionVersionsArr['versions'] as $versionNumber => $extensionVersionArr) {
$versionObj = $extensionObj->appendChild(new DOMElement('version'));
$versionObj->appendChild(new DOMAttr ('version', $versionNumber));
$versionObj->appendChild(new DOMAttr('version', $versionNumber));
$versionObj->appendChild(new DOMElement('title', $this->xmlentities($extensionVersionArr['title'])));
$versionObj->appendChild(new DOMElement('description', $this->xmlentities($extensionVersionArr['description'])));
$versionObj->appendChild(new DOMElement('state', $this->xmlentities($extensionVersionArr['state'])));
......@@ -390,13 +415,15 @@ class tx_ter_helper
$versionObj->appendChild(new DOMElement('category', $this->xmlentities($extensionVersionArr['category'])));
$versionObj->appendChild(
new DOMElement(
'downloadcounter', $this->xmlentities($extensionVersionArr['downloadcounter'])
'downloadcounter',
$this->xmlentities($extensionVersionArr['downloadcounter'])
)
);
$versionObj->appendChild(new DOMElement('lastuploaddate', $extensionVersionArr['lastuploaddate']));
$versionObj->appendChild(
new DOMElement(
'uploadcomment', $this->xmlentities($extensionVersionArr['uploadcomment'])
'uploadcomment',
$this->xmlentities($extensionVersionArr['uploadcomment'])
)
);
$versionObj->appendChild(new DOMElement('dependencies', $extensionVersionArr['dependencies']));
......@@ -405,12 +432,14 @@ class tx_ter_helper
$versionObj->appendChild(new DOMElement('authoremail', $this->xmlentities($extensionVersionArr['authoremail'])));
$versionObj->appendChild(
new DOMElement(
'authorcompany', $this->xmlentities($extensionVersionArr['authorcompany'])
'authorcompany',
$this->xmlentities($extensionVersionArr['authorcompany'])
)
);
$versionObj->appendChild(
new DOMElement(
'ownerusername', $this->xmlentities($extensionVersionArr['ownerusername'])
'ownerusername',
$this->xmlentities($extensionVersionArr['ownerusername'])
)
);
$versionObj->appendChild(new DOMElement('t3xfilemd5', $extensionVersionArr['t3xfilemd5']));
......@@ -423,7 +452,7 @@ class tx_ter_helper
// Write XML data to disk:
$fh = fopen($this->pluginObj->repositoryDir . 'new-extensions.xml.gz', 'wb');
if (!$fh) {
throw new tx_ter_exception_internalServerError (
throw new tx_ter_exception_internalServerError(
'Write error while writing extensions index file: ' . $this->pluginObj->repositoryDir . 'extensions.xml',
TX_TER_ERROR_UPLOADEXTENSION_WRITEERRORWHILEWRITINGEXTENSIONSINDEX
);
......@@ -442,14 +471,15 @@ class tx_ter_helper
@unlink($this->pluginObj->repositoryDir . 'extensions.xml.gz');
rename($this->pluginObj->repositoryDir . 'new-extensions.xml.gz', $this->pluginObj->repositoryDir . 'extensions.xml.gz');
GeneralUtility::writeFile(
$this->pluginObj->repositoryDir . 'extensions.md5', md5_file($this->pluginObj->repositoryDir . 'extensions.xml.gz')
$this->pluginObj->repositoryDir . 'extensions.md5',
md5_file($this->pluginObj->repositoryDir . 'extensions.xml.gz')
);
// Write serialized array file to disk:
$fh = fopen($this->pluginObj->repositoryDir . 'new-extensions.bin', 'wb');
if (!$fh) {
throw new tx_ter_exception_internalServerError (
throw new tx_ter_exception_internalServerError(
'Write error while writing extensions index file: ' . $this->pluginObj->repositoryDir . 'extensions.bin',
TX_TER_ERROR_UPLOADEXTENSION_WRITEERRORWHILEWRITINGEXTENSIONSINDEX
);
......@@ -459,7 +489,7 @@ class tx_ter_helper
if (!@filesize($this->pluginObj->repositoryDir . 'new-extensions.bin') > 0) {
GeneralUtility::devLog('Newly created extension index is zero bytes!', 'tx_ter_helper', 0);
throw new tx_ter_exception_internalServerError (
throw new tx_ter_exception_internalServerError(
'Write error while writing extensions index file (zero bytes): ' . $this->pluginObj->repositoryDir . 'extensions.bin',
TX_TER_ERROR_UPLOADEXTENSION_WRITEERRORWHILEWRITINGEXTENSIONSINDEX
);
......@@ -467,7 +497,6 @@ class tx_ter_helper
@unlink($this->pluginObj->repositoryDir . 'extensions.bin');
rename($this->pluginObj->repositoryDir . 'new-extensions.bin', $this->pluginObj->repositoryDir . 'extensions.bin');
}
/**
......
......@@ -36,7 +36,9 @@ class tx_ter_tcaLabel
}
$result = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow(
'extensionkey', 'tx_ter_extensions', 'uid=' . (int)$params['row']['uid']
'extensionkey',
'tx_ter_extensions',
'uid=' . (int)$params['row']['uid']
);
if (!empty($result['extensionkey'])) {
......@@ -45,5 +47,4 @@ class tx_ter_tcaLabel
$params['title'] = (int)$params['row']['uid'];
}
}
}
\ No newline at end of file
}
......@@ -73,7 +73,6 @@ class tx_ter_buildextensionindex
}
}
}
}
$pluginObj = new tx_ter_buildextensionindex();
......
......@@ -4,5 +4,3 @@
define('TYPO3_MOD_PATH', '../typo3conf/ext/ter/cli/');
$BACK_PATH = '../../../../typo3/';
$MCONF['name'] = '_CLI_ter';
?>
#! /usr/bin/php -q
<?php
die ('Access denied');
die('Access denied');
// Defining circumstances for CLI mode:
define('TYPO3_cliMode', true);
......@@ -12,7 +12,9 @@ require(dirname(PATH_thisScript) . '/' . $BACK_PATH . 'init.php');
$res = $TYPO3_DB->exec_SELECTquery(
'uid, uploadcomment', 'tx_ter_extensiondetails', '1'
'uid, uploadcomment',
'tx_ter_extensiondetails',
'1'
);
$counter = 0;
......@@ -24,4 +26,4 @@ while ($row = $TYPO3_DB->sql_fetch_assoc($res)) {
}
}
?>
\ No newline at end of file
?>
......@@ -10,7 +10,7 @@
* Keep off - never ever use this at TYPO3.org again ...
*/
die ('Better not ...');
die('Better not ...');
// Defining circumstances for CLI mode:
define('TYPO3_cliMode', true);
......@@ -35,7 +35,11 @@ $extensionsPID = 1320;
writeExtensionIndexfile();
$res = $TYPO3_DB->exec_SELECTquery(
'*', 'tx_extrep_keytable', 'hidden=0 AND deleted=0', '', 'extension_key ASC'
'*',
'tx_extrep_keytable',
'hidden=0 AND deleted=0',
'',
'extension_key ASC'
);
$startTime = time();
......@@ -45,7 +49,9 @@ while ($extensionKeyRow = $TYPO3_DB->sql_fetch_assoc($res)) {
$extensionKeyCounter++;
$res2 = $TYPO3_DB->exec_SELECTquery(
'username', 'fe_users', 'uid = ' . $extensionKeyRow['owner_fe_user']
'username',
'fe_users',
'uid = ' . $extensionKeyRow['owner_fe_user']
);
$feUsersRow = $TYPO3_DB->sql_fetch_assoc($res2);
$accountData['username'] = $feUsersRow['username'];
......@@ -53,7 +59,6 @@ while ($extensionKeyRow = $TYPO3_DB->sql_fetch_assoc($res)) {
echo('importing ' . str_pad($extensionKeyRow['extension_key'] . ' (' . $feUsersRow['username'] . ')', 40, ' '));
if (intval($extensionKeyRow['members_only'])) {
$newExtensionKeyRow = [
'tstamp' => $extensionKeyRow['tstamp'],
'crdate' => $extensionKeyRow['crdate'],
......@@ -67,12 +72,14 @@ while ($extensionKeyRow = $TYPO3_DB->sql_fetch_assoc($res)) {
];
$TYPO3_DB->exec_INSERTquery(
'tx_ter_extensionkeys', $newExtensionKeyRow
'tx_ter_extensionkeys',
$newExtensionKeyRow
);
} else {
$res2 = $TYPO3_DB->exec_SELECTquery(
'*', 'tx_extrep_repository', 'extension_uid = ' . $extensionKeyRow['uid']
'*',
'tx_extrep_repository',
'extension_uid = ' . $extensionKeyRow['uid']
);
$versionOfExtension = 1;
......@@ -118,17 +125,21 @@ function getExtensionDataFromRepositoryRow($extensionKeyRow, $extensionVersionRo
// *** DEPENDENCIES
$typo3VersionMax = $extensionVersionRow['emconf_TYPO3_version_max'] > 0 ? versionConv(
$extensionVersionRow['emconf_TYPO3_version_max'], 1
$extensionVersionRow['emconf_TYPO3_version_max'],
1
) : '';
$typo3VersionMin = $extensionVersionRow['emconf_TYPO3_version_min'] > 0 ? versionConv(
$extensionVersionRow['emconf_TYPO3_version_min'], 1
$extensionVersionRow['emconf_TYPO3_version_min'],
1
) : '';
$phpVersionMax = $extensionVersionRow['emconf_PHP_version_max'] > 0 ? versionConv(
$extensionVersionRow['emconf_PHP_version_max'], 1
$extensionVersionRow['emconf_PHP_version_max'],
1
) : '';
$phpVersionMin = $extensionVersionRow['emconf_PHP_version_min'] > 0 ? versionConv(
$extensionVersionRow['emconf_PHP_version_min'], 1
$extensionVersionRow['emconf_PHP_version_min'],
1
) : '';
$typo3VersionRange = (strlen($typo3VersionMin) && strlen($typo3VersionMax)) ? $typo3VersionMin . '-' . $typo3VersionMax : '';
......@@ -222,7 +233,7 @@ function writeExtensionAndIconFile(&$extensionData, $filesData)
foreach ($extensionData['technicalData']['dependencies'] as $dependencyArr) {
switch ($dependencyArr['extensionKey']) {
case 'typo3' :
case 'typo3':
$typo3Version = $dependencyArr['versionRange'];
break;
case 'php':
......@@ -304,14 +315,15 @@ function writeExtensionAndIconFile(&$extensionData, $filesData)
}
list ($majorVersion, $minorVersion, $devVersion) = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(
'.', $extensionData['version']
'.',
$extensionData['version']
);
$t3xFileName = strtolower(
$extensionData['extensionKey']
) . '_' . $majorVersion . '.' . $minorVersion . '.' . $devVersion . '.t3x';
$extensionData['extensionKey']
) . '_' . $majorVersion . '.' . $minorVersion . '.' . $devVersion . '.t3x';
$gifFileName = strtolower(
$extensionData['extensionKey']
) . '_' . $majorVersion . '.' . $minorVersion . '.' . $devVersion . '.gif';
$extensionData['extensionKey']
) . '_' . $majorVersion . '.' . $minorVersion . '.' . $devVersion . '.gif';
// Write the files
$fh = @fopen($fullPath . $t3xFileName, 'wb');
......@@ -340,9 +352,10 @@ function writeExtensionInfoToDB($accountData, $extensionData, $filesData, $exten
// Add extension key to key table if we are processing the first version of the extension:
if ($versionOfExtension == 1) {
$res = $TYPO3_DB->exec_SELECTquery(
'*', 'tx_extrep_keytable', 'extension_key = "' . $extensionData['extensionKey'] . '"'
'*',
'tx_extrep_keytable',
'extension_key = "' . $extensionData['extensionKey'] . '"'
);
$oldExtensionKeyRow = $TYPO3_DB->sql_fetch_assoc($res);
......@@ -359,7 +372,8 @@ function writeExtensionInfoToDB($accountData, $extensionData, $filesData, $exten
];
$TYPO3_DB->exec_INSERTquery(
'tx_ter_extensionkeys', $extensionKeyRow
'tx_ter_extensionkeys',
$extensionKeyRow
);
}
......@@ -424,7 +438,6 @@ function writeExtensionInfoToDB($accountData, $extensionData, $filesData, $exten
];
$TYPO3_DB->exec_INSERTquery('tx_ter_extensiondetails', $extensionDetailsRow);
}
/**
......@@ -490,15 +503,18 @@ function writeExtensionIndexfile()
global $TYPO3_DB;
if (!@is_dir($GLOBALS['repositoryDir'])) {
throw new tx_ter_exception_internalServerError (
'Extension repository directory does not exist.', TX_TER_ERROR_GENERAL_EXTREPDIRDOESNTEXIST
throw new tx_ter_exception_internalServerError(
'Extension repository directory does not exist.',
TX_TER_ERROR_GENERAL_EXTREPDIRDOESNTEXIST
);
}
$trackTime = microtime();
$res = $TYPO3_DB->exec_SELECTquery(
'uid,tstamp,extensionkey,version,title,description,state,category,t3xfilemd5', 'tx_ter_extensions', '1'
'uid,tstamp,extensionkey,version,title,description,state,category,t3xfilemd5',
'tx_ter_extensions',
'1'
);
// Read the extension records from the DB:
......@@ -506,14 +522,17 @@ function writeExtensionIndexfile()
$extensionsTotalDownloadsArr = [];
while ($row = $TYPO3_DB->sql_fetch_assoc($res)) {
$res2 = $TYPO3_DB->exec_SELECTquery(
'ownerusername,downloadcounter', 'tx_ter_extensionkeys', 'extensionkey="' . $row['extensionkey'] . '"'
'ownerusername,downloadcounter',
'tx_ter_extensionkeys',
'extensionkey="' . $row['extensionkey'] . '"'
);
$extensionKeyRow = $TYPO3_DB->sql_fetch_assoc($res2);
$row['ownerusername'] = $extensionKeyRow['ownerusername'];