/**
  * Enforce valid date ranges.
  *
  * Borrowed from CRM_Report_Form_Contribute_Repeat::formRule().
  *
  * @param array $fields
  *   Fields from the form.
  * @param array $files
  *   Not used.
  * @param object $self
  *   Not used.
  *
  * @return array
  *   Array of errors.
  */
 public static function formRule($fields, $files, $self)
 {
     $errors = $checkDate = $errorCount = array();
     if ($fields['event_start_date1_relative'] == '0') {
         $checkDate['event_start_date1']['event_start_date1_from'] = $fields['event_start_date1_from'];
         $checkDate['event_start_date1']['event_start_date1_to'] = $fields['event_start_date1_to'];
     }
     if ($fields['event_start_date2_relative'] == '0') {
         $checkDate['event_start_date2']['event_start_date2_from'] = $fields['event_start_date2_from'];
         $checkDate['event_start_date2']['event_start_date2_to'] = $fields['event_start_date2_to'];
     }
     foreach ($checkDate as $date_range => $range_data) {
         foreach ($range_data as $key => $value) {
             if (CRM_Utils_Date::isDate($value)) {
                 $errorCount[$date_range][$key]['valid'] = 'true';
                 $errorCount[$date_range][$key]['is_empty'] = 'false';
             } else {
                 $errorCount[$date_range][$key]['valid'] = 'false';
                 $errorCount[$date_range][$key]['is_empty'] = 'true';
                 if (is_array($value)) {
                     foreach ($value as $v) {
                         if ($v) {
                             $errorCount[$date_range][$key]['is_empty'] = 'false';
                         }
                     }
                 } elseif (!isset($value)) {
                     $errorCount[$date_range][$key]['is_empty'] = 'false';
                 }
             }
         }
     }
     $errorText = ts("Select valid date range");
     foreach ($errorCount as $date_range => $error_data) {
         if ($error_data[$date_range . '_from']['valid'] == 'false' && $error_data[$date_range . '_to']['valid'] == 'false') {
             if ($error_data[$date_range . '_from']['is_empty'] == 'true' && $error_data[$date_range . '_to']['is_empty'] == 'true') {
                 $errors[$date_range . '_relative'] = $errorText;
             }
             if ($error_data[$date_range . '_from']['is_empty'] == 'false') {
                 $errors[$date_range . '_from'] = $errorText;
             }
             if ($error_data[$date_range . '_to']['is_empty'] == 'false') {
                 $errors[$date_range . '_to'] = $errorText;
             }
         } elseif ($error_data[$date_range . '_from']['valid'] == 'true' && $error_data[$date_range . '_to']['valid'] == 'false') {
             if ($error_data[$date_range . '_to']['is_empty'] == 'false') {
                 $errors[$date_range . '_to'] = $errorText;
             }
         } elseif ($error_data[$date_range . '_from']['valid'] == 'false' && $error_data[$date_range . '_to']['valid'] == 'true') {
             if ($error_data[$date_range . '_from']['is_empty'] == 'false') {
                 $errors[$date_range . '_from'] = $errorText;
             }
         }
     }
     return $errors;
 }
