/** * Function to add or update segment * * @param array $params * @return array $result * @throws Exception when params empty * @access public * @static */ public static function add($params) { $result = array(); $preSegment = array(); if (empty($params)) { throw new Exception('Params can not be empty when adding or updating a segment', 9003); } $segment = new CRM_Contactsegment_BAO_Segment(); if (isset($params['id'])) { $segment->id = $params['id']; // pre hook if edit $op = "edit"; self::storeValues($segment, $preSegment); CRM_Utils_Hook::pre($op, 'Segment', $segment->id, $preSegment); $segment->find(true); } else { $op = "create"; } $fields = self::fields(); foreach ($params as $paramKey => $paramValue) { if (isset($fields[$paramKey])) { $segment->{$paramKey} = $paramValue; } } if (!$segment->name && $segment->label) { $segment->name = CRM_Contactsegment_Utils::generateNameFromLabel($segment->label); } $segment->save(); if (!$segment->is_active) { CRM_Contactsegment_BAO_Segment::setInactive($segment->id); } // post hook CRM_Utils_Hook::post($op, 'Segment', $segment->id, $segment); self::storeValues($segment, $result); return $result; }