From: Tim Otten Date: Tue, 1 Aug 2017 01:18:00 +0000 (-0700) Subject: CRM-21079, CRM-9683 - Display advisories about DATETIME/TIMESTAMP columns X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=d1930d0577fb58a86e763e555f0df8a0569abdb6;p=civicrm-core.git CRM-21079, CRM-9683 - Display advisories about DATETIME/TIMESTAMP columns --- diff --git a/CRM/Utils/Check/Component/Timestamps.php b/CRM/Utils/Check/Component/Timestamps.php new file mode 100644 index 0000000000..4e98293169 --- /dev/null +++ b/CRM/Utils/Check/Component/Timestamps.php @@ -0,0 +1,125 @@ +%s.%s (New sites default to TIMESTAMP in %s+)', $target['table'], $target['column'], $target['changed']); + } + else { + $problems[] = sprintf('%s.%s (Experimental suggestion)', $target['table'], $target['column']); + } + } + } + + $messages = array(); + if ($problems) { + $messages[] = new CRM_Utils_Check_Message( + __FUNCTION__ . md5(implode(',', $problems)), + '

' . + ts('This system includes some SQL columns with type "DATETIME". These may work better as "TIMESTAMP".') . + '

' . + '' . + '

' . + ts('For further discussion, please visit %1', array( + 1 => sprintf('%s', self::DOCTOR_WHEN, self::DOCTOR_WHEN), + )) . + '

', + ts('Timestamp Schema'), + \Psr\Log\LogLevel::NOTICE, + 'fa-clock-o' + ); + } + return $messages; + } + + /** + * @param string $table + * Ex: 'civicrm_log'. + * @param string $column + * Ex: 'modified_date'. + * @param string $expectType + * Ex: 'datetime' or 'timestamp'. + * @return bool + */ + public static function isFieldType($table, $column, $expectType) { + $result = FALSE; + $dao = CRM_Core_DAO::executeQuery('DESC ' . $table); + while ($dao->fetch()) { + if ($dao->Field === $column && strtolower($dao->Type) === $expectType) { + $result = TRUE; + } + } + $dao->free(); + return $result; + } + + public static function getConvertedTimestamps() { + return array( + array('table' => 'civicrm_cache', 'column' => 'created_date', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_cache', 'column' => 'expired_date', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_job', 'column' => 'last_run', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_bounce', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_confirm', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_delivered', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_forward', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_opened', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_reply', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_subscribe', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_trackable_url_open', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_event_unsubscribe', 'column' => 'time_stamp', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing', 'column' => 'created_date', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing', 'column' => 'scheduled_date', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing', 'column' => 'approval_date', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_abtest', 'column' => 'created_date', 'changed' => '4.7.20', 'default' => 'CURRENT_TIMESTAMP', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_job', 'column' => 'scheduled_date', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_job', 'column' => 'start_date', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_job', 'column' => 'end_date', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_spool', 'column' => 'added_at', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + array('table' => 'civicrm_mailing_spool', 'column' => 'removed_at', 'changed' => '4.7.20', 'jira' => 'CRM-9683'), + ); + } + +}