" . static::LONGSTANDING_AT_ATE_SYNC_COUNT . " as isLongstanding FROM {$wpdb->prefix}icl_translate_job as jobs INNER JOIN {$wpdb->prefix}icl_translation_status translation_status ON translation_status.rid = jobs.rid INNER JOIN {$wpdb->prefix}icl_translations translations ON translation_status.translation_id = translations.translation_id INNER JOIN {$wpdb->prefix}icl_translations parent_translations ON translations.trid = parent_translations.trid AND parent_translations.source_language_code IS NULL INNER JOIN {$wpdb->prefix}posts posts ON parent_translations.element_id = posts.ID WHERE jobs.editor = %s AND ( translation_status.status IN ({$statuses}) OR $needsReviewCondition ) AND translations.language_code IN ({$languages}) AND posts.post_status <> 'trash' GROUP BY jobs.rid; "; return Fns::map( Obj::evolve( [ 'rid' => Cast::toInt(), 'jobId' => Cast::toInt(), 'ateJobId' => Cast::toInt(), 'automatic' => Cast::toBool(), 'status' => Cast::toInt(), 'isLongstanding' => Cast::toBool(), ] ), $wpdb->get_results( $wpdb->prepare( $sql, \WPML_TM_Editors::ATE ) ) ); } /** * @return array */ public static function getJobsToSync() { return self::getJobsWithStatus( [ ICL_TM_WAITING_FOR_TRANSLATOR, ICL_TM_IN_PROGRESS, ICL_TM_ATE_NEEDS_RETRY ] ); } /** * @return array */ public static function getJobsToRetry() { return self::getJobsWithStatus( [ ICL_TM_ATE_NEEDS_RETRY ] ); } /** * @return int */ public static function getTotal() { global $wpdb; $sql = " SELECT COUNT(jobs.job_id) FROM {$wpdb->prefix}icl_translate_job as jobs WHERE jobs.editor = %s "; return (int) $wpdb->get_var( $wpdb->prepare( $sql, \WPML_TM_Editors::ATE ) ); } /** * @return bool */ public static function isThereJob() { global $wpdb; $noOfRowsToFetch = 1; $sql = $wpdb->prepare( "SELECT EXISTS(SELECT %d FROM {$wpdb->prefix}icl_translate_job)", $noOfRowsToFetch ); return boolval( $wpdb->get_var( $sql ) ); } }