X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FPageProps.php;h=bc3e3f15297aeacf5024da2811904fe02e562989;hb=a8602d862ca0c9349c07082699c0fa8d0addb783;hp=0a3a3247898815dc69189222d56f28c4846a6c1c;hpb=fa7279c78d5b8460668d293e5fac226689bccdb5;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/PageProps.php b/includes/PageProps.php index 0a3a324789..bc3e3f1529 100644 --- a/includes/PageProps.php +++ b/includes/PageProps.php @@ -58,53 +58,76 @@ class PageProps { } /** - * Given one or more Titles and the name of a property, returns an - * associative array mapping page ID to property value. Pages in the - * provided set of Titles that do not have a value for the given - * property will not appear in the returned array. If a single Title - * is provided, it does not need to be passed in an array, but an array - * will always be returned. An empty array will be returned if no - * matching properties were found. - * - * @param array|Title $titles - * @param string $propertyName + * Given one or more Titles and one or more names of properties, + * returns an associative array mapping page ID to property value. + * Pages in the provided set of Titles that do not have a value for + * the given properties will not appear in the returned array. If a + * single Title is provided, it does not need to be passed in an array, + * but an array will always be returned. If a single property name is + * provided, it does not need to be passed in an array. In that case, + * an associtive array mapping page ID to property value will be + * returned; otherwise, an associative array mapping page ID to + * an associative array mapping property name to property value will be + * returned. An empty array will be returned if no matching properties + * were found. * + * @param Title[]|Title $titles + * @param string[]|string $propertyNames * @return array associative array mapping page ID to property value - * */ - public function getProperty( $titles, $propertyName ) { - $values = array(); + public function getProperties( $titles, $propertyNames ) { + if ( is_array( $propertyNames ) ) { + $gotArray = true; + } else { + $propertyNames = [ $propertyNames ]; + $gotArray = false; + } + + $values = []; $goodIDs = $this->getGoodIDs( $titles ); - $queryIDs = array(); + $queryIDs = []; foreach ( $goodIDs as $pageID ) { - $propertyValue = $this->getCachedProperty( $pageID, $propertyName ); - if ( $propertyValue === false ) { - $queryIDs[] = $pageID; - } else { - $values[$pageID] = $propertyValue; + foreach ( $propertyNames as $propertyName ) { + $propertyValue = $this->getCachedProperty( $pageID, $propertyName ); + if ( $propertyValue === false ) { + $queryIDs[] = $pageID; + break; + } else { + if ( $gotArray ) { + $values[$pageID][$propertyName] = $propertyValue; + } else { + $values[$pageID] = $propertyValue; + } + } } } - if ( $queryIDs != array() ) { + if ( $queryIDs ) { $dbr = wfGetDB( DB_SLAVE ); $result = $dbr->select( 'page_props', - array( + [ 'pp_page', + 'pp_propname', 'pp_value' - ), - array( + ], + [ 'pp_page' => $queryIDs, - 'pp_propname' => $propertyName - ), + 'pp_propname' => $propertyNames + ], __METHOD__ ); foreach ( $result as $row ) { $pageID = $row->pp_page; + $propertyName = $row->pp_propname; $propertyValue = $row->pp_value; $this->cacheProperty( $pageID, $propertyName, $propertyValue ); - $values[$pageID] = $propertyValue; + if ( $gotArray ) { + $values[$pageID][$propertyName] = $propertyValue; + } else { + $values[$pageID] = $propertyValue; + } } } @@ -121,15 +144,13 @@ class PageProps { * will always be returned. An empty array will be returned if no * matching properties were found. * - * @param array|Title $titles - * + * @param Title[]|Title $titles * @return array associative array mapping page ID to property value array - * */ - public function getProperties( $titles ) { - $values = array(); + public function getAllProperties( $titles ) { + $values = []; $goodIDs = $this->getGoodIDs( $titles ); - $queryIDs = array(); + $queryIDs = []; foreach ( $goodIDs as $pageID ) { $pageProperties = $this->getCachedProperties( $pageID ); if ( $pageProperties === false ) { @@ -139,36 +160,36 @@ class PageProps { } } - if ( $queryIDs != array() ) { + if ( $queryIDs != [] ) { $dbr = wfGetDB( DB_SLAVE ); $result = $dbr->select( 'page_props', - array( + [ 'pp_page', 'pp_propname', 'pp_value' - ), - array( + ], + [ 'pp_page' => $queryIDs, - ), + ], __METHOD__ ); $currentPageID = 0; - $pageProperties = array(); + $pageProperties = []; foreach ( $result as $row ) { $pageID = $row->pp_page; if ( $currentPageID != $pageID ) { - if ( $pageProperties != array() ) { + if ( $pageProperties != [] ) { $this->cacheProperties( $currentPageID, $pageProperties ); $values[$currentPageID] = $pageProperties; } $currentPageID = $pageID; - $pageProperties = array(); + $pageProperties = []; } $pageProperties[$row->pp_propname] = $row->pp_value; } - if ( $pageProperties != array() ) { + if ( $pageProperties != [] ) { $this->cacheProperties( $pageID, $pageProperties ); $values[$pageID] = $pageProperties; } @@ -178,13 +199,11 @@ class PageProps { } /** - * @param array|Title $titles - * + * @param Title[]|Title $titles * @return array array of good page IDs - * */ private function getGoodIDs( $titles ) { - $result = array(); + $result = []; if ( is_array( $titles ) ) { foreach ( $titles as $title ) { $pageID = $title->getArticleID(); @@ -206,9 +225,7 @@ class PageProps { * * @param int $pageID page ID of page being queried * @param string $propertyName name of property being queried - * * @return string|bool property value array or false if not found - * */ private function getCachedProperty( $pageID, $propertyName ) { if ( $this->cache->has( $pageID, $propertyName, self::CACHE_TTL ) ) { @@ -227,9 +244,7 @@ class PageProps { * Get properties from the cache. * * @param int $pageID page ID of page being queried - * * @return string|bool property value array or false if not found - * */ private function getCachedProperties( $pageID ) { if ( $this->cache->has( 0, $pageID, self::CACHE_TTL ) ) { @@ -244,7 +259,6 @@ class PageProps { * @param int $pageID page ID of page being cached * @param string $propertyName name of property being cached * @param mixed $propertyValue value of property - * */ private function cacheProperty( $pageID, $propertyName, $propertyValue ) { $this->cache->set( $pageID, $propertyName, $propertyValue ); @@ -254,8 +268,7 @@ class PageProps { * Save properties to the cache. * * @param int $pageID page ID of page being cached - * @param array $pageProperties associative array of page properties to be cached - * + * @param string[] $pageProperties associative array of page properties to be cached */ private function cacheProperties( $pageID, $pageProperties ) { $this->cache->clear( $pageID );