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);
 }