Example #2
0
 /**
  * @param $fields
  * @param $files
  * @param $self
  *
  * @return array
  */
 public static function formRule($fields, $files, $self)
 {
     $errors = $checkDate = $errorCount = array();
     $rules = array('id' => array('sort_name', 'display_name', 'addressee_display', 'contact_type', 'contact_sub_type', 'email', 'phone', 'state_province_id', 'country_id', 'city', 'street_address', 'supplemental_address_1', 'postal_code'), 'country_id' => array('country_id'), 'state_province_id' => array('country_id', 'state_province_id'), 'contribution_source' => array('contribution_source'), 'financial_type' => array('financial_type'));
     $idMapping = array('id' => ts('Contact'), 'exposed_id' => ts('Contact'), 'country_id' => ts('Country'), 'state_province_id' => ts('State/Province'), 'contribution_source' => ts('Contribution Source'), 'financial_type' => ts('Financial Type'), 'sort_name' => ts('Contact Name'), 'email' => ts('Email'), 'phone' => ts('Phone'));
     if (empty($fields['group_bys'])) {
         $errors['fields'] = ts('Please select at least one Group by field.');
     } elseif ((array_key_exists('contribution_source', $fields['group_bys']) || array_key_exists('contribution_type', $fields['group_bys'])) && count($fields['group_bys']) > 1) {
         $errors['fields'] = ts('You can not use other Group by with Financial type or Contribution source.');
     } else {
         foreach ($fields['fields'] as $fld_id => $value) {
             if (!($fld_id == 'total_amount1') && !($fld_id == 'total_amount2')) {
                 $found = FALSE;
                 $invlidGroups = array();
                 foreach ($fields['group_bys'] as $grp_id => $val) {
                     $validFields = $rules[$grp_id];
                     if (in_array($fld_id, $validFields)) {
                         $found = TRUE;
                     } else {
                         $invlidGroups[] = $idMapping[$grp_id];
                     }
                 }
                 if (!$found) {
                     $erorrGrps = implode(',', $invlidGroups);
                     $tempErrors[] = ts("Do not select field %1 with Group by %2.", array(1 => $idMapping[$fld_id], 2 => $erorrGrps));
                 }
             }
         }
         if (!empty($tempErrors)) {
             $errors['fields'] = implode("<br/>", $tempErrors);
         }
     }
     if (!empty($fields['gid_value']) && !empty($fields['group_bys'])) {
         if (!array_key_exists('id', $fields['group_bys'])) {
             $errors['gid_value'] = ts("Filter with Group only allow with group by Contact");
         }
     }
     if ($fields['receive_date1_relative'] == '0') {
         $checkDate['receive_date1']['receive_date1_from'] = $fields['receive_date1_from'];
         $checkDate['receive_date1']['receive_date1_to'] = $fields['receive_date1_to'];
     }
     if ($fields['receive_date2_relative'] == '0') {
         $checkDate['receive_date2']['receive_date2_from'] = $fields['receive_date2_from'];
         $checkDate['receive_date2']['receive_date2_to'] = $fields['receive_date2_to'];
     }
     foreach ($checkDate as $date_range => $range_data) {
         foreach ($range_data as $key => $value) {
             if (CRM_Utils_Date::isDate($value)) {
                 $errorCount[$date_range][$key]['valid'] = 'true';
                 $errorCount[$date_range][$key]['is_empty'] = 'false';
             } else {
                 $errorCount[$date_range][$key]['valid'] = 'false';
                 $errorCount[$date_range][$key]['is_empty'] = 'true';
                 if (is_array($value)) {
                     foreach ($value as $v) {
                         if ($v) {
                             $errorCount[$date_range][$key]['is_empty'] = 'false';
                         }
                     }
                 } elseif (!isset($value)) {
                     $errorCount[$date_range][$key]['is_empty'] = 'false';
                 }
             }
         }
     }
     $errorText = ts("Select valid date range");
     foreach ($errorCount as $date_range => $error_data) {
         if ($error_data[$date_range . '_from']['valid'] == 'false' && $error_data[$date_range . '_to']['valid'] == 'false') {
             if ($error_data[$date_range . '_from']['is_empty'] == 'true' && $error_data[$date_range . '_to']['is_empty'] == 'true') {
                 $errors[$date_range . '_relative'] = $errorText;
             }
             if ($error_data[$date_range . '_from']['is_empty'] == 'false') {
                 $errors[$date_range . '_from'] = $errorText;
             }
             if ($error_data[$date_range . '_to']['is_empty'] == 'false') {
                 $errors[$date_range . '_to'] = $errorText;
             }
         } elseif ($error_data[$date_range . '_from']['valid'] == 'true' && $error_data[$date_range . '_to']['valid'] == 'false') {
             if ($error_data[$date_range . '_to']['is_empty'] == 'false') {
                 $errors[$date_range . '_to'] = $errorText;
             }
         } elseif ($error_data[$date_range . '_from']['valid'] == 'false' && $error_data[$date_range . '_to']['valid'] == 'true') {
             if ($error_data[$date_range . '_from']['is_empty'] == 'false') {
                 $errors[$date_range . '_from'] = $errorText;
             }
         }
     }
     return $errors;
 }
 /**
  * @param $fields
  * @param $files
  * @param $self
  *
  * @return array
  */
 public static function formRule($fields, $files, $self)
 {
     $errors = $grouping = array();
     //check for searching combination of dispaly columns and
     //grouping criteria
     $ignoreFields = array('total_amount', 'sort_name');
     $errors = $self->customDataFormRule($fields, $ignoreFields);
     if (empty($fields['group_bys']['receive_date'])) {
         if (!empty($fields['receive_date_relative']) || CRM_Utils_Date::isDate($fields['receive_date_from']) || CRM_Utils_Date::isDate($fields['receive_date_to'])) {
             $errors['receive_date_relative'] = ts("Do not use filter on Date if group by Receive Date is not used ");
         }
     }
     if (empty($fields['fields']['total_amount'])) {
         foreach (array('total_count_value', 'total_sum_value', 'total_avg_value') as $val) {
             if (!empty($fields[$val])) {
                 $errors[$val] = ts("Please select the Amount Statistics");
             }
         }
     }
     return $errors;
 }
