|  |  |  | <?php
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @link http://www.yiiframework.com/
 | 
					
						
							|  |  |  |  * @copyright Copyright (c) 2008 Yii Software LLC
 | 
					
						
							|  |  |  |  * @license http://www.yiiframework.com/license/
 | 
					
						
							|  |  |  |  */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace yii\mongo\file;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Yii;
 | 
					
						
							|  |  |  | use yii\helpers\Json;
 | 
					
						
							|  |  |  | use yii\mongo\Exception;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * Class Query
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * @author Paul Klimov <klimov.paul@gmail.com>
 | 
					
						
							|  |  |  |  * @since 2.0
 | 
					
						
							|  |  |  |  */
 | 
					
						
							|  |  |  | class Query extends \yii\mongo\Query
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Returns the Mongo collection for this query.
 | 
					
						
							|  |  |  | 	 * @param \yii\mongo\Connection $db Mongo connection.
 | 
					
						
							|  |  |  | 	 * @return Collection collection instance.
 | 
					
						
							|  |  |  | 	 */
 | 
					
						
							|  |  |  | 	public function getCollection($db = null)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		if ($db === null) {
 | 
					
						
							|  |  |  | 			$db = Yii::$app->getComponent('mongo');
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 		return $db->getFileCollection($this->from);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Fetches rows from the given Mongo cursor.
 | 
					
						
							|  |  |  | 	 * @param \MongoCursor $cursor Mongo cursor instance to fetch data from.
 | 
					
						
							|  |  |  | 	 * @param boolean $all whether to fetch all rows or only first one.
 | 
					
						
							|  |  |  | 	 * @param string|callable $indexBy the column name or PHP callback,
 | 
					
						
							|  |  |  | 	 * by which the query results should be indexed by.
 | 
					
						
							|  |  |  | 	 * @throws Exception on failure.
 | 
					
						
							|  |  |  | 	 * @return array|boolean result.
 | 
					
						
							|  |  |  | 	 */
 | 
					
						
							|  |  |  | 	protected function fetchRows(\MongoCursor $cursor, $all = true, $indexBy = null)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$token = 'Querying: ' . Json::encode($cursor->info());
 | 
					
						
							|  |  |  | 		Yii::info($token, __METHOD__);
 | 
					
						
							|  |  |  | 		try {
 | 
					
						
							|  |  |  | 			Yii::beginProfile($token, __METHOD__);
 | 
					
						
							|  |  |  | 			$result = [];
 | 
					
						
							|  |  |  | 			if ($all) {
 | 
					
						
							|  |  |  | 				foreach ($cursor as $file) {
 | 
					
						
							|  |  |  | 					$row = $file->file;
 | 
					
						
							|  |  |  | 					$row['file'] = $file;
 | 
					
						
							|  |  |  | 					if ($indexBy !== null) {
 | 
					
						
							|  |  |  | 						if (is_string($indexBy)) {
 | 
					
						
							|  |  |  | 							$key = $row[$indexBy];
 | 
					
						
							|  |  |  | 						} else {
 | 
					
						
							|  |  |  | 							$key = call_user_func($indexBy, $row);
 | 
					
						
							|  |  |  | 						}
 | 
					
						
							|  |  |  | 						$result[$key] = $row;
 | 
					
						
							|  |  |  | 					} else {
 | 
					
						
							|  |  |  | 						$result[] = $row;
 | 
					
						
							|  |  |  | 					}
 | 
					
						
							|  |  |  | 				}
 | 
					
						
							|  |  |  | 			} else {
 | 
					
						
							|  |  |  | 				if ($cursor->hasNext()) {
 | 
					
						
							|  |  |  | 					$file = $cursor->getNext();
 | 
					
						
							|  |  |  | 					$result = $file->file;
 | 
					
						
							|  |  |  | 					$result['file'] = $file;
 | 
					
						
							|  |  |  | 				} else {
 | 
					
						
							|  |  |  | 					$result = false;
 | 
					
						
							|  |  |  | 				}
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 			Yii::endProfile($token, __METHOD__);
 | 
					
						
							|  |  |  | 			return $result;
 | 
					
						
							|  |  |  | 		} catch (\Exception $e) {
 | 
					
						
							|  |  |  | 			Yii::endProfile($token, __METHOD__);
 | 
					
						
							|  |  |  | 			throw new Exception($e->getMessage(), (int)$e->getCode(), $e);
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |