+--------------------------------------------------------------------+
| CiviCRM version 4.6 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2014 |
+ | Copyright CiviCRM LLC (c) 2004-2015 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
| GNU Affero General Public License or the licensing of CiviCRM, |
| see the CiviCRM license FAQ at http://civicrm.org/licensing |
+--------------------------------------------------------------------+
-*/
+ */
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2014
+ * @copyright CiviCRM LLC (c) 2004-2015
* $Id$
*
*/
class CRM_Core_BAO_Website extends CRM_Core_DAO_Website {
/**
- * Takes an associative array and adds im
+ * Takes an associative array and adds im.
*
* @param array $params
* (reference ) an assoc array of name/value pairs.
*
* @return object
* CRM_Core_BAO_Website object on success, null otherwise
- * @static
*/
public static function add(&$params) {
$hook = empty($params['id']) ? 'create' : 'edit';
}
/**
- * Process website
+ * Process website.
*
* @param array $params
- * Associated array.
* @param int $contactID
* Contact id.
*
- * @param $skipDelete
- *
* @return void
- * @static
*/
- public static function create(&$params, $contactID, $skipDelete) {
- if (empty($params)) {
+ public static function create(&$params, $contactID) {
+
+ if (empty($params['website'])) {
return FALSE;
}
- $ids = self::allWebsites($contactID);
- foreach ($params as $key => $values) {
- $websiteId = CRM_Utils_Array::value('id', $values);
+ // CRM-10551
+ // Use updateBlankLocInfo to overwrite blanked values of matching type
+ $updateBlankLocInfo = CRM_Utils_Array::value('updateBlankLocInfo', $params, FALSE);
+
+ // Get websites submitted in the form, and already on the Contact
+ $submittedWebsites = $params['website'];
+ $existingWebsites = self::allWebsites($contactID);
+
+ // For each website submitted on the form
+ foreach ($submittedWebsites as $key => $submittedValue) {
+
+ // Check for matching IDs on submitted / existing data
+ $websiteId = CRM_Utils_Array::value('id', $submittedValue);
if ($websiteId) {
- if (array_key_exists($websiteId, $ids)) {
- unset($ids[$websiteId]);
+ if (array_key_exists($websiteId, $existingWebsites)) {
+ unset($existingWebsites[$websiteId]);
}
else {
- unset($values['id']);
+ unset($submittedValue['id']);
}
}
- if (empty($values['id']) &&
- is_array($ids) && !empty($ids)
- ) {
- foreach ($ids as $id => $value) {
- if (($value['website_type_id'] == $values['website_type_id']) && !empty($values['url'])) {
- $values['id'] = $id;
- unset($ids[$id]);
+ // Match up submitted values to existing ones, based on type
+ if (empty($submittedValue['id']) && !empty($existingWebsites)) {
+ foreach ($existingWebsites as $id => $existingValue) {
+ if ($existingValue['website_type_id'] == $submittedValue['website_type_id']) {
+ $submittedValue['id'] = $id;
+ unset($existingWebsites[$id]);
break;
}
}
}
- $values['contact_id'] = $contactID;
- if (!empty($values['url'])) {
- self::add($values);
+
+ $submittedValue['contact_id'] = $contactID;
+
+ // CRM-10551
+ // If there is a matching ID, the URL is empty and we are deleting blanked values
+ // Then remove it from the contact
+ if (!empty($submittedValue['id']) && empty($submittedValue['url']) && $updateBlankLocInfo) {
+ self::del(array($submittedValue['id']));
}
- }
- if ($skipDelete && !empty($ids)) {
- self::del(array_keys($ids));
+ // Otherwise, add the website if the URL isn't empty
+ elseif (!empty($submittedValue['url'])) {
+ self::add($submittedValue);
+ }
}
}
/**
- * Delete website
+ * Delete website.
*
* @param array $ids
* Website ids.
*
* @return void
- * @static
*/
public static function del($ids) {
$query = 'DELETE FROM civicrm_website WHERE id IN ( ' . implode(',', $ids) . ')';
* @param array $params
* @param $values
*
- * @return boolean
- * @static
+ * @return bool
*/
public static function &getValues(&$params, &$values) {
$websites = array();
}
/**
- * Get all the websites for a specified contact_id
+ * Get all the websites for a specified contact_id.
*
* @param int $id
* The contact id.
*
* @return array
* the array of website details
- * @static
*/
public static function allWebsites($id, $updateBlankLocInfo = FALSE) {
if (!$id) {
}
return $websites;
}
+
}