private function createUserRecord($channel, $auto_start = true, $start_time = 0, $on_stb = false, $virtual_program = null) { if (!$on_stb) { $rest_length = $this->checkTotalUserRecordsLength($this->stb->id); if ($rest_length <= 0) { throw new nPVRTotalLengthLimitError(); } } else { $rest_length = 0; } preg_match("/vtrack:(\\d+)/", $channel['mc_cmd'], $vtrack_arr); preg_match("/atrack:(\\d+)/", $channel['mc_cmd'], $atrack_arr); $vtrack = ''; $atrack = ''; if (count($vtrack_arr) > 0) { $vtrack = intval($vtrack_arr[1]); } if (count($atrack_arr)) { $atrack = intval($atrack_arr[1]); } $data = array('ch_id' => $channel['id'], 'uid' => $this->stb->id, 'atrack' => $atrack, 'vtrack' => $vtrack); $epg = new Epg(); if ($auto_start) { if ($rest_length / 60 - Config::get('record_max_length') < 0) { $length = $rest_length; } else { $length = Config::get('record_max_length') * 60; } if ($length < 0) { throw new nPVRTotalLengthLimitError(); } $program = $epg->getCurProgram($channel['id']); $data['program'] = $program['name']; $data['t_start'] = 'NOW()'; $data['started'] = 1; $data['local'] = (int) $on_stb; $data['length'] = $length; $data['t_stop'] = date("Y-m-d H:i:s", time() + $length); } else { $program = $epg->getProgramByChannelAndTime($channel['id'], $start_time); if ($virtual_program && is_array($virtual_program) && !array_key_exists('id', $virtual_program)) { $program['time'] = $virtual_program['time']; $program['time_to'] = $virtual_program['time_to']; $start_time = $program['time']; } elseif ($virtual_program) { $virtual_program['name'] = $program['name']; $program = $virtual_program; } $length = strtotime($program['time_to']) - strtotime($program['time']); if ($length < 0) { throw new nPVRServerError(); } if (!$on_stb && $rest_length - $length <= 0) { throw new nPVRTotalLengthLimitError(); } $data['program'] = $program['name']; $data['program_id'] = $program['id']; $data['program_real_id'] = $program['real_id']; $data['t_start'] = $start_time; $data['length'] = $length; $data['t_stop'] = date("Y-m-d H:i:s", strtotime($start_time) + $length); $data['local'] = (int) $on_stb; } $user_rec_id = Mysql::getInstance()->insert('users_rec', $data)->insert_id(); if ($on_stb) { return $user_rec_id; } else { $t_start = Mysql::getInstance()->from('users_rec')->where(array('id' => $user_rec_id))->get()->first('t_start'); $t_stop = date("Y-m-d H:i:s", strtotime($t_start) + $length); Mysql::getInstance()->update('users_rec', array('length' => $length, 't_stop' => $t_stop), array('id' => $user_rec_id)); } return $this->createFileRecord($user_rec_id); }