public function minutely_remove_deleted($keyword_array) { try { $keyword_id = isset($keyword_array['id']) ? $keyword_array['id'] : NULL; $keyword = new Keyword($keyword_id); if (!$keyword->exists()) { throw new Exception('kwid: ' . $keyword_id . ' doesn\'t exist.'); } $keyword_rank = Keyword_rank::inst()->get_by_keyword_id($keyword_id); $keyword_rank->delete_all(); $keyword->delete(); log_message('TASK_SUCCESS', __FUNCTION__ . ' > ' . 'Keyword and keyword rank for kwid: ' . $keyword->id . ' deleted'); } catch (Exception $e) { log_message('TASK_ERROR', __FUNCTION__ . ' > ' . $e->getMessage()); throw $e; } }
/** * Function for dev to add test rank for keywords */ public function add_test_rank() { $start_date = strtotime('-2 year'); $end_date = strtotime('today'); $keywords = Keyword::inst()->get_user_keywords($this->c_user->id, $this->profile->id); for ($i = $start_date; $i <= $end_date; $i += 86400) { foreach ($keywords as $keyword) { $kr = Keyword_rank::inst()->where(array('keyword_id' => $keyword->id, 'date' => date('Y-m-d', $i)))->get(1); $kr->rank = rand(1, 100); $kr->keyword_id = $keyword->id; $kr->date = date('Y-m-d', $i); $kr->save(); } } }
/** * Return keyword average rank for each day (average for all user keywords for 1 day) in range * * @param $user_id (int) * @param $from (string) - string for strtotime * @param $to (string) - string for strtotime * @param $group (bool) - if true - return single average result for all date range, if false - return value for each day in range * @return array - of arrays, each child array has "value" with average rank and "date" with date */ public static function average_for_range($user_id, $from = '-1 month', $to = 'today', $group = TRUE) { $ci =& get_instance(); $ci->load->library('gls'); $max_rank = $ci->gls->max_results(); $kr = Keyword_rank::inst(); $kr->select('date, AVG(rank) as value')->where_related('keyword', 'user_id', $user_id)->where_related('keyword', 'is_deleted', 0)->where(array('date >=' => date('Y-m-d', strtotime($from)), 'date <=' => date('Y-m-d', strtotime($to)), 'rank < ' => $max_rank)); if (!$group) { $kr->group_by('date')->order_by('date ASC'); } $result = $kr->get()->all_to_array(array('date', 'value')); return !$group ? $result : (isset($result[0]['value']) ? $result[0]['value'] : 0); }