本文整理汇总了PHP中CRM_Contact_BAO_SavedSearch类的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Contact_BAO_SavedSearch类的具体用法?PHP CRM_Contact_BAO_SavedSearch怎么用?PHP CRM_Contact_BAO_SavedSearch使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CRM_Contact_BAO_SavedSearch类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: details
static function details($csID, $ssID = null, $gID = null)
{
$error = array(null, null, null);
if (!$csID && !$ssID && !$gID) {
return $error;
}
$customSearchID = $csID;
$formValues = array();
if ($ssID || $gID) {
if ($gID) {
$ssID = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $gID, 'saved_search_id');
}
$formValues = CRM_Contact_BAO_SavedSearch::getFormValues($ssID);
$customSearchID = CRM_Utils_Array::value('customSearchID', $formValues);
}
if (!$customSearchID) {
return $error;
}
// check that the csid exists in the db along with the right file
// and implements the right interface
require_once 'CRM/Core/OptionGroup.php';
$customSearchClass = CRM_Core_OptionGroup::getLabel('custom_search', $customSearchID);
if (!$customSearchClass) {
return $error;
}
$customSearchFile = str_replace('_', DIRECTORY_SEPARATOR, $customSearchClass) . '.php';
$error = (include_once $customSearchFile);
if ($error == false) {
CRM_Core_Error::fatal('Custom search file: ' . $customSearchFile . ' does not exist. Please verify your custom search settings in CiviCRM administrative panel.');
}
return array($customSearchID, $customSearchClass, $formValues);
}
示例2: testGetFormValues
/**
* Test fixValues function.
*
* @dataProvider getSavedSearches
*/
public function testGetFormValues($formValues, $expectedResult, $searchDescription)
{
CRM_Core_DAO::executeQuery("INSERT INTO civicrm_saved_search (form_values) VALUES('" . serialize($formValues) . "')");
$result = CRM_Contact_BAO_SavedSearch::getFormValues(CRM_Core_DAO::singleValueQuery('SELECT LAST_INSERT_ID()'));
$this->assertEquals(array('membership_type_id', 'membership_status_id'), array_keys($result));
foreach ($result as $key => $value) {
$this->assertEquals($expectedResult, $value, 'failure on set ' . $searchDescription);
}
}
示例3: details
/**
* @param int $csID
* @param int $ssID
* @param int $gID
*
* @return array
* @throws Exception
*/
public static function details($csID, $ssID = NULL, $gID = NULL)
{
$error = array(NULL, NULL, NULL);
if (!$csID && !$ssID && !$gID) {
return $error;
}
$customSearchID = $csID;
$formValues = array();
if ($ssID || $gID) {
if ($gID) {
$ssID = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $gID, 'saved_search_id');
}
$formValues = CRM_Contact_BAO_SavedSearch::getFormValues($ssID);
$customSearchID = CRM_Utils_Array::value('customSearchID', $formValues);
}
if (!$customSearchID) {
return $error;
}
// check that the csid exists in the db along with the right file
// and implements the right interface
$customSearchClass = CRM_Core_OptionGroup::getLabel('custom_search', $customSearchID);
if (!$customSearchClass) {
return $error;
}
$ext = CRM_Extension_System::singleton()->getMapper();
if (!$ext->isExtensionKey($customSearchClass)) {
$customSearchFile = str_replace('_', DIRECTORY_SEPARATOR, $customSearchClass) . '.php';
} else {
$customSearchFile = $ext->keyToPath($customSearchClass);
$customSearchClass = $ext->keyToClass($customSearchClass);
}
$error = (include_once $customSearchFile);
if ($error == FALSE) {
CRM_Core_Error::fatal('Custom search file: ' . $customSearchFile . ' does not exist. Please verify your custom search settings in CiviCRM administrative panel.');
}
return array($customSearchID, $customSearchClass, $formValues);
}
示例4: postProcess
/**
* The post processing of the form gets done here.
*
* Key things done during post processing are
* - check for reset or next request. if present, skip post procesing.
* - now check if user requested running a saved search, if so, then
* the form values associated with the saved search are used for searching.
* - if user has done a submit with new values the regular post submissing is
* done.
*
* The processing consists of using a Selector / Controller framework for getting the
* search results.
*/
public function postProcess()
{
if ($this->_done) {
return;
}
$this->_done = TRUE;
if (!empty($_POST)) {
$this->_formValues = $this->controller->exportValues($this->_name);
foreach (array('activity_type_id', 'status_id', 'activity_subject') as $element) {
$value = CRM_Utils_Array::value($element, $this->_formValues);
if ($value) {
if (is_array($value)) {
if ($element == 'status_id') {
unset($this->_formValues[$element]);
$this->_formValues['activity_' . $element] = $value;
}
} else {
$this->_formValues[$element] = array('LIKE' => "%{$value}%");
}
}
}
}
$this->fixFormValues();
if (isset($this->_ssID) && empty($_POST)) {
// if we are editing / running a saved search and the form has not been posted
$this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID);
}
// We don't show test records in summaries or dashboards
if (empty($this->_formValues['activity_test']) && $this->_force) {
$this->_formValues["activity_test"] = 0;
}
CRM_Core_BAO_CustomValue::fixCustomFieldValue($this->_formValues);
$this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$this->set('formValues', $this->_formValues);
$this->set('queryParams', $this->_queryParams);
$buttonName = $this->controller->getButtonName();
if ($buttonName == $this->_actionButtonName) {
// check actionName and if next, then do not repeat a search, since we are going to the next page
// hack, make sure we reset the task values
$stateMachine = $this->controller->getStateMachine();
$formName = $stateMachine->getTaskFormName();
$this->controller->resetPage($formName);
return;
}
$sortID = NULL;
if ($this->get(CRM_Utils_Sort::SORT_ID)) {
$sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), $this->get(CRM_Utils_Sort::SORT_DIRECTION));
}
$this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$selector = new CRM_Activity_Selector_Search($this->_queryParams, $this->_action, NULL, $this->_single, $this->_limit, $this->_context);
$selector->setKey($this->controller->_key);
$prefix = NULL;
if ($this->_context == 'basic' || $this->_context == 'user') {
$prefix = $this->_prefix;
}
$controller = new CRM_Core_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), $sortID, CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::SESSION, $prefix);
$controller->setEmbedded(TRUE);
$query =& $selector->getQuery();
if ($this->_context == 'user') {
$query->setSkipPermission(TRUE);
}
$controller->run();
}
示例5: from
function from()
{
//define table name
$randomNum = md5(uniqid());
$this->_tableName = "civicrm_temp_custom_{$randomNum}";
//block for Group search
$smartGroup = array();
if ($this->_groups || $this->_allSearch) {
require_once 'CRM/Contact/DAO/Group.php';
$group = new CRM_Contact_DAO_Group();
$group->is_active = 1;
$group->find();
while ($group->fetch()) {
$allGroups[] = $group->id;
if ($group->saved_search_id) {
$smartGroup[$group->saved_search_id] = $group->id;
}
}
$includedGroups = implode(',', $allGroups);
if (!empty($this->_includeGroups)) {
$iGroups = implode(',', $this->_includeGroups);
} else {
//if no group selected search for all groups
$iGroups = null;
}
if (is_array($this->_excludeGroups)) {
$xGroups = implode(',', $this->_excludeGroups);
} else {
$xGroups = 0;
}
$sql = "CREATE TEMPORARY TABLE Xg_{$this->_tableName} ( contact_id int primary key) ENGINE=HEAP";
CRM_Core_DAO::executeQuery($sql);
//used only when exclude group is selected
if ($xGroups != 0) {
$excludeGroup = "INSERT INTO Xg_{$this->_tableName} ( contact_id )\n SELECT DISTINCT civicrm_group_contact.contact_id\n FROM civicrm_group_contact, civicrm_contact \n WHERE \n civicrm_contact.id = civicrm_group_contact.contact_id AND \n civicrm_group_contact.status = 'Added' AND\n civicrm_group_contact.group_id IN( {$xGroups})";
CRM_Core_DAO::executeQuery($excludeGroup);
//search for smart group contacts
foreach ($this->_excludeGroups as $keys => $values) {
if (in_array($values, $smartGroup)) {
$ssId = CRM_Utils_Array::key($values, $smartGroup);
$smartSql = CRM_Contact_BAO_SavedSearch::contactIDsSQL($ssId);
$smartSql = $smartSql . " AND contact_a.id NOT IN ( \n SELECT contact_id FROM civicrm_group_contact \n WHERE civicrm_group_contact.group_id = {$values} AND civicrm_group_contact.status = 'Removed')";
$smartGroupQuery = " INSERT IGNORE INTO Xg_{$this->_tableName}(contact_id) {$smartSql}";
CRM_Core_DAO::executeQuery($smartGroupQuery);
}
}
}
$sql = "CREATE TEMPORARY TABLE Ig_{$this->_tableName} ( id int PRIMARY KEY AUTO_INCREMENT,\n contact_id int,\n group_names varchar(64)) ENGINE=HEAP";
CRM_Core_DAO::executeQuery($sql);
if ($iGroups) {
$includeGroup = "INSERT INTO Ig_{$this->_tableName} (contact_id, group_names)\n SELECT civicrm_contact.id as contact_id, civicrm_group.title as group_name\n FROM civicrm_contact\n INNER JOIN civicrm_group_contact\n ON civicrm_group_contact.contact_id = civicrm_contact.id\n LEFT JOIN civicrm_group\n ON civicrm_group_contact.group_id = civicrm_group.id";
} else {
$includeGroup = "INSERT INTO Ig_{$this->_tableName} (contact_id, group_names)\n SELECT civicrm_contact.id as contact_id, ''\n FROM civicrm_contact";
}
//used only when exclude group is selected
if ($xGroups != 0) {
$includeGroup .= " LEFT JOIN Xg_{$this->_tableName}\n ON civicrm_contact.id = Xg_{$this->_tableName}.contact_id";
}
if ($iGroups) {
$includeGroup .= " WHERE \n civicrm_group_contact.status = 'Added' AND\n civicrm_group_contact.group_id IN({$iGroups})";
} else {
$includeGroup .= " WHERE ( 1 ) ";
}
//used only when exclude group is selected
if ($xGroups != 0) {
$includeGroup .= " AND Xg_{$this->_tableName}.contact_id IS null";
}
CRM_Core_DAO::executeQuery($includeGroup);
//search for smart group contacts
foreach ($this->_includeGroups as $keys => $values) {
if (in_array($values, $smartGroup)) {
$ssId = CRM_Utils_Array::key($values, $smartGroup);
$smartSql = CRM_Contact_BAO_SavedSearch::contactIDsSQL($ssId);
$smartSql .= " AND contact_a.id NOT IN ( \n SELECT contact_id FROM civicrm_group_contact\n WHERE civicrm_group_contact.group_id = {$values} AND civicrm_group_contact.status = 'Removed')";
//used only when exclude group is selected
if ($xGroups != 0) {
$smartSql .= " AND contact_a.id NOT IN (SELECT contact_id FROM Xg_{$this->_tableName})";
}
$smartGroupQuery = " INSERT IGNORE INTO Ig_{$this->_tableName}(contact_id) \n {$smartSql}";
CRM_Core_DAO::executeQuery($smartGroupQuery);
$insertGroupNameQuery = "UPDATE IGNORE Ig_{$this->_tableName}\n SET group_names = (SELECT title FROM civicrm_group\n WHERE civicrm_group.id = {$values})\n WHERE Ig_{$this->_tableName}.contact_id IS NOT NULL \n AND Ig_{$this->_tableName}.group_names IS NULL";
CRM_Core_DAO::executeQuery($insertGroupNameQuery);
}
}
}
//group contact search end here;
//block for Tags search
if ($this->_tags || $this->_allSearch) {
//find all tags
require_once 'CRM/Core/DAO/Tag.php';
$tag = new CRM_Core_DAO_Tag();
$tag->is_active = 1;
$tag->find();
while ($tag->fetch()) {
$allTags[] = $tag->id;
}
$includedTags = implode(',', $allTags);
if (!empty($this->_includeTags)) {
$iTags = implode(',', $this->_includeTags);
} else {
//.........这里部分代码省略.........
示例6: postProcess
/**
* process the form after the input has been submitted and validated
*
* @access public
*
* @return void
*/
public function postProcess()
{
// saved search form values
$formValues = $this->controller->exportValues();
$session = CRM_Core_Session::singleton();
//save the search
$savedSearch = new CRM_Contact_BAO_SavedSearch();
$savedSearch->id = $this->_id;
$savedSearch->form_values = serialize($this->get('formValues'));
$savedSearch->mapping_id = $mappingId;
$savedSearch->save();
$this->set('ssID', $savedSearch->id);
CRM_Core_Session::setStatus(ts("Your smart group has been saved as '%1'.", array(1 => $formValues['title'])), ts('Saved'), 'success');
// also create a group that is associated with this saved search only if new saved search
$params = array();
$params['title'] = $formValues['title'];
$params['description'] = $formValues['description'];
$params['visibility'] = 'User and User Admin Only';
$params['saved_search_id'] = $savedSearch->id;
$params['is_active'] = 1;
if ($this->_id) {
$params['id'] = CRM_Contact_BAO_SavedSearch::getName($this->_id, 'id');
}
$group = CRM_Contact_BAO_Group::create($params);
}
示例7: changeSavedSearch
/**
* Change saved search.
*
* @param \CRM_Queue_TaskContext $ctx
*
* @return bool
*/
public static function changeSavedSearch(CRM_Queue_TaskContext $ctx)
{
$membershipStatuses = array_flip(CRM_Member_PseudoConstant::membershipStatus());
$dao = new CRM_Contact_DAO_SavedSearch();
$dao->find();
while ($dao->fetch()) {
$formValues = CRM_Contact_BAO_SavedSearch::getFormValues($dao->id);
if (!empty($formValues['mapper'])) {
foreach ($formValues['mapper'] as $key => $value) {
foreach ($value as $k => $v) {
if ($v[0] == 'Membership' && in_array($v[1], array('membership_status', 'membership_status_id'))) {
$value = $formValues['value'][$key][$k];
$op = $formValues['operator'][$key][$k];
if ($op == 'IN') {
$value = trim($value);
$value = str_replace('(', '', $value);
$value = str_replace(')', '', $value);
$v = explode(',', $value);
$value = array();
foreach ($v as $k1 => $v2) {
if (is_numeric($v2)) {
break 2;
}
$value[$k1] = $membershipStatuses[$v2];
}
$formValues['value'][$key][$k] = "(" . implode(',', $value) . ")";
} elseif (in_array($op, array('=', '!='))) {
if (is_numeric($value)) {
break;
}
$formValues['value'][$key][$k] = $membershipStatuses[$value];
}
}
}
}
$dao->form_values = serialize($formValues);
$dao->save();
}
}
return TRUE;
}
示例8: postProcess
/**
* The post processing of the form gets done here.
*
* Key things done during post processing are
* - check for reset or next request. if present, skip post procesing.
* - now check if user requested running a saved search, if so, then
* the form values associated with the saved search are used for searching.
* - if user has done a submit with new values the regular post submissing is
* done.
* The processing consists of using a Selector / Controller framework for getting the
* search results.
*
* @param
*
* @return void
* @access public
*/
function postProcess()
{
if ($this->_done) {
return;
}
$this->_done = true;
$this->_formValues = $this->controller->exportValues($this->_name);
$this->fixFormValues();
if (isset($this->_ssID) && empty($_POST)) {
// if we are editing / running a saved search and the form has not been posted
$this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID);
}
require_once 'CRM/Contact/BAO/Query.php';
$this->_queryParams =& CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$this->set('formValues', $this->_formValues);
$this->set('queryParams', $this->_queryParams);
$buttonName = $this->controller->getButtonName();
if ($buttonName == $this->_actionButtonName || $buttonName == $this->_printButtonName) {
// check actionName and if next, then do not repeat a search, since we are going to the next page
// hack, make sure we reset the task values
$stateMachine =& $this->controller->getStateMachine();
$formName = $stateMachine->getTaskFormName();
$this->controller->resetPage($formName);
return;
}
$sortID = null;
if ($this->get(CRM_Utils_Sort::SORT_ID)) {
$sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), $this->get(CRM_Utils_Sort::SORT_DIRECTION));
}
require_once 'CRM/Contact/BAO/Query.php';
$selector =& new CRM_Grant_Selector_Search($this->_queryParams, $this->_action, null, $this->_single, $this->_limit, $this->_context);
$prefix = null;
if ($this->_context == 'basic' || $this->_context == 'user') {
$prefix = $this->_prefix;
}
$controller =& new CRM_Core_Selector_Controller($selector, $this->get(CRM_Utils_Pager::PAGE_ID), $sortID, CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::SESSION, $prefix);
$controller->setEmbedded(true);
$query =& $selector->getQuery();
if ($this->_context == 'user') {
$query->setSkipPermission(true);
}
$controller->run();
}
示例9: preProcess
/**
* Processing needed for buildForm and later.
*/
public function preProcess()
{
// set the various class variables
$this->_group = CRM_Core_PseudoConstant::group();
$this->_groupIterator = CRM_Core_PseudoConstant::groupIterator();
$this->_tag = CRM_Core_BAO_Tag::getTags();
$this->_done = FALSE;
/*
* we allow the controller to set force/reset externally, useful when we are being
* driven by the wizard framework
*/
$this->_reset = CRM_Utils_Request::retrieve('reset', 'Boolean', CRM_Core_DAO::$_nullObject);
$this->_force = CRM_Utils_Request::retrieve('force', 'Boolean', CRM_Core_DAO::$_nullObject);
$this->_groupID = CRM_Utils_Request::retrieve('gid', 'Positive', $this);
$this->_amtgID = CRM_Utils_Request::retrieve('amtgID', 'Positive', $this);
$this->_ssID = CRM_Utils_Request::retrieve('ssID', 'Positive', $this);
$this->_sortByCharacter = CRM_Utils_Request::retrieve('sortByCharacter', 'String', $this);
$this->_ufGroupID = CRM_Utils_Request::retrieve('id', 'Positive', $this);
$this->_componentMode = CRM_Utils_Request::retrieve('component_mode', 'Positive', $this, FALSE, 1, $_REQUEST);
$this->_operator = CRM_Utils_Request::retrieve('operator', 'String', $this, FALSE, 1, $_REQUEST, 'AND');
/**
* set the button names
*/
$this->_searchButtonName = $this->getButtonName('refresh');
$this->_actionButtonName = $this->getButtonName('next', 'action');
$this->assign('actionButtonName', $this->_actionButtonName);
// reset from session, CRM-3526
$session = CRM_Core_Session::singleton();
if ($this->_force && $session->get('selectedSearchContactIds')) {
$session->resetScope('selectedSearchContactIds');
}
// if we dont get this from the url, use default if one exsts
$config = CRM_Core_Config::singleton();
if ($this->_ufGroupID == NULL && $config->defaultSearchProfileID != NULL) {
$this->_ufGroupID = $config->defaultSearchProfileID;
}
// assign context to drive the template display, make sure context is valid
$this->_context = CRM_Utils_Request::retrieve('context', 'String', $this, FALSE, 'search');
if (!CRM_Utils_Array::value($this->_context, self::validContext())) {
$this->_context = 'search';
}
$this->set('context', $this->_context);
$this->assign('context', $this->_context);
$this->_modeValue = self::getModeValue($this->_componentMode);
$this->assign($this->_modeValue);
$this->set('selectorName', self::$_selectorName);
// get user submitted values
// get it from controller only if form has been submitted, else preProcess has set this
// $this->controller->isModal( ) returns TRUE if page is
// valid, i.e all the validations are TRUE
if (!empty($_POST) && !$this->controller->isModal()) {
$this->_formValues = $this->controller->exportValues($this->_name);
$this->normalizeFormValues();
$this->_params = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$this->_returnProperties =& $this->returnProperties();
// also get the uf group id directly from the post value
$this->_ufGroupID = CRM_Utils_Array::value('uf_group_id', $_POST, $this->_ufGroupID);
$this->_formValues['uf_group_id'] = $this->_ufGroupID;
$this->set('id', $this->_ufGroupID);
// also get the object mode directly from the post value
$this->_componentMode = CRM_Utils_Array::value('component_mode', $_POST, $this->_componentMode);
// also get the operator from the post value if set
$this->_operator = CRM_Utils_Array::value('operator', $_POST, $this->_operator);
$this->_formValues['operator'] = $this->_operator;
$this->set('operator', $this->_operator);
} else {
$this->_formValues = $this->get('formValues');
$this->_params = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$this->_returnProperties =& $this->returnProperties();
if (!empty($this->_ufGroupID)) {
$this->set('id', $this->_ufGroupID);
}
}
if (empty($this->_formValues)) {
//check if group is a smart group (fix for CRM-1255)
if ($this->_groupID) {
if ($ssId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $this->_groupID, 'saved_search_id')) {
$this->_ssID = $ssId;
}
}
// fix for CRM-1907
if (isset($this->_ssID) && $this->_context != 'smog') {
// we only retrieve the saved search values if out current values are null
$this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID);
//fix for CRM-1505
if (CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $this->_ssID, 'mapping_id')) {
$this->_params = CRM_Contact_BAO_SavedSearch::getSearchParams($this->_ssID);
} else {
$this->_params = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
}
$this->_returnProperties =& $this->returnProperties();
} else {
if (isset($this->_ufGroupID)) {
// also set the uf group id if not already present
$this->_formValues['uf_group_id'] = $this->_ufGroupID;
}
if (isset($this->_componentMode)) {
//.........这里部分代码省略.........
示例10: postProcess
/**
* This method is called for processing a submitted search form.
*/
public function postProcess()
{
$this->set('isAdvanced', '0');
$this->set('isSearchBuilder', '0');
// get user submitted values
// get it from controller only if form has been submitted, else preProcess has set this
if (!empty($_POST)) {
$this->_formValues = $this->controller->exportValues($this->_name);
}
if (isset($this->_groupID) && empty($this->_formValues['group'])) {
$this->_formValues['group'] = $this->_groupID;
} elseif (isset($this->_ssID) && empty($_POST)) {
// if we are editing / running a saved search and the form has not been posted
$this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID);
//fix for CRM-1505
if (CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $this->_ssID, 'mapping_id')) {
$this->_params = CRM_Contact_BAO_SavedSearch::getSearchParams($this->_ssID);
}
}
// we dont want to store the sortByCharacter in the formValue, it is more like
// a filter on the result set
// this filter is reset if we click on the search button
if ($this->_sortByCharacter !== NULL && empty($_POST)) {
if (strtolower($this->_sortByCharacter) == 'all') {
$this->_formValues['sortByCharacter'] = NULL;
} else {
$this->_formValues['sortByCharacter'] = $this->_sortByCharacter;
}
} else {
$this->_sortByCharacter = NULL;
}
$this->_params = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$this->_returnProperties =& $this->returnProperties();
parent::postProcess();
}
示例11: load
/**
* load the smart group cache for a saved search
*/
static function load(&$group)
{
$groupID = $group->id;
$savedSearchID = $group->saved_search_id;
$sql = null;
$idName = 'id';
$customClass = null;
if ($savedSearchID) {
require_once 'CRM/Contact/BAO/SavedSearch.php';
$ssParams =& CRM_Contact_BAO_SavedSearch::getSearchParams($savedSearchID);
$returnProperties = array();
if (CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $savedSearchID, 'mapping_id')) {
require_once "CRM/Core/BAO/Mapping.php";
$fv =& CRM_Contact_BAO_SavedSearch::getFormValues($savedSearchID);
$returnProperties = CRM_Core_BAO_Mapping::returnProperties($fv);
}
if (isset($ssParams['customSearchID'])) {
// if custom search
require_once 'CRM/Contact/BAO/SearchCustom.php';
// we split it up and store custom class
// so temp tables are not destroyed if they are used
// hence customClass is defined above at top of function
$customClass = CRM_Contact_BAO_SearchCustom::customClass($ssParams['customSearchID'], $savedSearchID);
$searchSQL = $customClass->contactIDs();
$idName = 'contact_id';
} else {
require_once 'CRM/Contact/BAO/Query.php';
$query = new CRM_Contact_BAO_Query($ssParams, $returnProperties, null, false, false, 1, true, true, false);
$query->_useGroupBy = false;
$searchSQL =& $query->searchQuery(0, 0, null, false, false, false, true, true, null);
}
$groupID = CRM_Utils_Type::escape($groupID, 'Integer');
$sql = $searchSQL . " AND contact_a.id NOT IN ( \n SELECT contact_id FROM civicrm_group_contact \n WHERE civicrm_group_contact.status = 'Removed' \n AND civicrm_group_contact.group_id = {$groupID} ) ";
}
if ($sql) {
$sql .= " UNION ";
}
// lets also store the records that are explicitly added to the group
// this allows us to skip the group contact LEFT JOIN
$sql .= "\nSELECT contact_id as {$idName}\nFROM civicrm_group_contact\nWHERE civicrm_group_contact.status = 'Added'\n AND civicrm_group_contact.group_id = {$groupID} ";
$dao = CRM_Core_DAO::executeQuery($sql);
$values = array();
while ($dao->fetch()) {
$values[] = "({$groupID},{$dao->{$idName}})";
}
$groupIDs = array($groupID);
self::remove($groupIDs);
self::store($groupIDs, $values);
if ($group->children) {
require_once 'CRM/Contact/BAO/Group.php';
$childrenIDs = explode(',', $group->children);
foreach ($childrenIDs as $childID) {
$contactIDs =& CRM_Contact_BAO_Group::getMember($childID, false);
$values = array();
foreach ($contactIDs as $contactID => $dontCare) {
$values[] = "({$groupID},{$contactID})";
}
self::store($groupIDs, $values);
}
}
}
示例12: postProcess
/**
* Process the form after the input has been submitted and validated.
*/
public function postProcess()
{
// saved search form values
// get form values of all the forms in this controller
$formValues = $this->controller->exportValues();
$isAdvanced = $this->get('isAdvanced');
$isSearchBuilder = $this->get('isSearchBuilder');
// add mapping record only for search builder saved search
$mappingId = NULL;
if ($isAdvanced == '2' && $isSearchBuilder == '1') {
//save the mapping for search builder
if (!$this->_id) {
//save record in mapping table
$mappingParams = array('mapping_type' => 'Search Builder');
$temp = array();
$mapping = CRM_Core_BAO_Mapping::add($mappingParams, $temp);
$mappingId = $mapping->id;
} else {
//get the mapping id from saved search
$savedSearch = new CRM_Contact_BAO_SavedSearch();
$savedSearch->id = $this->_id;
$savedSearch->find(TRUE);
$mappingId = $savedSearch->mapping_id;
}
//save mapping fields
CRM_Core_BAO_Mapping::saveMappingFields($formValues, $mappingId);
}
//save the search
$savedSearch = new CRM_Contact_BAO_SavedSearch();
$savedSearch->id = $this->_id;
$savedSearch->form_values = serialize($this->get('formValues'));
$savedSearch->mapping_id = $mappingId;
$savedSearch->search_custom_id = $this->get('customSearchID');
$savedSearch->save();
$this->set('ssID', $savedSearch->id);
CRM_Core_Session::setStatus(ts("Your smart group has been saved as '%1'.", array(1 => $formValues['title'])), ts('Group Saved'), 'success');
// also create a group that is associated with this saved search only if new saved search
$params = array();
$params['title'] = $formValues['title'];
$params['description'] = $formValues['description'];
if (isset($formValues['group_type']) && is_array($formValues['group_type'])) {
$params['group_type'] = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, array_keys($formValues['group_type'])) . CRM_Core_DAO::VALUE_SEPARATOR;
} else {
$params['group_type'] = '';
}
$params['visibility'] = 'User and User Admin Only';
$params['saved_search_id'] = $savedSearch->id;
$params['is_active'] = 1;
//CRM-14190
$params['parents'] = $formValues['parents'];
if ($this->_id) {
$params['id'] = CRM_Contact_BAO_SavedSearch::getName($this->_id, 'id');
}
$group = CRM_Contact_BAO_Group::create($params);
// CRM-9464
$this->_id = $savedSearch->id;
//CRM-14190
if (!empty($formValues['parents'])) {
CRM_Contact_BAO_GroupNestingCache::update();
}
}
示例13: postProcess
/**
* this method is called for processing a submitted search form
*
* @return void
* @access public
*/
function postProcess()
{
$session =& CRM_Core_Session::singleton();
$session->set('isAdvanced', '0');
$session->set('isSearchBuilder', '0');
// get user submitted values
// get it from controller only if form has been submitted, else preProcess has set this
if (!empty($_POST)) {
$this->_formValues = $this->controller->exportValues($this->_name);
$this->normalizeFormValues();
}
if (isset($this->_groupID) && !CRM_Utils_Array::value('group', $this->_formValues)) {
$this->_formValues['group'][$this->_groupID] = 1;
} else {
if (isset($this->_ssID) && empty($_POST)) {
// if we are editing / running a saved search and the form has not been posted
$this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID);
//fix for CRM-1505
if (CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $this->_ssID, 'mapping_id')) {
$this->_params =& CRM_Contact_BAO_SavedSearch::getSearchParams($this->_ssID);
}
}
}
// we dont want to store the sortByCharacter in the formValue, it is more like
// a filter on the result set
// this filter is reset if we click on the search button
if ($this->_sortByCharacter && empty($_POST)) {
if ($this->_sortByCharacter == 1) {
$this->_formValues['sortByCharacter'] = null;
} else {
$this->_formValues['sortByCharacter'] = $this->_sortByCharacter;
}
}
$this->_params =& CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
$this->_returnProperties =& $this->returnProperties();
// CRM_Core_Error::debug( 'f', $this->_formValues );
// CRM_Core_Error::debug( 'p', $this->_params );
parent::postProcess();
}
示例14: smartGroupCreate
/**
* Create a smart group.
*
* By default it will be a group of households.
*
* @param array $smartGroupParams
* @param array $groupParams
* @return int
*/
public function smartGroupCreate($smartGroupParams = array(), $groupParams = array())
{
$smartGroupParams = array_merge(array('formValues' => array('contact_type' => array('IN' => array('Household')))), $smartGroupParams);
$savedSearch = CRM_Contact_BAO_SavedSearch::create($smartGroupParams);
$groupParams['saved_search_id'] = $savedSearch->id;
return $this->groupCreate($groupParams);
}
示例15: groupClause
/**
* Get group clause for this user
*
* @param int $type the type of permission needed
* @param array $tables (reference ) add the tables that are needed for the select clause
* @param array $whereTables (reference ) add the tables that are needed for the where clause
*
* @return string the group where clause for this user
* @access public
*/
public static function groupClause($type, &$tables, &$whereTables)
{
if (!isset(self::$_viewPermissionedGroups)) {
self::group();
}
if ($type == CRM_Core_Permission::EDIT) {
if (self::$_editAdminUser) {
$clause = ' ( 1 ) ';
} else {
if (empty(self::$_editPermissionedGroups)) {
$clause = ' ( 0 ) ';
} else {
$clauses = array();
$groups = implode(', ', self::$_editPermissionedGroups);
$clauses[] = ' ( civicrm_group_contact.group_id IN ( ' . implode(', ', array_keys(self::$_editPermissionedGroups)) . " ) AND civicrm_group_contact.status = 'Added' ) ";
$tables['civicrm_group_contact'] = 1;
$whereTables['civicrm_group_contact'] = 1;
// foreach group that is potentially a saved search, add the saved search clause
foreach (array_keys(self::$_editPermissionedGroups) as $id) {
$group = new CRM_Contact_DAO_Group();
$group->id = $id;
if ($group->find(true) && $group->saved_search_id) {
require_once 'CRM/Contact/BAO/SavedSearch.php';
$clause = CRM_Contact_BAO_SavedSearch::whereClause($group->saved_search_id, $tables, $whereTables);
if (trim($clause)) {
$clauses[] = $clause;
}
}
}
$clause = ' ( ' . implode(' OR ', $clauses) . ' ) ';
}
}
} else {
if (self::$_viewAdminUser) {
$clause = ' ( 1 ) ';
} else {
if (empty(self::$_viewPermissionedGroups)) {
$clause = ' ( 0 ) ';
} else {
$clauses = array();
$groups = implode(', ', self::$_viewPermissionedGroups);
$clauses[] = ' ( civicrm_group_contact.group_id IN (' . implode(', ', array_keys(self::$_viewPermissionedGroups)) . " ) AND civicrm_group_contact.status = 'Added' ) ";
$tables['civicrm_group_contact'] = 1;
$whereTables['civicrm_group_contact'] = 1;
// foreach group that is potentially a saved search, add the saved search clause
foreach (array_keys(self::$_viewPermissionedGroups) as $id) {
$group = new CRM_Contact_DAO_Group();
$group->id = $id;
if ($group->find(true) && $group->saved_search_id) {
require_once 'CRM/Contact/BAO/SavedSearch.php';
$clause = CRM_Contact_BAO_SavedSearch::whereClause($group->saved_search_id, $tables, $whereTables);
if (trim($clause)) {
$clauses[] = $clause;
}
}
}
$clause = ' ( ' . implode(' OR ', $clauses) . ' ) ';
}
}
}
return $clause;
}