本文整理汇总了PHP中Civi::lockManager方法的典型用法代码示例。如果您正苦于以下问题:PHP Civi::lockManager方法的具体用法?PHP Civi::lockManager怎么用?PHP Civi::lockManager使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Civi
的用法示例。
在下文中一共展示了Civi::lockManager方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: session_start
} else {
$params['contribution_recur_id'] = $recurring->id;
}
}
$contribution = CRM_Contribute_BAO_Contribution::create($params);
if (!$contribution->id) {
return FALSE;
}
return TRUE;
}
}
// bootstrap the environment and run the processor
session_start();
require_once '../civicrm.config.php';
require_once 'CRM/Core/Config.php';
$config = CRM_Core_Config::singleton();
CRM_Utils_System::authenticateScript(TRUE);
//log the execution of script
CRM_Core_Error::debug_log_message('ContributionProcessor.php');
$lock = Civi::lockManager()->acquire('worker.contribute.CiviContributeProcessor');
if ($lock->isAcquired()) {
// try to unset any time limits
if (!ini_get('safe_mode')) {
set_time_limit(0);
}
CiviContributeProcessor::process();
} else {
throw new Exception('Could not acquire lock, another CiviContributeProcessor process is running');
}
$lock->release();
echo "Done processing<p>";
示例2: load
/**
* Load the smart group cache for a saved search.
*
* @param object $group
* The smart group that needs to be loaded.
* @param bool $force
* Should we force a search through.
*/
public static function load(&$group, $force = FALSE)
{
$groupID = $group->id;
$savedSearchID = $group->saved_search_id;
if (array_key_exists($groupID, self::$_alreadyLoaded) && !$force) {
return;
}
// grab a lock so other processes don't compete and do the same query
$lock = Civi::lockManager()->acquire("data.core.group.{$groupID}");
if (!$lock->isAcquired()) {
// this can cause inconsistent results since we don't know if the other process
// will fill up the cache before our calling routine needs it.
// however this routine does not return the status either, so basically
// its a "lets return and hope for the best"
return;
}
self::$_alreadyLoaded[$groupID] = 1;
// we now have the lock, but some other process could have actually done the work
// before we got here, so before we do any work, lets ensure that work needs to be
// done
// we allow hidden groups here since we dont know if the caller wants to evaluate an
// hidden group
if (!$force && !self::shouldGroupBeRefreshed($groupID, TRUE)) {
$lock->release();
return;
}
$sql = NULL;
$idName = 'id';
$customClass = NULL;
if ($savedSearchID) {
$ssParams = CRM_Contact_BAO_SavedSearch::getSearchParams($savedSearchID);
// rectify params to what proximity search expects if there is a value for prox_distance
// CRM-7021
if (!empty($ssParams)) {
CRM_Contact_BAO_ProximityQuery::fixInputParams($ssParams);
}
$returnProperties = array();
if (CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $savedSearchID, 'mapping_id')) {
$fv = CRM_Contact_BAO_SavedSearch::getFormValues($savedSearchID);
$returnProperties = CRM_Core_BAO_Mapping::returnProperties($fv);
}
if (isset($ssParams['customSearchID'])) {
// if custom search
// 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();
$searchSQL = str_replace('ORDER BY contact_a.id ASC', '', $searchSQL);
if (!strstr($searchSQL, 'WHERE')) {
$searchSQL .= " WHERE ( 1 ) ";
}
$idName = 'contact_id';
} else {
$formValues = CRM_Contact_BAO_SavedSearch::getFormValues($savedSearchID);
// CRM-17075 using the formValues in this way imposes extra logic and complexity.
// we have the where_clause and where tables stored in the saved_search table
// and should use these rather than re-processing the form criteria (which over-works
// the link between the form layer & the query layer too).
// It's hard to think of when you would want to use anything other than return
// properties = array('contact_id' => 1) here as the point would appear to be to
// generate the list of contact ids in the group.
// @todo review this to use values in saved_search table (preferably for 4.8).
$query = new CRM_Contact_BAO_Query($ssParams, $returnProperties, NULL, FALSE, FALSE, 1, TRUE, TRUE, FALSE, CRM_Utils_Array::value('display_relationship_type', $formValues), CRM_Utils_Array::value('operator', $formValues, 'AND'));
$query->_useDistinct = FALSE;
$query->_useGroupBy = FALSE;
$searchSQL = $query->searchQuery(0, 0, NULL, FALSE, FALSE, FALSE, TRUE, TRUE, NULL, NULL, NULL, TRUE);
}
$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 = preg_replace("/^\\s*SELECT/", "SELECT {$groupID} as group_id, ", $sql);
}
// lets also store the records that are explicitly added to the group
// this allows us to skip the group contact LEFT JOIN
$sqlB = "\nSELECT {$groupID} as group_id, contact_id as {$idName}\nFROM civicrm_group_contact\nWHERE civicrm_group_contact.status = 'Added'\n AND civicrm_group_contact.group_id = {$groupID} ";
$groupIDs = array($groupID);
self::remove($groupIDs);
$processed = FALSE;
$tempTable = 'civicrm_temp_group_contact_cache' . rand(0, 2000);
foreach (array($sql, $sqlB) as $selectSql) {
if (!$selectSql) {
continue;
}
$insertSql = "CREATE TEMPORARY TABLE {$tempTable} ({$selectSql});";
$processed = TRUE;
CRM_Core_DAO::executeQuery($insertSql);
CRM_Core_DAO::executeQuery("INSERT IGNORE INTO civicrm_group_contact_cache (contact_id, group_id)\n SELECT DISTINCT {$idName}, group_id FROM {$tempTable}\n ");
CRM_Core_DAO::executeQuery(" DROP TEMPORARY TABLE {$tempTable}");
}
self::updateCacheTime($groupIDs, $processed);
//.........这里部分代码省略.........
示例3: civicrm_api3_job_group_rebuild
/**
* This api reloads all the smart groups.
*
* If the org has a large number of smart groups it is recommended that they use the limit clause
* to limit the number of smart groups evaluated on a per job basis.
*
* Might also help to increase the smartGroupCacheTimeout and use the cache.
*
* @param array $params
*
* @return array
* @throws \API_Exception
*/
function civicrm_api3_job_group_rebuild($params)
{
$lock = Civi::lockManager()->acquire('worker.core.GroupRebuild');
if (!$lock->isAcquired()) {
throw new API_Exception('Could not acquire lock, another EmailProcessor process is running');
}
$limit = CRM_Utils_Array::value('limit', $params, 0);
CRM_Contact_BAO_GroupContactCache::loadAll(NULL, $limit);
$lock->release();
return civicrm_api3_create_success();
}
示例4: setItem
/**
* Store an item in the DB cache.
*
* @param object $data
* (required) A reference to the data that will be serialized and stored.
* @param string $group
* (required) The group name of the item.
* @param string $path
* (required) The path under which this item is stored.
* @param int $componentID
* The optional component ID (so componenets can share the same name space).
*/
public static function setItem(&$data, $group, $path, $componentID = NULL)
{
if (self::$_cache === NULL) {
self::$_cache = array();
}
$dao = new CRM_Core_DAO_Cache();
$dao->group_name = $group;
$dao->path = $path;
$dao->component_id = $componentID;
// get a lock so that multiple ajax requests on the same page
// dont trample on each other
// CRM-11234
$lock = Civi::lockManager()->acquire("cache.{$group}_{$path}._{$componentID}");
if (!$lock->isAcquired()) {
CRM_Core_Error::fatal();
}
$dao->find(TRUE);
$dao->data = serialize($data);
$dao->created_date = date('YmdHis');
$dao->save(FALSE);
$lock->release();
$dao->free();
// cache coherency - refresh or remove dependent caches
$argString = "CRM_CT_{$group}_{$path}_{$componentID}";
$cache = CRM_Utils_Cache::singleton();
$data = unserialize($dao->data);
self::$_cache[$argString] = $data;
$cache->set($argString, $data);
$argString = "CRM_CT_CI_{$group}_{$componentID}";
unset(self::$_cache[$argString]);
$cache->delete($argString);
}
示例5: runJobs_pre
/**
* before we run jobs, we need to split the jobs
* @param int $offset
* @param null $mode
*/
public static function runJobs_pre($offset = 200, $mode = NULL)
{
$job = new CRM_Mailing_BAO_MailingJob();
$jobTable = CRM_Mailing_DAO_MailingJob::getTableName();
$mailingTable = CRM_Mailing_DAO_Mailing::getTableName();
$currentTime = date('YmdHis');
$mailingACL = CRM_Mailing_BAO_Mailing::mailingACL('m');
$workflowClause = CRM_Mailing_BAO_MailingJob::workflowClause();
$domainID = CRM_Core_Config::domainID();
$modeClause = 'AND m.sms_provider_id IS NULL';
if ($mode == 'sms') {
$modeClause = 'AND m.sms_provider_id IS NOT NULL';
}
// Select all the mailing jobs that are created from
// when the mailing is submitted or scheduled.
$query = "\n SELECT j.*\n FROM {$jobTable} j,\n {$mailingTable} m\n WHERE m.id = j.mailing_id AND m.domain_id = {$domainID}\n {$workflowClause}\n {$modeClause}\n AND j.is_test = 0\n AND ( ( j.start_date IS null\n AND j.scheduled_date <= {$currentTime}\n AND j.status = 'Scheduled'\n AND j.end_date IS null ) )\n AND ((j.job_type is NULL) OR (j.job_type <> 'child'))\n ORDER BY j.scheduled_date,\n j.start_date";
$job->query($query);
// For each of the "Parent Jobs" we find, we split them into
// X Number of child jobs
while ($job->fetch()) {
// still use job level lock for each child job
$lock = Civi::lockManager()->acquire("data.mailing.job.{$job->id}");
if (!$lock->isAcquired()) {
continue;
}
// Re-fetch the job status in case things
// changed between the first query and now
// to avoid race conditions
$job->status = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingJob', $job->id, 'status', 'id', TRUE);
if ($job->status != 'Scheduled') {
$lock->release();
continue;
}
$job->split_job($offset);
// update the status of the parent job
$transaction = new CRM_Core_Transaction();
$saveJob = new CRM_Mailing_DAO_MailingJob();
$saveJob->id = $job->id;
$saveJob->start_date = date('YmdHis');
$saveJob->status = 'Running';
$saveJob->save();
$transaction->commit();
// Release the job lock
$lock->release();
}
}
示例6: processQueue
/**
* @param null $mode
*
* @return bool
* @throws Exception
*/
public static function processQueue($mode = NULL)
{
$config = CRM_Core_Config::singleton();
if ($mode == NULL && CRM_Core_BAO_MailSettings::defaultDomain() == "EXAMPLE.ORG") {
throw new CRM_Core_Exception(ts('The <a href="%1">default mailbox</a> has not been configured. You will find <a href="%2">more info in the online user and administrator guide</a>', array(1 => CRM_Utils_System::url('civicrm/admin/mailSettings', 'reset=1'), 2 => "http://book.civicrm.org/user/advanced-configuration/email-system-configuration/")));
}
// check if we are enforcing number of parallel cron jobs
// CRM-8460
$gotCronLock = FALSE;
$mailerJobsMax = Civi::settings()->get('mailerJobsMax');
if (is_numeric($mailerJobsMax) && $mailerJobsMax > 0) {
$lockArray = range(1, $mailerJobsMax);
// Shuffle the array to improve chances of quickly finding an open thread
shuffle($lockArray);
// Check if we are using global locks
foreach ($lockArray as $lockID) {
$cronLock = Civi::lockManager()->acquire("worker.mailing.send.{$lockID}");
if ($cronLock->isAcquired()) {
$gotCronLock = TRUE;
break;
}
}
// Exit here since we have enough mailing processes running
if (!$gotCronLock) {
CRM_Core_Error::debug_log_message('Returning early, since the maximum number of mailing processes are running');
return TRUE;
}
if (getenv('CIVICRM_CRON_HOLD')) {
// In testing, we may need to simulate some slow activities.
sleep(getenv('CIVICRM_CRON_HOLD'));
}
}
// Split up the parent jobs into multiple child jobs
$mailerJobSize = Civi::settings()->get('mailerJobSize');
CRM_Mailing_BAO_MailingJob::runJobs_pre($mailerJobSize, $mode);
CRM_Mailing_BAO_MailingJob::runJobs(NULL, $mode);
CRM_Mailing_BAO_MailingJob::runJobs_post($mode);
// Release the global lock if we do have one
if ($gotCronLock) {
$cronLock->release();
}
return TRUE;
}
示例7: setItem
/**
* Store an item in the DB cache.
*
* @param object $data
* (required) A reference to the data that will be serialized and stored.
* @param string $group
* (required) The group name of the item.
* @param string $path
* (required) The path under which this item is stored.
* @param int $componentID
* The optional component ID (so componenets can share the same name space).
*/
public static function setItem(&$data, $group, $path, $componentID = NULL)
{
if (self::$_cache === NULL) {
self::$_cache = array();
}
// get a lock so that multiple ajax requests on the same page
// dont trample on each other
// CRM-11234
$lock = Civi::lockManager()->acquire("cache.{$group}_{$path}._{$componentID}");
if (!$lock->isAcquired()) {
CRM_Core_Error::fatal();
}
$table = self::getTableName();
$where = self::whereCache($group, $path, $componentID);
$id = CRM_Core_DAO::singleValueQuery("SELECT id FROM {$table} WHERE {$where}");
$now = date('Y-m-d H:i:s');
// FIXME - Use SQL NOW() or CRM_Utils_Time?
$dataSerialized = serialize($data);
// This table has a wonky index, so we cannot use REPLACE or
// "INSERT ... ON DUPE". Instead, use SELECT+(INSERT|UPDATE).
if ($id) {
$sql = "UPDATE {$table} SET data = %1, created_date = %2 WHERE id = %3";
$dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($dataSerialized, 'String'), 2 => array($now, 'String'), 3 => array($id, 'Int')));
} else {
$insert = CRM_Utils_SQL_Insert::into($table)->row(array('group_name' => $group, 'path' => $path, 'component_id' => $componentID, 'data' => $dataSerialized, 'created_date' => $now));
$dao = CRM_Core_DAO::executeQuery($insert->toSQL());
}
$lock->release();
$dao->free();
// cache coherency - refresh or remove dependent caches
$argString = "CRM_CT_{$group}_{$path}_{$componentID}";
$cache = CRM_Utils_Cache::singleton();
$data = unserialize($dataSerialized);
self::$_cache[$argString] = $data;
$cache->set($argString, $data);
$argString = "CRM_CT_CI_{$group}_{$componentID}";
unset(self::$_cache[$argString]);
$cache->delete($argString);
}