/** * Function to notify subscribers */ public static function notify(Model_Ad $ad) { $subscribers = new Model_Subscribe(); if ($ad->price > 0) { $subscribers->where_open()->where(DB::EXPR((int) $ad->price), 'BETWEEN', array('min_price', 'max_price'))->or_where('max_price', '=', 0)->where_close(); } //location is set if (is_numeric($ad->id_location)) { $subscribers->where('id_location', 'in', array($ad->id_location, 0)); } //filter by category, 0 means all the cats, in case was not set $subscribers->where('id_category', 'in', array($ad->id_category, 0)); $subscribers = $subscribers->find_all(); $subscribers_id = array(); // array to be filled with user emails foreach ($subscribers as $subs) { // do not repeat same users. if (!in_array($subs->id_user, $subscribers_id)) { $subscribers_id[] = $subs->id_user; } } // query for getting users, transform it to array and pass to email function if (count($subscribers_id) > 0) { $query = DB::select('email')->select('name')->from('users')->where('id_user', 'IN', $subscribers_id)->where('status', '=', Model_User::STATUS_ACTIVE)->execute(); $users = $query->as_array(); // Send mails like in newsletter, to multiple users simultaneously if (count($users) > 0) { $url_ad = Route::url('ad', array('category' => $ad->category->seoname, 'seotitle' => $ad->seotitle)); $replace = array('[URL.AD]' => $url_ad, '[AD.TITLE]' => $ad->title); Email::content($users, '', core::config('email.notify_email'), core::config('general.site_name'), 'ads-subscribers', $replace); } } }