Merge pull request #1984 from dlobo/CRM-13621
[civicrm-core.git] / api / v3 / Job.php
index a2afb8a9fc1c12e638f9f93a24379bd89c11ffdc..fdb8fdfd5e2a8bd7a5dc135986c9dc85f5f6a06e 100644 (file)
@@ -3,7 +3,7 @@
 
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -71,17 +71,7 @@ function _civicrm_api3_job_create_spec(&$params) {
  * {@schema Core/Job.xml}
  */
 function civicrm_api3_job_create($params) {
-  require_once 'CRM/Utils/Rule.php';
-
-  if (isset($params['id']) && !CRM_Utils_Rule::integer($params['id'])) {
-    return civicrm_api3_create_error('Invalid value for job ID');
-  }
-
-  $dao = CRM_Core_BAO_Job::create($params);
-
-  $result = array();
-  _civicrm_api3_object_to_array($dao, $result[$dao->id]);
-  return civicrm_api3_create_success($result, $params, 'job', 'create', $dao);
+  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
 /**
@@ -106,7 +96,6 @@ function civicrm_api3_job_get($params) {
  * @access public
  */
 function civicrm_api3_job_delete($params) {
-  require_once 'CRM/Utils/Rule.php';
   if ($params['id'] != NULL && !CRM_Utils_Rule::integer($params['id'])) {
     return civicrm_api3_create_error('Invalid value for job ID');
   }
@@ -131,7 +120,6 @@ function civicrm_api3_job_delete($params) {
  *
  */
 function civicrm_api3_job_execute($params) {
-  require_once 'CRM/Core/JobManager.php';
   $facility = new CRM_Core_JobManager();
   $facility->execute(FALSE);
 
@@ -161,8 +149,6 @@ function _civicrm_api3_job_execute_spec(&$params) {
  *
  */
 function civicrm_api3_job_geocode($params) {
-
-  require_once 'CRM/Utils/Address/BatchUpdate.php';
   $gc = new CRM_Utils_Address_BatchUpdate($params);
 
 
@@ -199,8 +185,13 @@ function _civicrm_api3_job_geocode_spec(&$params) {
  *
  */
 function civicrm_api3_job_send_reminder($params) {
-  require_once 'CRM/Core/BAO/ActionSchedule.php';
+  $lock = new CRM_Core_Lock('civimail.job.EmailProcessor');
+  if (!$lock->isAcquired()) {
+    return civicrm_api3_create_error('Could not acquire lock, another EmailProcessor process is running');
+  }
+
   $result = CRM_Core_BAO_ActionSchedule::processQueue(CRM_Utils_Array::value('now', $params));
+  $lock->release();
 
   if ($result['is_error'] == 0) {
     return civicrm_api3_create_success();
@@ -224,7 +215,6 @@ function civicrm_api3_job_send_reminder($params) {
  *
  */
 function civicrm_api3_job_mail_report($params) {
-
   $result = CRM_Report_Utils_Report::processReport($params);
 
   if ($result['is_error'] == 0) {
@@ -347,7 +337,6 @@ function civicrm_api3_job_process_mailing($params) {
  * @return array
  */
 function civicrm_api3_job_process_sms($params) {
-
   if (!CRM_Mailing_BAO_Mailing::processQueue('sms')) {
     return civicrm_api3_create_error('Process Queue failed');
   }
@@ -356,22 +345,23 @@ function civicrm_api3_job_process_sms($params) {
     return civicrm_api3_create_success($values, $params, 'mailing', 'process');
   }
 }
+
 /**
  * Job to get mail responses from civimailing
  */
 function civicrm_api3_job_fetch_bounces($params) {
-  require_once 'CRM/Utils/Mail/EmailProcessor.php';
-  require_once 'CRM/Core/Lock.php';
-  $lock = new CRM_Core_Lock('EmailProcessor');
+  $lock = new CRM_Core_Lock('civimail.job.EmailProcessor');
   if (!$lock->isAcquired()) {
     return civicrm_api3_create_error('Could not acquire lock, another EmailProcessor process is running');
   }
   if (!CRM_Utils_Mail_EmailProcessor::processBounces()) {
+    $lock->release();
     return civicrm_api3_create_error('Process Bounces failed');
   }
-  //   FIXME: processBounces doesn't return true/false on success/failure
-  $values = array();
   $lock->release();
+
+  // FIXME: processBounces doesn't return true/false on success/failure
+  $values = array();
   return civicrm_api3_create_success($values, $params, 'mailing', 'bounces');
 }
 
@@ -379,18 +369,17 @@ function civicrm_api3_job_fetch_bounces($params) {
  * Job to get mail and create activities
  */
 function civicrm_api3_job_fetch_activities($params) {
-  require_once 'CRM/Utils/Mail/EmailProcessor.php';
-  require_once 'CRM/Core/Lock.php';
-  $lock = new CRM_Core_Lock('EmailProcessor');
+  $lock = new CRM_Core_Lock('civimail.job.EmailProcessor');
   if (!$lock->isAcquired()) {
     return civicrm_api3_create_error('Could not acquire lock, another EmailProcessor process is running');
   }
-    try {
-       CRM_Utils_Mail_EmailProcessor::processActivities();
-       $values = array( );
+
+  try {
+    CRM_Utils_Mail_EmailProcessor::processActivities();
+    $values = array( );
     $lock->release();
-       return civicrm_api3_create_success($values, $params,'mailing','activities');
-    } catch (Exception $e) {
+    return civicrm_api3_create_success($values, $params,'mailing','activities');
+  } catch (Exception $e) {
     $lock->release();
     return civicrm_api3_create_error('Process Activities failed');
   }
@@ -405,7 +394,6 @@ function civicrm_api3_job_fetch_activities($params) {
  * @access public
  */
 function civicrm_api3_job_process_participant($params) {
-  require_once 'CRM/Event/BAO/ParticipantStatusType.php';
   $result = CRM_Event_BAO_ParticipantStatusType::process($params);
 
   if (!$result['is_error']) {
@@ -431,8 +419,13 @@ function civicrm_api3_job_process_participant($params) {
  * @access public
  */
 function civicrm_api3_job_process_membership($params) {
-  require_once 'CRM/Member/BAO/Membership.php';
+  $lock = new CRM_Core_Lock('civimail.job.updateMembership');
+  if (!$lock->isAcquired()) {
+    return civicrm_api3_create_error('Could not acquire lock, another EmailProcessor process is running');
+  }
+
   $result = CRM_Member_BAO_Membership::updateAllMembershipStatus();
+  $lock->release();
 
   if ($result['is_error'] == 0) {
     return civicrm_api3_create_success($result['messages']);
@@ -452,7 +445,6 @@ function civicrm_api3_job_process_membership($params) {
  * @access public
  */
 function civicrm_api3_job_process_respondent($params) {
-  require_once 'CRM/Campaign/BAO/Survey.php';
   $result = CRM_Campaign_BAO_Survey::releaseRespondent($params);
 
   if ($result['is_error'] == 0) {
@@ -487,7 +479,6 @@ function civicrm_api3_job_process_batch_merge($params) {
   $mode = CRM_Utils_Array::value('mode', $params, 'safe');
   $autoFlip = CRM_Utils_Array::value('auto_flip', $params, TRUE);
 
-  require_once 'CRM/Dedupe/Merger.php';
   $result = CRM_Dedupe_Merger::batchMerge($rgid, $gid, $mode, $autoFlip);
 
   if ($result['is_error'] == 0) {
@@ -510,8 +501,6 @@ function civicrm_api3_job_process_batch_merge($params) {
  */
 function civicrm_api3_job_run_payment_cron($params) {
 
-  require_once 'CRM/Core/Payment.php';
-
   // live mode
   CRM_Core_Payment::handlePaymentMethod(
     'PaymentCron',
@@ -545,8 +534,6 @@ function civicrm_api3_job_run_payment_cron($params) {
  * @access public
  */
 function civicrm_api3_job_cleanup( $params ) {
-  require_once 'CRM/Utils/Array.php';
-
   $session   = CRM_Utils_Array::value( 'session'   , $params, true  );
   $tempTable = CRM_Utils_Array::value( 'tempTables', $params, true  );
   $jobLog    = CRM_Utils_Array::value( 'jobLog'    , $params, true  );
@@ -555,7 +542,6 @@ function civicrm_api3_job_cleanup( $params ) {
   $memCache  = CRM_Utils_Array::value( 'memCache'  , $params, false );
 
   if ( $session || $tempTable || $prevNext ) {
-    require_once 'CRM/Core/BAO/Cache.php';
     CRM_Core_BAO_Cache::cleanup( $session, $tempTable, $prevNext );
   }
 
@@ -593,7 +579,15 @@ function civicrm_api3_job_disable_expired_relationships($params) {
  * and use the cache
  */
 function civicrm_api3_job_group_rebuild( $params ) {
+  $lock = new CRM_Core_Lock('civimail.job.groupRebuild');
+  if (!$lock->isAcquired()) {
+    return civicrm_api3_create_error('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();
 }