findViewOfItem($incomingData); $itemViewParams = ['status' => 'completed']; if ($item['display_order'] != 1) { $previousItemView = $this->findViewOfPreviousItem($incomingData); $itemViewParams['start_time'] = $previousItemView['start_time'] + $previousItemView['total_time']; $itemView['start_time'] = $itemViewParams['start_time']; } $itemViewParams['total_time'] = $incomingData['end_time'] - $itemView['start_time']; \Database::update( $tblLpItemView, $itemViewParams, ['iid = ?' => [$itemView['iid']]] ); return $itemView['iid']; } /** * @throws \Exception * * @return array */ private function findViewOfItem(array $incomingData) { $itemView = \Database::fetch_assoc( \Database::query( "SELECT lpiv.iid, lpiv.start_time FROM c_lp_item_view lpiv INNER JOIN c_lp_view lpv ON (lpv.iid = lpiv.lp_view_id AND lpv.c_id = lpiv.c_id) WHERE lpiv.lp_item_id = {$incomingData['item_id']} AND lpv.user_id = {$incomingData['user_id']} LIMIT 1" ) ); if (!$itemView) { throw new \Exception("Item view not found for "."item ({$incomingData['item_id']}) and user ({$incomingData['user_id']})."); } return $itemView; } /** * @throws \Exception * * @return array */ private function findViewOfPreviousItem(array $incomingData) { $result = \Database::query( "SELECT lpiv.start_time, lpiv.total_time FROM c_lp_item_view lpiv INNER JOIN c_lp_view lpv ON (lpv.iid = lpiv.lp_view_id AND lpv.c_id = lpiv.c_id) INNER JOIN c_lp_item lpi ON (lpi.iid = lpiv.lp_item_id AND lpi.c_id = lpiv.c_id) WHERE lpi.next_item_id = {$incomingData['item_id']} AND lpv.user_id = {$incomingData['user_id']} LIMIT 1" ); $previousItemView = \Database::fetch_assoc($result); if (!$previousItemView) { throw new \Exception("Item view not found for "."previous item ({$incomingData['item_id']}) and user ({$incomingData['user_id']})."); } return $previousItemView; } }