Example #4
0
 function upgrade($rev)
 {
     $upgrade =& new CRM_Upgrade_Form();
     //Run the SQL file
     $upgrade->processSQL($rev);
     // fix for CRM-5162
     // we need to encrypt all smtpPasswords if present
     require_once "CRM/Core/DAO/Preferences.php";
     $mailingDomain =& new CRM_Core_DAO_Preferences();
     $mailingDomain->find();
     while ($mailingDomain->fetch()) {
         if ($mailingDomain->mailing_backend) {
             $values = unserialize($mailingDomain->mailing_backend);
             if (isset($values['smtpPassword'])) {
                 require_once 'CRM/Utils/Crypt.php';
                 $values['smtpPassword'] = CRM_Utils_Crypt::encrypt($values['smtpPassword']);
                 $mailingDomain->mailing_backend = serialize($values);
                 $mailingDomain->save();
             }
         }
     }
     require_once "CRM/Core/DAO/Domain.php";
     $domain =& new CRM_Core_DAO_Domain();
     $domain->selectAdd();
     $domain->selectAdd('config_backend');
     $domain->find(true);
     if ($domain->config_backend) {
         $defaults = unserialize($domain->config_backend);
         if ($dateFormat = CRM_Utils_Array::value('dateformatQfDate', $defaults)) {
             $dateFormatArray = explode(" ", $dateFormat);
             //replace new date format based on previous month format
             //%b month name [abbreviated]
             //%B full month name ('January'..'December')
             //%m decimal number, 0-padded ('01'..'12')
             if ($dateFormat == '%b %d %Y') {
                 $defaults['dateInputFormat'] = 'mm/dd/yy';
             } else {
                 if ($dateFormat == '%d-%b-%Y') {
                     $defaults['dateInputFormat'] = 'dd-mm-yy';
                 } else {
                     if (in_array('%b', $dateFormatArray)) {
                         $defaults['dateInputFormat'] = 'M d, yy';
                     } else {
                         if (in_array('%B', $dateFormatArray)) {
                             $defaults['dateInputFormat'] = 'MM d, yy';
                         } else {
                             $defaults['dateInputFormat'] = 'mm/dd/yy';
                         }
                     }
                 }
             }
         }
         // %p - lowercase ante/post meridiem ('am', 'pm')
         // %P - uppercase ante/post meridiem ('AM', 'PM')
         if ($dateTimeFormat = CRM_Utils_Array::value('dateformatQfDatetime', $defaults)) {
             $defaults['timeInputFormat'] = 2;
             $dateTimeFormatArray = explode(" ", $dateFormat);
             if (in_array('%P', $dateTimeFormatArray) || in_array('%p', $dateTimeFormatArray)) {
                 $defaults['timeInputFormat'] = 1;
             }
             unset($defaults['dateformatQfDatetime']);
         }
         unset($defaults['dateformatQfDate']);
         unset($defaults['dateformatTime']);
         require_once "CRM/Core/BAO/Setting.php";
         CRM_Core_BAO_Setting::add($defaults);
     }
     $sql = "SELECT id, form_values FROM civicrm_report_instance";
     $instDAO = CRM_Core_DAO::executeQuery($sql);
     while ($instDAO->fetch()) {
         $fromVal = @unserialize($instDAO->form_values);
         foreach ((array) $fromVal as $key => $value) {
             if (strstr($key, '_relative')) {
                 $elementName = substr($key, 0, strlen($key) - strlen('_relative'));
                 $fromNamekey = $elementName . '_from';
                 $toNamekey = $elementName . '_to';
                 $fromNameVal = $fromVal[$fromNamekey];
                 $toNameVal = $fromVal[$toNamekey];
                 //check 'choose date range' is set
                 if ($value == '0') {
                     if (CRM_Utils_Date::isDate($fromNameVal)) {
                         $fromDate = CRM_Utils_Date::setDateDefaults(CRM_Utils_Date::format($fromNameVal));
                         $fromNameVal = $fromDate[0];
                     } else {
                         $fromNameVal = '';
                     }
                     if (CRM_Utils_Date::isDate($toNameVal)) {
                         $toDate = CRM_Utils_Date::setDateDefaults(CRM_Utils_Date::format($toNameVal));
                         $toNameVal = $toDate[0];
                     } else {
                         $toNameVal = '';
                     }
                 } else {
                     $fromNameVal = '';
                     $toNameVal = '';
                 }
                 $fromVal[$fromNamekey] = $fromNameVal;
                 $fromVal[$toNamekey] = $toNameVal;
                 continue;
             }
         }
         $fromVal = serialize($fromVal);
         $updateSQL = "UPDATE civicrm_report_instance SET form_values = '{$fromVal}' WHERE id = {$instDAO->id}";
         CRM_Core_DAO::executeQuery($updateSQL);
     }
     $customFieldSQL = "SELECT id, date_format FROM civicrm_custom_field WHERE data_type = 'Date' ";
     $customDAO = CRM_Core_DAO::executeQuery($customFieldSQL);
     while ($customDAO->fetch()) {
         $datePartKey = $dateParts = explode(CRM_Core_DAO::VALUE_SEPARATOR, $customDAO->date_format);
         $dateParts = array_combine($datePartKey, $dateParts);
         $year = CRM_Utils_Array::value('Y', $dateParts);
         $month = CRM_Utils_Array::value('M', $dateParts);
         $date = CRM_Utils_Array::value('d', $dateParts);
         $hour = CRM_Utils_Array::value('h', $dateParts);
         $minute = CRM_Utils_Array::value('i', $dateParts);
         $timeFormat = CRM_Utils_Array::value('A', $dateParts);
         $newDateFormat = 'mm/dd/yy';
         if ($year && $month && $date) {
             $newDateFormat = 'mm/dd/yy';
         } else {
             if (!$year && $month && $date) {
                 $newDateFormat = 'mm/dd';
             }
         }
         $newTimeFormat = 'NULL';
         if ($timeFormat && $hour == 'h') {
             $newTimeFormat = 1;
         } else {
             if ($hour) {
                 $newTimeFormat = 2;
             }
         }
         $updateSQL = "UPDATE civicrm_custom_field SET date_format = '{$newDateFormat}', time_format = {$newTimeFormat} WHERE id = {$customDAO->id}";
         CRM_Core_DAO::executeQuery($updateSQL);
     }
     $template =& CRM_Core_Smarty::singleton();
     $afterUpgradeMessage = '';
     if ($afterUpgradeMessage = $template->get_template_vars('afterUpgradeMessage')) {
         $afterUpgradeMessage .= "<br/><br/>";
     }
     $afterUpgradeMessage .= ts("Date Input Format has been set to %1 format. If you want to use a different format please check Administer CiviCRM &raquo; Global Settings &raquo; Date Formats.", array(1 => $defaults['dateInputFormat']));
     $template->assign('afterUpgradeMessage', $afterUpgradeMessage);
 }
