Ejemplo n.º 1
0
 /**
  * Get the exportable fields for Activities
  *     
  * @return array array of exportable Fields
  * @access public
  */
 function &exportableFields()
 {
     if (!self::$_exportableFields) {
         if (!self::$_exportableFields) {
             self::$_exportableFields = array();
         }
         // TO DO, ideally we should retrieve all fields from xml, in this case since activity processing is done
         // my case hence we have defined fields as case_*
         //require_once 'CRM/Activity/DAO/Activity.php';
         //$fields = CRM_Activity_DAO_Acivity::export( );
         //set title to activity fields
         $fields = array('case_subject' => array('title' => ts('Activity Subject'), 'type' => CRM_Utils_Type::T_STRING), 'case_source_contact_id' => array('title' => ts('Activity Reporter'), 'type' => CRM_Utils_Type::T_STRING), 'case_recent_activity_date' => array('title' => ts('Activity Actual Date'), 'type' => CRM_Utils_Type::T_DATE), 'case_scheduled_activity_date' => array('title' => ts('Activity Scheduled Date'), 'type' => CRM_Utils_Type::T_DATE), 'case_recent_activity_type' => array('title' => ts('Activity Type'), 'type' => CRM_Utils_Type::T_INT), 'case_activity_status_id' => array('title' => ts('Activity Status'), 'type' => CRM_Utils_Type::T_INT), 'case_activity_duration' => array('title' => ts('Activity Duration'), 'type' => CRM_Utils_Type::T_INT), 'case_activity_medium_id' => array('title' => ts('Activity Medium'), 'type' => CRM_Utils_Type::T_INT), 'case_activity_details' => array('title' => ts('Activity Details'), 'type' => CRM_Utils_Type::T_TEXT), 'case_activity_is_auto' => array('title' => ts('Activity Auto-generated?'), 'type' => CRM_Utils_Type::T_BOOLEAN));
         // add custom data for case activities
         $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport('Activity'));
         self::$_exportableFields = $fields;
     }
     return self::$_exportableFields;
 }
/**
 * Create the custom fields used to record subject and body
 *
 */
function petitionemail_create_custom_fields()
{
    $group = 'petitionemail';
    $key = 'petitionemail_custom_message_fields';
    $ret = CRM_Core_BAO_Setting::getItem($group, $key);
    if (!empty($ret)) {
        // Ensure it exists
        $sql = "SELECT id FROM civicrm_custom_group WHERE id = %0";
        $dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($ret, 'Integer')));
        $dao->fetch();
        if ($dao->N == 1) {
            return $ret;
        }
        // Delete this variable - probably the user deleted the profile not knowing
        // what it was used for.
        $sql = "DELETE FROM civicrm_setting WHERE group_name = %0 AND name = %1";
        $params = array(0 => array($group, 'String'), 1 => array($key, 'String'));
        CRM_Core_DAO::executeQuery($sql, $params);
    }
    // Get the value of the petition activity id so our custom group
    // will only extend Activities of type Petition.
    $sql = "SELECT v.value FROM civicrm_option_group g JOIN \n    civicrm_option_value v ON g.id = v.option_group_id WHERE g.name = 'activity_type'\n    AND v.name = 'petition'";
    $dao = CRM_Core_DAO::executeQuery($sql);
    $dao->fetch();
    if ($dao->N > 0) {
        $activity_type_id = $dao->value;
        $params = array('version' => 3, 'name' => 'PetitionEmailMessageFields', 'title' => 'Petition Email Message Fields', 'extends' => 'Activity', 'extends_entity_column_value' => array($activity_type_id), 'style' => 'Inline', 'collapse_display' => 1, 'is_active' => 1, 'api.custom_field.create' => array(array('custom_group_id' => '$value.id', 'label' => 'Custom Message', 'name' => 'Petition_Email_Custom_Message', 'data_type' => 'Memo', 'html_type' => 'TextArea', 'is_required' => 0, 'is_searchable' => 0, 'is_active' => 1), array('custom_group_id' => '$value.id', 'label' => 'Custom Subject', 'name' => 'Petition_Email_Custom_Subject', 'data_type' => 'String', 'html_type' => 'Text', 'is_required' => 0, 'is_searchable' => 0, 'is_active' => 1)));
        try {
            $results = civicrm_api3('CustomGroup', 'create', $params);
        } catch (CiviCRM_API3_Exception $e) {
            $session = CRM_Core_Session::singleton();
            $session->setStatus(ts("Error creating the petition custom fields."));
            $session->setStatus($e->getMessage());
            return FALSE;
        }
        $values = array_pop($results['values']);
        $id = $values['id'];
        CRM_Core_BAO_Setting::setItem($id, $group, $key);
        // Start complex process for clearing the cache of available fields.
        // We need to clear the cache so that when we create a profile that
        // depends on these fields, we won't get an error that it's an invalid field.
        // First clear the static array of exportableFields which is used to determine
        // if a field is valid when being used in a profile.
        CRM_Activity_BAO_Activity::$_exportableFields = NULL;
        // Next clear the cache so we don't pull from an already populated cache.
        CRM_Utils_System::flushCache();
        // Lastly, we have to call the function that is called to validate fields,
        // but specifying that we want to force the re-fecthing of fields to unset
        // yet another static variable.
        CRM_Core_BAO_UFField::getAvailableFieldsFlat(TRUE);
        return $id;
    }
    return FALSE;
}