. * * @file * @ingroup Skins */ namespace Skins\Chameleon\Menu; use Message; /** * Class MenuFactory * * @author Stephan Gambke * @since 1.0 * @ingroup Skins */ class MenuFactory { /** * @param Message|string|string[] $message * @param bool $forContent * * @throws \MWException * * @return Menu */ public function getMenuFromMessage( $message, $forContent = false ) { if ( is_string( $message ) || is_array( $message ) ) { $message = Message::newFromKey( $message ); } $this->assert( $message instanceof Message, 'String, array of strings or Message object expected.', $message ); if ( $forContent ) { $message = $message->inContentLanguage(); } if ( !$message->exists() ) { return $this->getMenuFromMessageText( '', $forContent ); } return $this->getMenuFromMessageText( $message->text(), $forContent ); } /** * @param string $text * @param bool $forContent * * @return Menu * @throws \MWException */ public function getMenuFromMessageText( $text, $forContent = false ) { $this->assert( is_string( $text ), 'String expected.', $text ); $lines = explode( "\n", trim( $text ) ); return new MenuFromLines( $lines, $forContent ); } /** * @param $message * @throws \MWException */ protected function assert( $condition, $message, $target ) { if ( !$condition ) { throw new \MWException( $message . ' Got ' . (is_object( $target ) ? get_class( $target ) : gettype( $target )) . '.' ); } } }