====== deutsches Datumsformat ====== ===== vtigerCRM 6.0/6.1 ===== **26.09.2014 UPDATE ** - VtigerCRM 6.1 Kompatibilität geprüft ==== 1. neuer Eintrag in die 'vtiger_date_format' Tabelle mit folgender Query: ==== INSERT INTO `vtiger_date_format` (`date_formatid`, `date_format`, `sortorderid`, `presence`) VALUES (4, 'dd.mm.yyyy', 0, 1); Mit dem Wert in der 3. Spalte könnt Ihr die Sortierung der Datumsformate anpassen. Da ich möchte, dass er direkt an oberster Stelle steht, habe ich eine 0 eingesetzt. ==== 2. /vtlib/Vtiger/Functions.php ==== === Function: currentUserJSDateFormat($localformat) === An die gut erkennbare if-Anweisung folgendes anhängen: elseif ($current_user->date_format == 'dd.mm.yyyy') { $dt_popup_fmt = "%d.%m.%Y"; } === Function: currentUserDisplayDate($value) === Innerhalb der Funktion finden: if ($dat_fmt == '') { $dat_fmt = 'dd-mm-yyyy'; } Den Abschnitt folgendermaßen anpassen: if ($dat_fmt == '') { $dat_fmt = 'dd.mm.yyyy'; } ==== 3. /include/fields/DateTimeField.php ==== === Funktion : __convertToDBFormat(...) [Line ~95] === folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar) elseif ($format == 'dd.mm.yyyy') { if(strpos($date, "-") !== false) { list($d, $m, $y) = explode('-', $date); } else { list($d, $m, $y) = explode('.', $date); } } An dieser Stelle wird leider ab und zu ein Format dd-mm-yyyy und die Einstellung des Users dd.mm.yyyy übergeben. Deshalb die zusätzlichen Zeilen, welche das nochmals prüfen. === Funktion: __convertToUserFormat((...) [Line ~157] === folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar) elseif ($format == 'dd.mm.yyyy') { $date[0] = $d . '.' . $m . '.' . $y; } === Funktion: convertToUserFormat(...) [Line ~139] === An dieser Stelle wird das Standard-Format des Vtigers auf dd.mm.yyyy gesetzt. Diese Einstellung ist besonders für die Erweiterung PDFMaker relevant, da diese für Datumsausgaben in PDF's genutzt wird, welche aus einem Workflow genutzt werden. Suchen: if(empty($format)) { $format = 'dd-mm-yyyy'; } ersetzen: if(empty($format)) { $format = 'dd.mm.yyyy'; } === Funktion: convertToDBFormat(...) [Line ~139] === Suchen: if(empty($format)) { $format = 'dd-mm-yyyy'; } ersetzen: if(empty($format)) { $format = 'dd.mm.yyyy'; } ==== 4. /include/ComboStrings.php ==== Um Line 304 steht die Zuweisung 'date_format_dom' => Array('dd-mm-yyyy'=>'dd-mm-yyyy', 'mm-dd-yyyy'=>'mm-dd-yyyy', 'yyyy-mm-dd'=>'yyyy-mm-dd' ), Daraus folgendes machen: 'date_format_dom' => Array('dd-mm-yyyy'=>'dd-mm-yyyy', 'dd.mm.yyyy'=>'dd.mm.yyyy', 'mm-dd-yyyy'=>'mm-dd-yyyy', 'yyyy-mm-dd'=>'yyyy-mm-dd' ), ==== 5. /modules/Calendar/RepeatEvents.php ==== === Function: formattime === Diesmal passend in die switch-Anweisung folgendes einfügen: case 'dd.mm.yyyy': $format_string = 'd.m.Y H:i'; break; ==== 6. /modules/Vtiger/helpers/Util.php ==== Diese Anpassung ist nur dann notwendig, wenn Ihr auch die Ausgaben der Form "Wed, Dec 18, 2013 at 15:50" anpassen möchtet, sodass am Ende "Wed, 18. Dec 2013 at 15:50 Uhr" erscheint. Diese Ausgabe richtet sich mit dieser Anpassung besser an der Spracheinstellung des vtigerCRM aus. Die Wochentage bzw. Monatsnamen werden sicherlich noch übersetzt, genau wie das kleine "at". == Function: formatDateTimeIntoDayString($dateTime) [~213] == Search: $formatedDate = vtranslate('LBL_'.date('D', $date)). ', ' .vtranslate('LBL_'.date('M', $date)). ' ' .date('d', $date). ', ' .date('Y', $date); //Adding time details $formatedDate .= ' ' .vtranslate('LBL_AT'). ' ' .$displayTime; Replace with: if($currentUser->get("language") == "de_de") { $formatedDate = vtranslate('LBL_'.date('D', $date)). ', ' .date('d', $date). '. ' .vtranslate('LBL_'.date('M', $date)). ' ' .date('Y', $date); //Adding time details $formatedDate .= ' um ' .$displayTime. ' Uhr'; } else { $formatedDate = vtranslate('LBL_'.date('D', $date)). ', ' .vtranslate('LBL_'.date('M', $date)). ' ' .date('d', $date). ', ' .date('Y', $date); //Adding time details $formatedDate .= ' ' .vtranslate('LBL_AT'). ' ' .$displayTime; } ==== 7. /resources/app.js ==== === Function: convertToDatePickerFormat(dateFormat) === Auch hier ist die if-Anweisung wieder gut zu erkennen, welche durch folgendes erweitert werden muss: else if (dateFormat == 'dd.mm.yyyy') { return 'd.m.Y'; } == Function: convertTojQueryDatePickerFormat == Search: var splitDateFormat = dateFormat.split('-'); Replace with: var dotMode = false; if(dateFormat.indexOf(".") != -1 && dateFormat.indexOf("-") == -1) { dotMode = true; } var splitDateFormat = dateFormat.split(dotMode?'.':'-'); Search: var joinedDateFormat = splitDateFormat.join('-'); Replace with: var joinedDateFormat = splitDateFormat.join(dotMode?'.':'-'); ==== 8. /layouts/vlayout/modules/Vtiger/resources/dashboards/Widget.js ==== === Funktion convertToDateRangePicketFormat === Wieder an das Ende der if-Bedingung einfügen: else if(userDateFormat == 'dd.mm.yyyy') { return 'dd.MM.yyyy'; } ==== 9. /resources/helper.js ==== === Function: getDateInstance : function(dateTime,dateFormat) [~Zeile 53] === Search: var splittedDate = dateComponent.split("-"); var splittedDateFormat = dateFormat.split("-"); Replace with: var dotMode = false; if(dateComponent.indexOf(".") != -1 && dateComponent.indexOf("-") == -1) { dotMode = true; } var splittedDate = dateComponent.split(dotMode?".":"-"); var splittedDateFormat = dateFormat.split(dotMode?".":"-");