Example #5
0
 function formRule(&$fields, &$files, $self)
 {
     require_once 'CRM/Utils/Date.php';
     $errors = $checkDate = $errorCount = array();
     $rules = array('id' => array('display_name', 'email', 'phone', 'state_province_id', 'country_id'), 'country_id' => array('country_id'), 'state_province_id' => array('country_id', 'state_province_id'), 'contribution_source' => array('contribution_source'), 'contribution_type' => array('contribution_type'));
     $idMapping = array('id' => 'Contact', 'country_id' => 'Country', 'state_province_id' => 'State/Province', 'contribution_source' => 'Contribution Source', 'contribution_type' => 'Contribution Type', 'display_name' => 'Contact Name', 'email' => 'Email', 'phone' => 'Phone');
     if (empty($fields['group_bys'])) {
         $errors['fields'] = ts('Please select at least one Group by field.');
     } else {
         if ((array_key_exists('contribution_source', $fields['group_bys']) || array_key_exists('contribution_type', $fields['group_bys'])) && count($fields['group_bys']) > 1) {
             $errors['fields'] = ts('You can not use other Group by with Contribution type or Contribution source.');
         } else {
             foreach ($fields['fields'] as $fld_id => $value) {
                 if (!($fld_id == 'total_amount1') && !($fld_id == 'total_amount2')) {
                     $found = false;
                     $invlidGroups = array();
                     foreach ($fields['group_bys'] as $grp_id => $val) {
                         $validFields = $rules[$grp_id];
                         if (in_array($fld_id, $validFields)) {
                             $found = true;
                         } else {
                             $invlidGroups[] = $idMapping[$grp_id];
                         }
                     }
                     if (!$found) {
                         $erorrGrps = implode(',', $invlidGroups);
                         $tempErrors[] = ts("Do not select field %1 with Group by %2.", array(1 => $idMapping[$fld_id], 2 => $erorrGrps));
                     }
                 }
             }
             if (!empty($tempErrors)) {
                 $errors['fields'] = implode("<br>", $tempErrors);
             }
         }
     }
     if (!empty($fields['gid_value']) && CRM_Utils_Array::value('group_bys', $fields)) {
         if (!array_key_exists('id', $fields['group_bys'])) {
             $errors['gid_value'] = ts("Filter with Group only allow with group by Contact");
         }
     }
     if ($fields['receive_date1_relative'] == '0') {
         $checkDate['receive_date1']['receive_date1_from'] = $fields['receive_date1_from'];
         $checkDate['receive_date1']['receive_date1_to'] = $fields['receive_date1_to'];
     }
     if ($fields['receive_date2_relative'] == '0') {
         $checkDate['receive_date2']['receive_date2_from'] = $fields['receive_date2_from'];
         $checkDate['receive_date2']['receive_date2_to'] = $fields['receive_date2_to'];
     }
     foreach ($checkDate as $date_range => $range_data) {
         foreach ($range_data as $key => $value) {
             if (CRM_Utils_Date::isDate($value)) {
                 $errorCount[$date_range][$key]['valid'] = 'true';
                 $errorCount[$date_range][$key]['is_empty'] = 'false';
             } else {
                 $errorCount[$date_range][$key]['valid'] = 'false';
                 $errorCount[$date_range][$key]['is_empty'] = 'true';
                 foreach ($value as $v) {
                     if ($v) {
                         $errorCount[$date_range][$key]['is_empty'] = 'false';
                     }
                 }
             }
         }
     }
     $errorText = ts("Select valid date range");
     foreach ($errorCount as $date_range => $error_data) {
         if ($error_data[$date_range . '_from']['valid'] == 'false' && $error_data[$date_range . '_to']['valid'] == 'false') {
             if ($error_data[$date_range . '_from']['is_empty'] == 'true' && $error_data[$date_range . '_to']['is_empty'] == 'true') {
                 $errors[$date_range . '_relative'] = $errorText;
             }
             if ($error_data[$date_range . '_from']['is_empty'] == 'false') {
                 $errors[$date_range . '_from'] = $errorText;
             }
             if ($error_data[$date_range . '_to']['is_empty'] == 'false') {
                 $errors[$date_range . '_to'] = $errorText;
             }
         } elseif ($error_data[$date_range . '_from']['valid'] == 'true' && $error_data[$date_range . '_to']['valid'] == 'false') {
             if ($error_data[$date_range . '_to']['is_empty'] == 'false') {
                 $errors[$date_range . '_to'] = $errorText;
             }
         } elseif ($error_data[$date_range . '_from']['valid'] == 'false' && $error_data[$date_range . '_to']['valid'] == 'true') {
             if ($error_data[$date_range . '_from']['is_empty'] == 'false') {
                 $errors[$date_range . '_from'] = $errorText;
             }
         }
     }
     return $errors;
 }
 static function formRule($fields, $files, $self)
 {
     $errors = $grouping = array();
     //check for searching combination of dispaly columns and
     //grouping criteria
     $ignoreFields = array('total_amount', 'sort_name');
     $errors = $self->customDataFormRule($fields, $ignoreFields);
     if (CRM_Utils_Array::value('receive_date', $fields['group_bys'])) {
         foreach ($self->_columns as $tableName => $table) {
             if (array_key_exists('fields', $table)) {
                 foreach ($table['fields'] as $fieldName => $field) {
                     if (CRM_Utils_Array::value($field['name'], $fields['fields']) && $fields['fields'][$field['name']] && in_array($field['name'], array('sort_name', 'postal_greeting_display', 'contribution_source', 'contribution_type'))) {
                         $grouping[] = $field['title'];
                     }
                 }
             }
         }
         if (!empty($grouping)) {
             $temp = 'and ' . implode(', ', $grouping);
             $errors['fields'] = ts("Please do not use combination of Receive Date %1", array(1 => $temp));
         }
     }
     if (!CRM_Utils_Array::value('receive_date', $fields['group_bys'])) {
         if (CRM_Utils_Array::value('receive_date_relative', $fields) || CRM_Utils_Date::isDate($fields['receive_date_from']) || CRM_Utils_Date::isDate($fields['receive_date_to'])) {
             $errors['receive_date_relative'] = ts("Do not use filter on Date if group by Receive Date is not used ");
         }
     }
     if (!CRM_Utils_Array::value('total_amount', $fields['fields'])) {
         foreach (array('total_count_value', 'total_sum_value', 'total_avg_value') as $val) {
             if (CRM_Utils_Array::value($val, $fields)) {
                 $errors[$val] = ts("Please select the Amount Statistics");
             }
         }
     }
     return $errors;
 }
Example #7
0
 static function getFromTo($relative, $from, $to)
 {
     require_once 'CRM/Utils/Date.php';
     if ($relative) {
         list($term, $unit) = explode('.', $relative);
         $dateRange = CRM_Utils_Date::relativeToAbsolute($term, $unit);
         $from = $dateRange['from'];
         $to = $dateRange['to'];
     }
     if (CRM_Utils_Date::isDate($from)) {
         $revDate = array_reverse($from);
         $from = CRM_Utils_Date::format($revDate);
     } else {
         $from = null;
     }
     if (CRM_Utils_Date::isDate($to)) {
         $revDate = array_reverse($to);
         $to = CRM_Utils_Date::format($revDate);
     } else {
         $to = null;
     }
     return array($from, $to);
 }