mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge remote-tracking branch 'origin/3.0' into 3.1
Conflicts: javascript/DateField.js model/DataQuery.php model/Versioned.php tests/forms/RequirementsTest.php tests/model/DataObjectLazyLoadingTest.php view/Requirements.php
This commit is contained in:
commit
9856fcef21
@ -94,7 +94,6 @@ $locales = array(
|
||||
'it_IT' => 'Italian (Italy)',
|
||||
'ja_JP' => 'Japanese (Japan)',
|
||||
'km_KH' => 'Khmer (Cambodia)',
|
||||
'lc_XX' => 'LOLCAT',
|
||||
'lv_LV' => 'Latvian (Latvia)',
|
||||
'lt_LT' => 'Lithuanian (Lithuania)',
|
||||
'ms_MY' => 'Malay (Malaysia)',
|
||||
@ -1316,7 +1315,14 @@ TEXT;
|
||||
<requestFiltering>
|
||||
<hiddenSegments applyToWebDAV="false">
|
||||
<add segment="silverstripe-cache" />
|
||||
<add segment="vendor" />
|
||||
<add segment="composer.json" />
|
||||
<add segment="composer.lock" />
|
||||
</hiddenSegments>
|
||||
<fileExtensions allowUnlisted="true" >
|
||||
<add fileExtension=".ss" allowed="false"/>
|
||||
<add fileExtension=".yml" allowed="false"/>
|
||||
</fileExtensions>
|
||||
</requestFiltering>
|
||||
</security>
|
||||
<rewrite>
|
||||
|
@ -14,6 +14,11 @@ We provide a GUI for translations through [getlocalization.com](http://getlocali
|
||||
|
||||
For all modules listed there, we automatically import new master strings as they get committed to the various codebases, so you're always translating on the latest and greatest version.
|
||||
|
||||
Since getlocalization doesn't allow you to download your own work,
|
||||
we've created a simple downloader for this purpose at [http://translate.silverstripe.org/download.php](http://translate.silverstripe.org/download.php)
|
||||
([sample download of de.yml](http://translate.silverstripe.org/download.php?project=silverstripe_cms&locale=de)).
|
||||
Requests count against our own API user on getlocalization.com, so please use the script responsibly.
|
||||
|
||||
## FAQ
|
||||
|
||||
### How do I translate a module not listed on getlocalization?
|
||||
@ -123,4 +128,4 @@ you have specific comments on a translation.
|
||||
* [i18n](/topics/i18n): Developer-level documentation of Silverstripe's i18n capabilities
|
||||
* [translation-process](../translation-process): Information about managing translations for the core team and/or module maintainers.
|
||||
* [translatable](https://github.com/silverstripe/silverstripe-translatable): DataObject-interface powering the website-content translations
|
||||
* ["Translatable ModelAdmin" module](http://silverstripe.org/translatablemodeladmin-module/): An extension which allows translations of DataObjects inside ModelAdmin
|
||||
* ["Translatable ModelAdmin" module](http://silverstripe.org/translatablemodeladmin-module/): An extension which allows translations of DataObjects inside ModelAdmin
|
||||
|
@ -25,7 +25,7 @@ when the form is submitted.
|
||||
new RequiredFields(array('MyRequiredField'))
|
||||
);
|
||||
// Optional: Add a CSS class for custom styling
|
||||
$form->dataFieldByName('MyRequiredField)->addExtraClass('required');
|
||||
$form->dataFieldByName('MyRequiredField')->addExtraClass('required');
|
||||
return $form;
|
||||
}
|
||||
|
||||
@ -141,4 +141,4 @@ errors.
|
||||
|
||||
## Related
|
||||
|
||||
* Model Validation with [api:DataObject->validate()]
|
||||
* Model Validation with [api:DataObject->validate()]
|
||||
|
@ -92,13 +92,13 @@ class GridFieldFilterHeader implements GridField_HTMLProvider, GridField_DataMan
|
||||
}
|
||||
|
||||
$filterArguments = $state->Columns->toArray();
|
||||
$dataListClone = null;
|
||||
$dataListClone = clone($dataList);
|
||||
foreach($filterArguments as $columnName => $value ) {
|
||||
if($dataList->canFilterBy($columnName) && $value) {
|
||||
$dataListClone = $dataList->filter($columnName.':PartialMatch', $value);
|
||||
$dataListClone = $dataListClone->filter($columnName.':PartialMatch', $value);
|
||||
}
|
||||
}
|
||||
return ($dataListClone) ? $dataListClone : $dataList;
|
||||
return $dataListClone;
|
||||
}
|
||||
|
||||
public function getHTMLFragments($gridField) {
|
||||
|
@ -170,7 +170,7 @@ class i18nTextCollector extends Object {
|
||||
$fileList = $this->getFilesRecursive("$this->basePath/$module/code");
|
||||
} else if($module == FRAMEWORK_DIR || substr($module, 0, 7) == 'themes/') {
|
||||
// framework doesn't have the usual module structure, so we'll scan all subfolders
|
||||
$fileList = $this->getFilesRecursive("$this->basePath/$module");
|
||||
$fileList = $this->getFilesRecursive("$this->basePath/$module", null, null, '/\/(tests|dev)$/');
|
||||
}
|
||||
foreach($fileList as $filePath) {
|
||||
// exclude ss-templates, they're scanned separately
|
||||
@ -183,8 +183,7 @@ class i18nTextCollector extends Object {
|
||||
|
||||
// Search for calls in template files if these exists
|
||||
if(is_dir("$this->basePath/$module/")) {
|
||||
$dummy = array();
|
||||
$fileList = $this->getFilesRecursive("$this->basePath/$module/", $dummy, 'ss');
|
||||
$fileList = $this->getFilesRecursive("$this->basePath/$module/", null, 'ss');
|
||||
foreach($fileList as $index => $filePath) {
|
||||
$content = file_get_contents($filePath);
|
||||
// templates use their filename as a namespace
|
||||
@ -401,25 +400,30 @@ class i18nTextCollector extends Object {
|
||||
* @param string $folder base directory to scan (will scan recursively)
|
||||
* @param array $fileList Array to which potential files will be appended
|
||||
* @param string $type Optional, "php" or "ss"
|
||||
* @param string $folderExclude Regular expression matching folder names to exclude
|
||||
* @return array $fileList An array of files
|
||||
*/
|
||||
protected function getFilesRecursive($folder, &$fileList = null, $type = null) {
|
||||
protected function getFilesRecursive($folder, $fileList = null, $type = null, $folderExclude = null) {
|
||||
if(!$folderExclude) $folderExclude = '/\/(tests)$/';
|
||||
if(!$fileList) $fileList = array();
|
||||
$items = scandir($folder);
|
||||
$isValidFolder = (
|
||||
!in_array('_manifest_exclude', $items)
|
||||
&& !preg_match('/\/tests$/', $folder)
|
||||
&& !preg_match($folderExclude, $folder)
|
||||
);
|
||||
|
||||
if($items && $isValidFolder) foreach($items as $item) {
|
||||
if(substr($item,0,1) == '.') continue;
|
||||
if(substr($item,-4) == '.php' && (!$type || $type == 'php')) {
|
||||
$fileList[substr($item,0,-4)] = "$folder/$item";
|
||||
}
|
||||
else if(substr($item,-3) == '.ss' && (!$type || $type == 'ss')) {
|
||||
} else if(substr($item,-3) == '.ss' && (!$type || $type == 'ss')) {
|
||||
$fileList[$item] = "$folder/$item";
|
||||
} else if(is_dir("$folder/$item")) {
|
||||
$fileList = array_merge(
|
||||
$fileList,
|
||||
$this->getFilesRecursive("$folder/$item", $fileList, $type, $folderExclude)
|
||||
);
|
||||
}
|
||||
else if(is_dir("$folder/$item")) $this->getFilesRecursive("$folder/$item", $fileList, $type);
|
||||
}
|
||||
return $fileList;
|
||||
}
|
||||
|
@ -26,11 +26,11 @@
|
||||
}
|
||||
});
|
||||
|
||||
$('.field.date input.text,.fieldholder-small input.text.date').live('click', function() {
|
||||
$(document).on("click", "field.date input.text,.fieldholder-small input.text.date", function() {
|
||||
$(this).ssDatepicker();
|
||||
|
||||
if($(this).data('datepicker')) {
|
||||
$(this).datepicker('show');
|
||||
}
|
||||
});
|
||||
}(jQuery));
|
||||
}(jQuery));
|
||||
|
@ -488,7 +488,8 @@ ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE;
|
||||
/* NOP */
|
||||
},
|
||||
resetFields: function() {
|
||||
/* NOP */
|
||||
// Flush the tree drop down fields, as their content might get changed in other parts of the CMS, ie in Files and images
|
||||
this.find('.tree-holder').empty();
|
||||
}
|
||||
});
|
||||
|
||||
|
134
lang/lc_XX.yml
134
lang/lc_XX.yml
@ -1,134 +0,0 @@
|
||||
lc_XX:
|
||||
BasicAuth:
|
||||
ENTERINFO: "PLZ ENTR UR USERNAYM N A PASWORD."
|
||||
ERRORNOTADMIN: "DAT USR IZ NOT AN ADMINISTRATOR."
|
||||
ERRORNOTREC: "DAT USERNAYM / PASWORD ISNT RECOGNISD SUZ 2 HEAR"
|
||||
ChangePasswordEmail.ss:
|
||||
CHANGEPASSWORDTEXT1: "U CHANGD UR PASWORD 4"
|
||||
CHANGEPASSWORDTEXT2: "U CAN NAO USE TEH FOLLOWIN CREDENSHALS 2 LOG IN:"
|
||||
HELLO: "OHI! HOWRU2DAI?"
|
||||
ComplexTableField.ss:
|
||||
ADDITEM: "ADD"
|
||||
SORTASC: "SORT ASCENDIN"
|
||||
SORTDESC: "SORT DESCENDIN"
|
||||
ComplexTableField_popup.ss:
|
||||
NEXT: "NEXT (GOGOGO)"
|
||||
PREVIOUS: "PREVIOUZ"
|
||||
Date:
|
||||
DAY: "DAI"
|
||||
DAYS: "DAIZ"
|
||||
HOUR: "HOUR"
|
||||
HOURS: "HOURZ"
|
||||
MIN: "MIN"
|
||||
MINS: "MINZ"
|
||||
MONTH: "MONTH"
|
||||
MONTHS: "MONTHX"
|
||||
SEC: "SEC"
|
||||
SECS: "SECZ"
|
||||
YEAR: "YEAR"
|
||||
YEARS: "YEARZ"
|
||||
DateField:
|
||||
DropdownField:
|
||||
CHOOSE: "(pik)"
|
||||
EmailField:
|
||||
VALIDATION: "PLZ ENTR AN EMAIL ADDRES."
|
||||
ForgotPasswordEmail.ss:
|
||||
HELLO: "OHI! HOWRU2DAI?"
|
||||
Form:
|
||||
FIELDISREQUIRED: "%s IS REQUIRED"
|
||||
VALIDATIONCREDITNUMBER: "PLZ ENSURE U HAS ENTERD TEH %s CREDIT CARD NUMBR RITE CUZ WE NEED UR MONEY RITE NOW."
|
||||
VALIDATIONFAILED: "VALIDASHUN FAILD1!!1!!!!!!1 WAT NOW?"
|
||||
VALIDATIONNOTUNIQUE: "TEH VALUE ENTERD R NOT UNIQUE"
|
||||
VALIDATIONPASSWORDSDONTMATCH: "SRY BOSS, PASWORDZ DOAN MATCH"
|
||||
VALIDATIONPASSWORDSNOTEMPTY: "PASWORDZ CANT BE EMPTY DOOD"
|
||||
VALIDATIONSTRONGPASSWORD: "PASWORDZ MUST HAS AT LEAST WAN DIGIT AN WAN ALFANUMERIC CHARACTR."
|
||||
VALIDCURRENCY: "PLZ ENTR VALID CURRENCY. CUD U?"
|
||||
HtmlEditorField:
|
||||
BUTTONINSERTLINK: "INSERT LINK"
|
||||
BUTTONREMOVELINK: "REMOOV LINK"
|
||||
CSSCLASS: "ALIGNMENT / STYLE"
|
||||
CSSCLASSCENTER: "SENTERD, ON ITZ OWN."
|
||||
CSSCLASSLEFT: "ON TEH LEFT, WIF TEXT WRAPPIN AROUND."
|
||||
CSSCLASSRIGHT: "ON TEH RITE, WIF TEXT WRAPPIN AROUND."
|
||||
EMAIL: "EMAIL ADDRESZ"
|
||||
FILE: "FIEL"
|
||||
FOLDER: "TEH FOLDER"
|
||||
IMAGE: "INSERT PIKSHUR"
|
||||
IMAGEDIMENSIONS: "DIMENSHUNZ"
|
||||
IMAGEHEIGHTPX: "HEIGHT"
|
||||
IMAGEWIDTHPX: "WIDTH"
|
||||
LINK: "INSERT/EDIT LINK 4 HIGHLIGHTD TEXT"
|
||||
LINKDESCR: "LINK DESCRIPSHUN"
|
||||
LINKEMAIL: "EMAIL ADDRESZ"
|
||||
LINKEXTERNAL: "ANODER WEBSIET"
|
||||
LINKFILE: "DOWNLOAD FIEL"
|
||||
LINKINTERNAL: "PAEG ON DIS SIET"
|
||||
LINKOPENNEWWIN: "OPEN LINK IN NEW WINDOW?"
|
||||
LINKTO: "LINK 2"
|
||||
PAGE: "PAEG"
|
||||
URL: "URL N STUFF"
|
||||
Image_iframe.ss:
|
||||
TITLE: "PIKSHUR UPLOADIN IFRAME"
|
||||
Member:
|
||||
ADDRESS: "ADDRESZ"
|
||||
BUTTONCHANGEPASSWORD: "CHANGE PASWORD"
|
||||
BUTTONLOGIN: "LOG IN"
|
||||
BUTTONLOGINOTHER: "LOG IN AS SOMEONE ELSE"
|
||||
BUTTONLOSTPASSWORD: "I HAS LOST MAH PASWORD"
|
||||
CONFIRMNEWPASSWORD: "CUD U CONFIRM NEW PASWORD PLZ"
|
||||
CONFIRMPASSWORD: "CONFIRM PASWORD"
|
||||
CONTACTINFO: "SUM CONTACT STUFF"
|
||||
EMAIL: "EMAIL"
|
||||
EMAILSIGNUPINTRO1: "TEH LOLCAT SEZ OMG BIGTHX 2 U N U R A NEW MEMBR 4 NOW N UR DETAILZ R LISTD BELOW FOR THAT IF U WANTZ THEM IN SUM TIME"
|
||||
EMAILSIGNUPINTRO2: "U CAN LOGIN TO TEH WEBSITE USINS TEH CREDENTIALZ LISTED BELOW"
|
||||
EMAILSIGNUPSUBJECT: "TEH LOLCAT TANX U 4 SIGNINS UP"
|
||||
ERRORNEWPASSWORD: "UR HAS ENTERD UR NEW PASWORD DIFFERENTLY, PLZ TRY AGAIN, K?"
|
||||
ERRORPASSWORDNOTMATCH: "UR CURRENT PASWORD DOEZ NOT MATCH, PLZ TRY AGAIN, K?"
|
||||
ERRORWRONGCRED: "DAT IS NOT SEEMZ 2 BE TEH RITE E-MAIL ADDRES OR PASWORD. PLZ TRY AGAIN, K?"
|
||||
FIRSTNAME: "FURST NAYM"
|
||||
GREETING: "WELKUM"
|
||||
INTERFACELANG: "INTRFACELANGUEEG"
|
||||
LOGGEDINAS: "URE LOGGD IN AS %s."
|
||||
MOBILE: "MOBAIL"
|
||||
NAME: "NAYM"
|
||||
NEWPASSWORD: "NEW PASWORD"
|
||||
PASSWORD: "PASWORD"
|
||||
PHONE: "FONE"
|
||||
REMEMBERME: "REMEMBR ME NEXT TIME, K?"
|
||||
SUBJECTPASSWORDCHANGED: "UR PASWORD HAS BEEN CHANGD"
|
||||
SUBJECTPASSWORDRESET: "YORE PASWORD RESET LINK"
|
||||
SURNAME: "SHURNAYM"
|
||||
VALIDATIONMEMBEREXISTS: "THAR ALREADY EXISTZ MEMBR WIF DIS EMAILZ"
|
||||
WELCOMEBACK: "WELCUM BACK, %s"
|
||||
YOUROLDPASSWORD: "UR OLD PASWORD"
|
||||
MemberAuthenticator:
|
||||
TITLE: "E-MAIL N PASWORD"
|
||||
NumericField:
|
||||
VALIDATION: "'%s' IZ NOT NUMBR, ONLY NUMBERS CAN BE ACCEPTD 4 DIS FIELD"
|
||||
PhoneNumberField:
|
||||
VALIDATION: "PLZ ENTR VALID FONE NUMBR WE WUNT DISTURB 2 MUCH JUS A BIT"
|
||||
Security:
|
||||
ALREADYLOGGEDIN: "U SHALL NOT PASS!! IF U HAS ANOTHR AKOWNT DAT CAN ACCES DAT PAEG, U CAN LOG IN BELOW."
|
||||
BUTTONSEND: "SEND ME TEH PASWORD RESETZ LINK"
|
||||
CHANGEPASSWORDBELOW: "U CAN CHANGE UR PASWORD BELOW"
|
||||
CHANGEPASSWORDHEADER: "CHANGE UR PASWORD"
|
||||
ENTERNEWPASSWORD: "PLEEZ ENTR NEW PASSWORD. KTHX."
|
||||
ERRORPASSWORDPERMISSION: "U MUST BE LOGGD IN IN ORDR 2 CHANGE UR PASWORD!"
|
||||
LOGGEDOUT: "U HAS BEEN LOGGD OUT. IF U WUD LIEK 2 LOG IN AGAIN, ENTR UR CREDENTIALS BELOW."
|
||||
NOTEPAGESECURED: "TEH PAGE IZ SECURD. ENTR UR CREDENSHALS BELOW AN WE WILL SEND U RITE ALONG."
|
||||
NOTERESETPASSWORD: "ENTR UR E-MAIL ADDRES AN WE R GONA SEND U LINK WIF WHICH U CAN RESET UR PASWORD"
|
||||
PASSWORDSENTHEADER: "I R SENT TEH PASWORD RESET LINK TO '%s'"
|
||||
PASSWORDSENTTEXT: "THXALOT! I R SENT TEH PASWORD RESET LINK TO '%s'"
|
||||
SimpleImageField:
|
||||
NOUPLOAD: "DEREZ NO PIKSHUR UPLOADED"
|
||||
SiteTree:
|
||||
TABMAIN: "MAIN"
|
||||
TableField:
|
||||
ISREQUIRED: "IN %s '%s' IS KINDA REQUIRED"
|
||||
TableField.ss:
|
||||
ToggleCompositeField.ss:
|
||||
HIDE: "HAYD"
|
||||
SHOW: "SHOW"
|
||||
ToggleField:
|
||||
LESS: "lesz"
|
||||
MORE: "mur"
|
@ -282,12 +282,12 @@ class DataQuery {
|
||||
} else {
|
||||
$qualCol = "\"$parts[0]\"";
|
||||
}
|
||||
|
||||
// remove original sort
|
||||
unset($orderby[$k]);
|
||||
// add new columns sort
|
||||
$orderby[$qualCol] = $dir;
|
||||
|
||||
|
||||
// remove original sort
|
||||
unset($orderby[$k]);
|
||||
// add new columns sort
|
||||
$orderby[$qualCol] = $dir;
|
||||
|
||||
// To-do: Remove this if block once SQLQuery::$select has been refactored to store getSelect()
|
||||
// format internally; then this check can be part of selectField()
|
||||
$selects = $query->getSelect();
|
||||
|
@ -1244,7 +1244,7 @@ class Versioned_Version extends ViewableData {
|
||||
else $component = $component->relation($relation);
|
||||
} else {
|
||||
$component = $component->$relation();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -148,8 +148,7 @@ class Date extends DBField {
|
||||
*/
|
||||
public function FormatI18N($formattingString) {
|
||||
if($this->value) {
|
||||
$fecfrm = strftime($formattingString, strtotime($this->value));
|
||||
return utf8_encode($fecfrm);
|
||||
return strftime($formattingString, strtotime($this->value));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,7 @@ class HTMLText extends Text {
|
||||
}
|
||||
|
||||
// If it's got a content tag
|
||||
if(preg_match('/<(img|embed|object|iframe)[^>]*>/i', $this->value)) {
|
||||
if(preg_match('/<(img|embed|object|iframe|meta|source)[^>]*>/i', $this->value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -243,7 +243,7 @@ class DirectorTest extends SapphireTest {
|
||||
}
|
||||
|
||||
public function testForceSSLAlternateDomain() {
|
||||
Director::setBaseURL('/');
|
||||
Config::inst()->update('Director', 'alternate_base_url', '/');
|
||||
$_SERVER['REQUEST_URI'] = Director::baseURL() . 'admin';
|
||||
$output = Director::forceSSL(array('/^admin/'), 'secure.mysite.com');
|
||||
$this->assertEquals($output, 'https://secure.mysite.com/admin');
|
||||
|
@ -254,7 +254,7 @@ class RequirementsTest extends SapphireTest {
|
||||
$backend->delete_combined_files('RequirementsTest_bc.js');
|
||||
|
||||
$html = $backend->includeInHTML(false, self::$html_template);
|
||||
|
||||
|
||||
/* Javascript has correct path */
|
||||
$this->assertTrue((bool)preg_match('/src=".*\/RequirementsTest_a\.js\?m=\d\d+&test=1&test=2&test=3/', $html),
|
||||
'javascript has correct path');
|
||||
|
Loading…
Reference in New Issue
Block a user