/** * Возвращает события СБР, связанные с заданной транзакцией для отправки уведомлений. * Группируется по ид. транзакции и по pmail-функции. * @see pmail::SbrNewEvents(() * * @param integer $xids идентификаторы транзакций. * @param resource $connect коннект к БД (см. pgq -- mail_cons.php) * @return array куча инфы по событию, включая изменения, произошедшие в нем. */ static function getEventsInfo4Sending($xids, $connect = NULL) { self::$connect = $connect ? $connect : DBConnect(); $xids = implode(',', $xids); if (!$xids) { return NULL; } $sql = "\n SELECT se.id, ec.level, se.sbr_id, ec.abbr, se.version, se.ev_code, se.xact_id, se.foronly_role, sx.xtime as ev_time, sx.xtype, ec.name as ev_name, ec.own_rel, ec.own_role, ec.pmail_fn,\n s.name as sbr_name, ss.name as stage_name, se.own_id, st.rel, st.col, sv.old_val, sv.new_val, sv.note,\n ss.frl_feedback_id, ss.emp_feedback_id, ss.id as stage_id,\n e.uid as e_uid, e.login as e_login, e.uname as e_uname, e.usurname as e_usurname, e.email as e_email,\n f.uid as f_uid, f.login as f_login, f.uname as f_uname, f.usurname as f_usurname, f.email as f_email,\n s.reserved_id, s.scheme_type, s.posted\n FROM sbr_xacts sx\n INNER JOIN\n sbr_events se\n ON se.xact_id = sx.id\n AND COALESCE(se.foronly_role, -100) <> 0\n INNER JOIN\n sbr_ev_codes ec\n ON ec.id = se.ev_code\n AND ec.pmail_fn IS NOT NULL\n INNER JOIN sbr s\n ON s.id = se.sbr_id\n AND (s.status NOT IN (" . sbr::STATUS_REFUSED . "," . sbr::STATUS_CANCELED . ") OR ec.id IN (sbr_evc('sbr.REFUSE'), sbr_evc('sbr.CANCEL')))\n INNER JOIN\n employer e\n ON e.uid = s.emp_id\n INNER JOIN\n freelancer f\n ON f.uid = s.frl_id\n LEFT JOIN\n sbr_stages ss\n --ON ss.id = se.own_id\n --AND ec.own_rel = 'sbr_stages'\n -- если событие не связано с этапом, а со всей сделкой, то подключается первый этап\n ON ( ss.id = se.own_id AND ec.own_rel = 'sbr_stages' ) OR (ss.sbr_id = se.own_id AND ec.own_rel = 'sbr' AND ss.num = 0 )\n LEFT JOIN\n sbr_versions sv\n INNER JOIN\n sbr_types st\n ON st.id = sv.src_type_id\n ON sv.event_id = se.id\n WHERE sx.id IN ({$xids})\n ORDER BY se.xact_id, se.sbr_id, ec.level, se.id\n "; if ($res = pg_query(self::connect(), $sql)) { $ret = array(); while ($row = pg_fetch_assoc($res)) { if ($row['pmail_fn']) { $ret[$row['xact_id']][$row['pmail_fn']][] = $row; } } } return $ret; }