├── .gitignore ├── _resources ├── data.sql └── schema.sql ├── app ├── .htaccess ├── RPG │ ├── Application │ │ ├── DefaultPresenter.php │ │ ├── Routing │ │ │ └── RouterFactory.php │ │ └── templates │ │ │ ├── @layout.latte │ │ │ └── Default │ │ │ └── default.latte │ ├── Exception │ │ ├── IException.php │ │ ├── InvalidArgumentException.php │ │ └── NotEnoughCreditsException.php │ └── Game │ │ ├── Control │ │ ├── BuyItemControl.php │ │ └── IBuyItemControlFactory.php │ │ ├── Item.php │ │ ├── ItemEventsInitializer.php │ │ ├── Marketplace.php │ │ ├── Message.php │ │ ├── Notifier.php │ │ ├── Player.php │ │ ├── Players.php │ │ └── PurchaseDetails.php ├── bootstrap.php ├── config │ ├── .gitignore │ ├── config.local.sample.neon │ ├── config.neon │ ├── parameters.neon │ └── services.neon └── web.config ├── composer.json ├── composer.lock ├── license-mit.txt ├── log ├── .htaccess └── web.config ├── readme.md ├── temp ├── .htaccess └── web.config ├── tests ├── RPG │ └── Game │ │ ├── ItemTest.php │ │ └── PlayerTest.php └── bootstrap.php ├── vendor ├── .htaccess └── web.config └── www ├── .htaccess ├── css ├── reset.css └── rpg.css ├── index.php ├── robots.txt └── web.config /.gitignore: -------------------------------------------------------------------------------- 1 | log/* 2 | temp/* 3 | vendor/* 4 | !vendor/others 5 | 6 | .DS_Store 7 | !.gitignore 8 | !.htaccess 9 | !web.config 10 | app/config/config.local.neon 11 | -------------------------------------------------------------------------------- /_resources/data.sql: -------------------------------------------------------------------------------- 1 | SET foreign_key_checks = 0; 2 | 3 | INSERT INTO `player` (`id`, `credits`) VALUES 4 | ('A', 120), 5 | ('B', 80), 6 | ('C', 20); 7 | 8 | INSERT INTO `item` (`id`, `owner_id`, `price`, `place`) VALUES 9 | (1, 'B', 20, 'inventory'), 10 | (2, 'A', 10, 'marketplace'), 11 | (3, 'A', 20, 'marketplace'), 12 | (4, 'B', 100, 'inventory'), 13 | (5, 'C', 40, 'marketplace'); 14 | -------------------------------------------------------------------------------- /_resources/schema.sql: -------------------------------------------------------------------------------- 1 | SET foreign_key_checks = 0; 2 | SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; 3 | 4 | CREATE TABLE `item` ( 5 | `id` int(11) NOT NULL, 6 | `owner_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 7 | `price` int(11) NOT NULL, 8 | `place` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'inventory', 9 | PRIMARY KEY (`id`), 10 | KEY `IDX_1F1B251E7E3C61F9` (`owner_id`), 11 | CONSTRAINT `FK_1F1B251E7E3C61F9` FOREIGN KEY (`owner_id`) REFERENCES `player` (`id`) 12 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 13 | 14 | 15 | CREATE TABLE `player` ( 16 | `id` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 17 | `credits` int(11) NOT NULL DEFAULT '100', 18 | PRIMARY KEY (`id`) 19 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 20 | 21 | 22 | CREATE TABLE `message` ( 23 | `id` int(11) NOT NULL AUTO_INCREMENT, 24 | `player_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 25 | `created` datetime NOT NULL, 26 | `content` longtext COLLATE utf8_unicode_ci NOT NULL, 27 | PRIMARY KEY (`id`), 28 | KEY `IDX_B6BD307F99E6F5DF` (`player_id`), 29 | CONSTRAINT `FK_B6BD307F99E6F5DF` FOREIGN KEY (`player_id`) REFERENCES `player` (`id`) 30 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 31 | 32 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | Order Allow,Deny 2 | Deny from all 3 | -------------------------------------------------------------------------------- /app/RPG/Application/DefaultPresenter.php: -------------------------------------------------------------------------------- 1 | template->players = $this->players->getPlayersOverview(); 33 | $this->template->messages = $this->players->getMessages(); 34 | } 35 | 36 | 37 | 38 | /** 39 | * @return BuyItemControl 40 | */ 41 | protected function createComponentBuyItemControl() 42 | { 43 | $buyItemControl = $this->buyItemControlFactory->create(); 44 | 45 | $buyItemControl->onItemBoughtByPlayer[] = function (PurchaseDetails $purchaseDetails) { 46 | $this->flashMessage('Player ' . $purchaseDetails->getNewOwner() . ' successfuly bought item ' . $purchaseDetails->getItem() . ' from player ' . $purchaseDetails->getOldOwner() . '.', 'success'); 47 | $this->redirect('this'); 48 | }; 49 | 50 | return $buyItemControl; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/RPG/Application/Routing/RouterFactory.php: -------------------------------------------------------------------------------- 1 | /[/]', 'Default:default'); 23 | 24 | return $router; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /app/RPG/Application/templates/@layout.latte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | RPG 6 | 7 | 8 | 9 | 10 | 11 |
12 |
{$flash->message}
13 | {include content} 14 |
15 | 16 | {block scripts} 17 | 18 | 19 | {/block} 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/RPG/Application/templates/Default/default.latte: -------------------------------------------------------------------------------- 1 | {block #content} 2 | 3 |
4 |
5 |

Marketplace

6 | {control buyItemControl} 7 | 8 |

Players

9 | {foreach $players as $player} 10 |

{$player->getId()} (has {$player->getCredits()} credits)

11 |
    12 |
  • {$item->getId()} (costs {$item->getPrice()} credits, is in {$item->getPlace()})
  • 13 |
14 | {/foreach} 15 |
16 |
17 |

Messages

18 |
    19 |
  • 20 | {$message->getPlayer()->getId()} 21 | {$message->getCreated()|date:'j. n. Y H:i:s'} 22 | {$message->getContent()} 23 |
  • 24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /app/RPG/Exception/IException.php: -------------------------------------------------------------------------------- 1 | current = $current; 34 | $this->required = $required; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/RPG/Game/Control/BuyItemControl.php: -------------------------------------------------------------------------------- 1 | marketplace = $marketplace; 40 | } 41 | 42 | 43 | 44 | public function render() 45 | { 46 | $this['form']->render(); 47 | } 48 | 49 | 50 | 51 | /** 52 | * @return Form 53 | */ 54 | protected function createComponentForm() 55 | { 56 | $form = new Form; 57 | 58 | $form->addSelect('buyer', 'Buyer', $this->marketplace->getPlayersList()); 59 | 60 | $form->addSelect('item', 'Item', $this->marketplace->getItemsList()); 61 | 62 | $form->addSubmit('buy', 'Buy'); 63 | 64 | $form->onSuccess[] = function (Form $form) { 65 | $values = $form->getValues(); 66 | 67 | try { 68 | $purchaseDetails = $this->marketplace->buyItemByPlayer($values->item, $values->buyer); 69 | $this->onItemBoughtByPlayer($purchaseDetails); 70 | } catch (IException $e) { 71 | // in real application we would better translate specific low-level exceptions to meaningfull messages 72 | $form->addError($e->getMessage()); 73 | } 74 | }; 75 | 76 | return $form; 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /app/RPG/Game/Control/IBuyItemControlFactory.php: -------------------------------------------------------------------------------- 1 | id = $id; 71 | $this->owner = $owner;; 72 | $this->price = $price; 73 | 74 | $owner->addItem($this); 75 | $this->isReleased = FALSE; 76 | } 77 | 78 | 79 | 80 | /** 81 | * @return int 82 | */ 83 | public function getId() 84 | { 85 | return $this->id; 86 | } 87 | 88 | 89 | 90 | /** 91 | * @param Player $newOwner 92 | */ 93 | public function changeOwner(Player $newOwner) 94 | { 95 | if ($this->owner !== $newOwner) { 96 | $this->isReleased = TRUE; 97 | 98 | $oldOwner = $this->owner; 99 | $oldOwner->removeItem($this); 100 | $this->owner = $newOwner; 101 | $newOwner->addItem($this); 102 | 103 | $this->isReleased = FALSE; 104 | $this->moveToInventory(); 105 | 106 | $this->onOwnerChanged($this, $oldOwner, $newOwner); 107 | } 108 | } 109 | 110 | 111 | 112 | /** 113 | * @return bool 114 | */ 115 | public function isReleased() 116 | { 117 | return $this->isReleased; 118 | } 119 | 120 | 121 | 122 | /** 123 | * @return int 124 | */ 125 | public function getPrice() 126 | { 127 | return $this->price; 128 | } 129 | 130 | 131 | 132 | /** 133 | * @return Player 134 | */ 135 | public function getOwner() 136 | { 137 | return $this->owner; 138 | } 139 | 140 | 141 | 142 | public function moveToInventory() 143 | { 144 | $this->place = self::PLACE_INVENTORY; 145 | } 146 | 147 | 148 | 149 | public function moveToMarket() 150 | { 151 | $this->place = self::PLACE_MARKET; 152 | } 153 | 154 | 155 | 156 | /** 157 | * @return string 158 | */ 159 | public function getPlace() 160 | { 161 | return $this->place; 162 | } 163 | 164 | 165 | 166 | /** 167 | * @return string 168 | */ 169 | public function __toString() 170 | { 171 | return '#' . $this->id; 172 | } 173 | 174 | } 175 | -------------------------------------------------------------------------------- /app/RPG/Game/ItemEventsInitializer.php: -------------------------------------------------------------------------------- 1 | notifier = $notifier; 26 | } 27 | 28 | 29 | 30 | /** 31 | * @ORM\PostLoad 32 | * @param Item $item 33 | */ 34 | public function initializeEvents(Item $item) 35 | { 36 | $item->onOwnerChanged['notify'] = function (Item $item, Player $oldOwner, Player $newOwner) { 37 | $this->notifier->notifyPlayerAboutRemovedItem($oldOwner, $item); 38 | $this->notifier->notifyPlayerAboutAddedItem($newOwner, $item); 39 | }; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/RPG/Game/Marketplace.php: -------------------------------------------------------------------------------- 1 | entityManager = $entityManager; 37 | 38 | $this->playerRepository = $entityManager->getRepository(Player::class); 39 | $this->itemRepository = $entityManager->getRepository(Item::class); 40 | } 41 | 42 | 43 | 44 | /** 45 | * @return string[] 46 | */ 47 | public function getPlayersList() 48 | { 49 | return $this->playerRepository->findPairs('id', ['id']); 50 | } 51 | 52 | 53 | 54 | /** 55 | * @return int[] 56 | */ 57 | public function getItemsList() 58 | { 59 | return $this->itemRepository->findPairs('id', ['id']); 60 | } 61 | 62 | 63 | 64 | /** 65 | * @param Item|int $item 66 | * @param Player|string $buyer 67 | * @return PurchaseDetails 68 | */ 69 | public function buyItemByPlayer($item, $buyer) 70 | { 71 | if (!($item instanceof Item)) { 72 | $item = $this->itemRepository->find($item); 73 | } 74 | 75 | if (!($buyer instanceof Player)) { 76 | $buyer = $this->playerRepository->find($buyer); 77 | } 78 | 79 | $oldOwner = $item->getOwner(); 80 | $buyer->buyItem($item); 81 | $this->entityManager->flush(); 82 | 83 | return new PurchaseDetails($item, $oldOwner, $buyer); 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /app/RPG/Game/Message.php: -------------------------------------------------------------------------------- 1 | player = $player; 54 | $this->created = DateTime::from($created); 55 | $this->content = $content; 56 | } 57 | 58 | 59 | 60 | /** 61 | * @return Player 62 | */ 63 | public function getPlayer() 64 | { 65 | return $this->player; 66 | } 67 | 68 | 69 | 70 | /** 71 | * @return DateTime 72 | */ 73 | public function getCreated() 74 | { 75 | return clone $this->created; 76 | } 77 | 78 | 79 | 80 | /** 81 | * @return string 82 | */ 83 | public function getContent() 84 | { 85 | return $this->content; 86 | } 87 | 88 | } 89 | -------------------------------------------------------------------------------- /app/RPG/Game/Notifier.php: -------------------------------------------------------------------------------- 1 | entityManager = $entityManager; 27 | } 28 | 29 | 30 | 31 | /** 32 | * @param Player $player 33 | * @param Item $item 34 | * $throws InvalidArgumentException 35 | */ 36 | public function notifyPlayerAboutAddedItem(Player $player, Item $item) 37 | { 38 | if ($item->getOwner() !== $player) { 39 | throw new InvalidArgumentException("Player $player doesn't own item $item."); 40 | } 41 | 42 | $message = new Message($player, "You've just got item $item"); 43 | $this->entityManager->persist($message); 44 | } 45 | 46 | 47 | 48 | /** 49 | * @param Player $player 50 | * @param Item $item 51 | * $throws InvalidArgumentException 52 | */ 53 | public function notifyPlayerAboutRemovedItem(Player $player, Item $item) 54 | { 55 | if ($item->getOwner() === $player) { 56 | throw new InvalidArgumentException("Player $player still owns item $item."); 57 | } 58 | 59 | $message = new Message($player, "You've just released item $item"); 60 | $this->entityManager->persist($message); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /app/RPG/Game/Player.php: -------------------------------------------------------------------------------- 1 | id = $id; 48 | $this->items = new ArrayCollection; 49 | } 50 | 51 | 52 | 53 | /** 54 | * @return string 55 | */ 56 | public function getId() 57 | { 58 | return $this->id; 59 | } 60 | 61 | 62 | 63 | /** 64 | * @return Item[] 65 | */ 66 | public function getItems() 67 | { 68 | return $this->items->toArray(); 69 | } 70 | 71 | 72 | 73 | /** 74 | * @param Item $item 75 | * @throws NotEnoughCreditsException 76 | */ 77 | public function buyItem(Item $item) 78 | { 79 | if ($item->getOwner() === $this) { 80 | throw new InvalidArgumentException("Player $this already owns item $item."); 81 | } 82 | $price = $item->getPrice(); 83 | 84 | if ($price > $this->credits) { 85 | throw new NotEnoughCreditsException("Player $this doesn't have enough credits to buy item $item.", $this->credits, $price); 86 | } 87 | 88 | $this->credits -= $price; 89 | $item->getOwner()->receiveCredits($price); 90 | $item->changeOwner($this); 91 | } 92 | 93 | 94 | 95 | /** 96 | * @param int $credits 97 | * @throws InvalidArgumentException 98 | */ 99 | public function receiveCredits($credits) 100 | { 101 | if ($credits <= 0) { 102 | throw new InvalidArgumentException('Invalid credits value given: ' . $credits . '.'); 103 | } 104 | 105 | $this->credits += $credits; 106 | } 107 | 108 | 109 | 110 | /** 111 | * @return int 112 | */ 113 | public function getCredits() 114 | { 115 | return $this->credits; 116 | } 117 | 118 | 119 | 120 | /** 121 | * Use only for management of inverse side of bidirectional association 122 | * 123 | * @param Item $item 124 | * @throws InvalidArgumentException 125 | */ 126 | public function removeItem(Item $item) 127 | { 128 | if (!$item->isReleased()) { 129 | throw new InvalidArgumentException("Cannot remove item that isn't released."); 130 | } 131 | 132 | if (!$this->items->contains($item)) { 133 | throw new InvalidArgumentException("Player $this doesn't have given item $item."); 134 | } 135 | 136 | $this->items->removeElement($item); 137 | } 138 | 139 | 140 | 141 | /** 142 | * Use only for management of inverse side of bidirectional association 143 | * 144 | * @param Item $item 145 | * @throws InvalidArgumentException 146 | */ 147 | public function addItem(Item $item) 148 | { 149 | if (!$item->isReleased()) { 150 | throw new InvalidArgumentException("Cannot add item that isn't released."); 151 | } 152 | 153 | if ($this->items->contains($item)) { 154 | throw new InvalidArgumentException("Player $this already has given item $item."); 155 | } 156 | 157 | $this->items->add($item); 158 | } 159 | 160 | 161 | 162 | /** 163 | * @return string 164 | */ 165 | public function __toString() 166 | { 167 | return '#' . $this->id; 168 | } 169 | 170 | } 171 | -------------------------------------------------------------------------------- /app/RPG/Game/Players.php: -------------------------------------------------------------------------------- 1 | playerRepository = $entityManager->getRepository(Player::class); 34 | $this->messageRepository = $entityManager->getRepository(Message::class); 35 | } 36 | 37 | 38 | 39 | /** 40 | * @return Player[] 41 | */ 42 | public function getPlayersOverview() 43 | { 44 | $players = $this->playerRepository->findBy([], ['id' => 'ASC']); 45 | 46 | $this->playerRepository->createQueryBuilder('p') 47 | ->select('partial p.{id}') 48 | ->leftJoin('p.items', 'i')->addSelect('i') 49 | ->where('p IN (:players)')->setParameter('players', $players) 50 | ->orderBy('i.id') 51 | ->getQuery()->getResult(); 52 | 53 | return $players; 54 | } 55 | 56 | 57 | 58 | /** 59 | * @return Message[] 60 | */ 61 | public function getMessages() 62 | { 63 | return $this->messageRepository->findBy([], ['created' => 'DESC', 'id' => 'DESC'], self::MESSAGES_LIMIT); 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /app/RPG/Game/PurchaseDetails.php: -------------------------------------------------------------------------------- 1 | item = $item; 37 | $this->oldOwner = $oldOwner; 38 | $this->newOwner = $newOwner; 39 | } 40 | 41 | 42 | 43 | /** 44 | * @return Item 45 | */ 46 | public function getItem() 47 | { 48 | return $this->item; 49 | } 50 | 51 | 52 | 53 | /** 54 | * @return Player 55 | */ 56 | public function getOldOwner() 57 | { 58 | return $this->oldOwner; 59 | } 60 | 61 | 62 | 63 | /** 64 | * @return Player 65 | */ 66 | public function getNewOwner() 67 | { 68 | return $this->newOwner; 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /app/bootstrap.php: -------------------------------------------------------------------------------- 1 | setDebugMode(file_exists(__DIR__ . '/config/dev')); 8 | $configurator->enableDebugger(__DIR__ . '/../log'); 9 | $configurator->setTempDirectory(__DIR__ . '/../temp'); 10 | 11 | $configurator->addConfig(__DIR__ . '/config/config.neon'); 12 | 13 | if (file_exists(__DIR__ . '/config/config.local.neon')) { 14 | $configurator->addConfig(__DIR__ . '/config/config.local.neon'); 15 | } 16 | 17 | $container = $configurator->createContainer(); 18 | 19 | return $container; 20 | -------------------------------------------------------------------------------- /app/config/.gitignore: -------------------------------------------------------------------------------- 1 | config.local.neon 2 | dev 3 | -------------------------------------------------------------------------------- /app/config/config.local.sample.neon: -------------------------------------------------------------------------------- 1 | doctrine: 2 | host: 127.0.0.1 3 | user: root 4 | password: 5 | dbname: rpg 6 | -------------------------------------------------------------------------------- /app/config/config.neon: -------------------------------------------------------------------------------- 1 | php: 2 | date.timezone: Europe/Prague 3 | 4 | application: 5 | mapping: 6 | *: RPG\Application\*Presenter 7 | 8 | session: 9 | expiration: 14 days 10 | 11 | doctrine: 12 | user: root 13 | password: 14 | dbname: rpg 15 | metadata: 16 | RPG: %appDir%/RPG 17 | 18 | extensions: 19 | console: Kdyby\Console\DI\ConsoleExtension 20 | events: Kdyby\Events\DI\EventsExtension 21 | annotations: Kdyby\Annotations\DI\AnnotationsExtension 22 | doctrine: Kdyby\Doctrine\DI\OrmExtension 23 | 24 | includes: 25 | - parameters.neon 26 | - services.neon 27 | -------------------------------------------------------------------------------- /app/config/parameters.neon: -------------------------------------------------------------------------------- 1 | parameters: 2 | -------------------------------------------------------------------------------- /app/config/services.neon: -------------------------------------------------------------------------------- 1 | services: 2 | - RPG\Application\Routing\RouterFactory 3 | router: @RPG\Application\Routing\RouterFactory::createRouter 4 | - RPG\Game\ItemEventsInitializer 5 | - RPG\Game\Notifier 6 | - RPG\Game\Marketplace 7 | - RPG\Game\Control\IBuyItemControlFactory 8 | - RPG\Game\Players 9 | -------------------------------------------------------------------------------- /app/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "php": ">= 5.5.0", 4 | "nette/nette": "~2.3", 5 | "mockery/mockery": "0.9.*@dev", 6 | "symfony/console": "2.6.*@dev", 7 | "kdyby/doctrine": "~2.1@dev" 8 | }, 9 | "require-dev": { 10 | "nette/tester": "~1.3" 11 | }, 12 | "minimum-stability": "dev", 13 | "autoload": { 14 | "psr-0": { 15 | "RPG": "app/" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "ceec4d06147547fe88325ab415ab49f8", 8 | "packages": [ 9 | { 10 | "name": "doctrine/annotations", 11 | "version": "dev-master", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/annotations.git", 15 | "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/b5202eb9e83f8db52e0e58867e0a46e63be8332e", 20 | "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "doctrine/lexer": "1.*", 25 | "php": ">=5.3.2" 26 | }, 27 | "require-dev": { 28 | "doctrine/cache": "1.*", 29 | "phpunit/phpunit": "4.*" 30 | }, 31 | "type": "library", 32 | "extra": { 33 | "branch-alias": { 34 | "dev-master": "1.3.x-dev" 35 | } 36 | }, 37 | "autoload": { 38 | "psr-0": { 39 | "Doctrine\\Common\\Annotations\\": "lib/" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Roman Borschel", 49 | "email": "roman@code-factory.org" 50 | }, 51 | { 52 | "name": "Benjamin Eberlei", 53 | "email": "kontakt@beberlei.de" 54 | }, 55 | { 56 | "name": "Guilherme Blanco", 57 | "email": "guilhermeblanco@gmail.com" 58 | }, 59 | { 60 | "name": "Jonathan Wage", 61 | "email": "jonwage@gmail.com" 62 | }, 63 | { 64 | "name": "Johannes Schmitt", 65 | "email": "schmittjoh@gmail.com" 66 | } 67 | ], 68 | "description": "Docblock Annotations Parser", 69 | "homepage": "http://www.doctrine-project.org", 70 | "keywords": [ 71 | "annotations", 72 | "docblock", 73 | "parser" 74 | ], 75 | "time": "2014-12-23 22:40:37" 76 | }, 77 | { 78 | "name": "doctrine/cache", 79 | "version": "dev-master", 80 | "source": { 81 | "type": "git", 82 | "url": "https://github.com/doctrine/cache.git", 83 | "reference": "6c5c32eb6c596993d04e13b95d0c1e8153783d7a" 84 | }, 85 | "dist": { 86 | "type": "zip", 87 | "url": "https://api.github.com/repos/doctrine/cache/zipball/6c5c32eb6c596993d04e13b95d0c1e8153783d7a", 88 | "reference": "6c5c32eb6c596993d04e13b95d0c1e8153783d7a", 89 | "shasum": "" 90 | }, 91 | "require": { 92 | "php": ">=5.3.2" 93 | }, 94 | "conflict": { 95 | "doctrine/common": ">2.2,<2.4" 96 | }, 97 | "require-dev": { 98 | "phpunit/phpunit": ">=3.7", 99 | "predis/predis": "~1.0", 100 | "satooshi/php-coveralls": "~0.6" 101 | }, 102 | "type": "library", 103 | "extra": { 104 | "branch-alias": { 105 | "dev-master": "1.5.x-dev" 106 | } 107 | }, 108 | "autoload": { 109 | "psr-0": { 110 | "Doctrine\\Common\\Cache\\": "lib/" 111 | } 112 | }, 113 | "notification-url": "https://packagist.org/downloads/", 114 | "license": [ 115 | "MIT" 116 | ], 117 | "authors": [ 118 | { 119 | "name": "Roman Borschel", 120 | "email": "roman@code-factory.org" 121 | }, 122 | { 123 | "name": "Benjamin Eberlei", 124 | "email": "kontakt@beberlei.de" 125 | }, 126 | { 127 | "name": "Guilherme Blanco", 128 | "email": "guilhermeblanco@gmail.com" 129 | }, 130 | { 131 | "name": "Jonathan Wage", 132 | "email": "jonwage@gmail.com" 133 | }, 134 | { 135 | "name": "Johannes Schmitt", 136 | "email": "schmittjoh@gmail.com" 137 | } 138 | ], 139 | "description": "Caching library offering an object-oriented API for many cache backends", 140 | "homepage": "http://www.doctrine-project.org", 141 | "keywords": [ 142 | "cache", 143 | "caching" 144 | ], 145 | "time": "2015-02-16 12:24:01" 146 | }, 147 | { 148 | "name": "doctrine/collections", 149 | "version": "dev-master", 150 | "source": { 151 | "type": "git", 152 | "url": "https://github.com/doctrine/collections.git", 153 | "reference": "c63f2e637c6ac759d83002906c30e6c96d91e5f3" 154 | }, 155 | "dist": { 156 | "type": "zip", 157 | "url": "https://api.github.com/repos/doctrine/collections/zipball/c63f2e637c6ac759d83002906c30e6c96d91e5f3", 158 | "reference": "c63f2e637c6ac759d83002906c30e6c96d91e5f3", 159 | "shasum": "" 160 | }, 161 | "require": { 162 | "php": ">=5.3.2" 163 | }, 164 | "require-dev": { 165 | "phpunit/phpunit": "~4.0" 166 | }, 167 | "type": "library", 168 | "extra": { 169 | "branch-alias": { 170 | "dev-master": "1.2.x-dev" 171 | } 172 | }, 173 | "autoload": { 174 | "psr-0": { 175 | "Doctrine\\Common\\Collections\\": "lib/" 176 | } 177 | }, 178 | "notification-url": "https://packagist.org/downloads/", 179 | "license": [ 180 | "MIT" 181 | ], 182 | "authors": [ 183 | { 184 | "name": "Roman Borschel", 185 | "email": "roman@code-factory.org" 186 | }, 187 | { 188 | "name": "Benjamin Eberlei", 189 | "email": "kontakt@beberlei.de" 190 | }, 191 | { 192 | "name": "Guilherme Blanco", 193 | "email": "guilhermeblanco@gmail.com" 194 | }, 195 | { 196 | "name": "Jonathan Wage", 197 | "email": "jonwage@gmail.com" 198 | }, 199 | { 200 | "name": "Johannes Schmitt", 201 | "email": "schmittjoh@gmail.com" 202 | } 203 | ], 204 | "description": "Collections Abstraction library", 205 | "homepage": "http://www.doctrine-project.org", 206 | "keywords": [ 207 | "array", 208 | "collections", 209 | "iterator" 210 | ], 211 | "time": "2015-01-21 05:12:54" 212 | }, 213 | { 214 | "name": "doctrine/common", 215 | "version": "dev-master", 216 | "source": { 217 | "type": "git", 218 | "url": "https://github.com/doctrine/common.git", 219 | "reference": "0e11c342d167c75f083358fa7825657ea4ab10eb" 220 | }, 221 | "dist": { 222 | "type": "zip", 223 | "url": "https://api.github.com/repos/doctrine/common/zipball/0e11c342d167c75f083358fa7825657ea4ab10eb", 224 | "reference": "0e11c342d167c75f083358fa7825657ea4ab10eb", 225 | "shasum": "" 226 | }, 227 | "require": { 228 | "doctrine/annotations": "1.*", 229 | "doctrine/cache": "1.*", 230 | "doctrine/collections": "1.*", 231 | "doctrine/inflector": "1.*", 232 | "doctrine/lexer": "1.*", 233 | "php": ">=5.3.2" 234 | }, 235 | "require-dev": { 236 | "phpunit/phpunit": "~3.7" 237 | }, 238 | "type": "library", 239 | "extra": { 240 | "branch-alias": { 241 | "dev-master": "2.5.x-dev" 242 | } 243 | }, 244 | "autoload": { 245 | "psr-0": { 246 | "Doctrine\\Common\\": "lib/" 247 | } 248 | }, 249 | "notification-url": "https://packagist.org/downloads/", 250 | "license": [ 251 | "MIT" 252 | ], 253 | "authors": [ 254 | { 255 | "name": "Roman Borschel", 256 | "email": "roman@code-factory.org" 257 | }, 258 | { 259 | "name": "Benjamin Eberlei", 260 | "email": "kontakt@beberlei.de" 261 | }, 262 | { 263 | "name": "Guilherme Blanco", 264 | "email": "guilhermeblanco@gmail.com" 265 | }, 266 | { 267 | "name": "Jonathan Wage", 268 | "email": "jonwage@gmail.com" 269 | }, 270 | { 271 | "name": "Johannes Schmitt", 272 | "email": "schmittjoh@gmail.com" 273 | } 274 | ], 275 | "description": "Common Library for Doctrine projects", 276 | "homepage": "http://www.doctrine-project.org", 277 | "keywords": [ 278 | "annotations", 279 | "collections", 280 | "eventmanager", 281 | "persistence", 282 | "spl" 283 | ], 284 | "time": "2015-02-25 13:42:36" 285 | }, 286 | { 287 | "name": "doctrine/dbal", 288 | "version": "dev-master", 289 | "source": { 290 | "type": "git", 291 | "url": "https://github.com/doctrine/dbal.git", 292 | "reference": "cc7e4fefb98b90cef783daf73afcc0d8b6a05653" 293 | }, 294 | "dist": { 295 | "type": "zip", 296 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/cc7e4fefb98b90cef783daf73afcc0d8b6a05653", 297 | "reference": "cc7e4fefb98b90cef783daf73afcc0d8b6a05653", 298 | "shasum": "" 299 | }, 300 | "require": { 301 | "doctrine/common": ">=2.4,<2.6-dev", 302 | "php": ">=5.3.2" 303 | }, 304 | "require-dev": { 305 | "phpunit/phpunit": "4.*", 306 | "symfony/console": "2.*" 307 | }, 308 | "suggest": { 309 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 310 | }, 311 | "bin": [ 312 | "bin/doctrine-dbal", 313 | "bin/doctrine-dbal.php" 314 | ], 315 | "type": "library", 316 | "extra": { 317 | "branch-alias": { 318 | "dev-master": "2.6.x-dev" 319 | } 320 | }, 321 | "autoload": { 322 | "psr-0": { 323 | "Doctrine\\DBAL\\": "lib/" 324 | } 325 | }, 326 | "notification-url": "https://packagist.org/downloads/", 327 | "license": [ 328 | "MIT" 329 | ], 330 | "authors": [ 331 | { 332 | "name": "Roman Borschel", 333 | "email": "roman@code-factory.org" 334 | }, 335 | { 336 | "name": "Benjamin Eberlei", 337 | "email": "kontakt@beberlei.de" 338 | }, 339 | { 340 | "name": "Guilherme Blanco", 341 | "email": "guilhermeblanco@gmail.com" 342 | }, 343 | { 344 | "name": "Jonathan Wage", 345 | "email": "jonwage@gmail.com" 346 | } 347 | ], 348 | "description": "Database Abstraction Layer", 349 | "homepage": "http://www.doctrine-project.org", 350 | "keywords": [ 351 | "database", 352 | "dbal", 353 | "persistence", 354 | "queryobject" 355 | ], 356 | "time": "2015-02-26 10:47:54" 357 | }, 358 | { 359 | "name": "doctrine/inflector", 360 | "version": "dev-master", 361 | "source": { 362 | "type": "git", 363 | "url": "https://github.com/doctrine/inflector.git", 364 | "reference": "e5eaf8c7ded0877195b5d2848491e17b1c0a6c4d" 365 | }, 366 | "dist": { 367 | "type": "zip", 368 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/e5eaf8c7ded0877195b5d2848491e17b1c0a6c4d", 369 | "reference": "e5eaf8c7ded0877195b5d2848491e17b1c0a6c4d", 370 | "shasum": "" 371 | }, 372 | "require": { 373 | "php": ">=5.3.2" 374 | }, 375 | "require-dev": { 376 | "phpunit/phpunit": "4.*" 377 | }, 378 | "type": "library", 379 | "extra": { 380 | "branch-alias": { 381 | "dev-master": "1.0.x-dev" 382 | } 383 | }, 384 | "autoload": { 385 | "psr-0": { 386 | "Doctrine\\Common\\Inflector\\": "lib/" 387 | } 388 | }, 389 | "notification-url": "https://packagist.org/downloads/", 390 | "license": [ 391 | "MIT" 392 | ], 393 | "authors": [ 394 | { 395 | "name": "Roman Borschel", 396 | "email": "roman@code-factory.org" 397 | }, 398 | { 399 | "name": "Benjamin Eberlei", 400 | "email": "kontakt@beberlei.de" 401 | }, 402 | { 403 | "name": "Guilherme Blanco", 404 | "email": "guilhermeblanco@gmail.com" 405 | }, 406 | { 407 | "name": "Jonathan Wage", 408 | "email": "jonwage@gmail.com" 409 | }, 410 | { 411 | "name": "Johannes Schmitt", 412 | "email": "schmittjoh@gmail.com" 413 | } 414 | ], 415 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 416 | "homepage": "http://www.doctrine-project.org", 417 | "keywords": [ 418 | "inflection", 419 | "pluralize", 420 | "singularize", 421 | "string" 422 | ], 423 | "time": "2015-01-01 18:34:57" 424 | }, 425 | { 426 | "name": "doctrine/instantiator", 427 | "version": "dev-master", 428 | "source": { 429 | "type": "git", 430 | "url": "https://github.com/doctrine/instantiator.git", 431 | "reference": "3d9669e597439e8d205baf315efb757038fb4dea" 432 | }, 433 | "dist": { 434 | "type": "zip", 435 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/3d9669e597439e8d205baf315efb757038fb4dea", 436 | "reference": "3d9669e597439e8d205baf315efb757038fb4dea", 437 | "shasum": "" 438 | }, 439 | "require": { 440 | "php": ">=5.3,<8.0-DEV" 441 | }, 442 | "require-dev": { 443 | "athletic/athletic": "~0.1.8", 444 | "ext-pdo": "*", 445 | "ext-phar": "*", 446 | "phpunit/phpunit": "~4.0", 447 | "squizlabs/php_codesniffer": "~2.0" 448 | }, 449 | "type": "library", 450 | "extra": { 451 | "branch-alias": { 452 | "dev-master": "1.0.x-dev" 453 | } 454 | }, 455 | "autoload": { 456 | "psr-4": { 457 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 458 | } 459 | }, 460 | "notification-url": "https://packagist.org/downloads/", 461 | "license": [ 462 | "MIT" 463 | ], 464 | "authors": [ 465 | { 466 | "name": "Marco Pivetta", 467 | "email": "ocramius@gmail.com", 468 | "homepage": "http://ocramius.github.com/" 469 | } 470 | ], 471 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 472 | "homepage": "https://github.com/doctrine/instantiator", 473 | "keywords": [ 474 | "constructor", 475 | "instantiate" 476 | ], 477 | "time": "2015-01-16 19:29:51" 478 | }, 479 | { 480 | "name": "doctrine/lexer", 481 | "version": "dev-master", 482 | "source": { 483 | "type": "git", 484 | "url": "https://github.com/doctrine/lexer.git", 485 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 486 | }, 487 | "dist": { 488 | "type": "zip", 489 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 490 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 491 | "shasum": "" 492 | }, 493 | "require": { 494 | "php": ">=5.3.2" 495 | }, 496 | "type": "library", 497 | "extra": { 498 | "branch-alias": { 499 | "dev-master": "1.0.x-dev" 500 | } 501 | }, 502 | "autoload": { 503 | "psr-0": { 504 | "Doctrine\\Common\\Lexer\\": "lib/" 505 | } 506 | }, 507 | "notification-url": "https://packagist.org/downloads/", 508 | "license": [ 509 | "MIT" 510 | ], 511 | "authors": [ 512 | { 513 | "name": "Roman Borschel", 514 | "email": "roman@code-factory.org" 515 | }, 516 | { 517 | "name": "Guilherme Blanco", 518 | "email": "guilhermeblanco@gmail.com" 519 | }, 520 | { 521 | "name": "Johannes Schmitt", 522 | "email": "schmittjoh@gmail.com" 523 | } 524 | ], 525 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 526 | "homepage": "http://www.doctrine-project.org", 527 | "keywords": [ 528 | "lexer", 529 | "parser" 530 | ], 531 | "time": "2014-09-09 13:34:57" 532 | }, 533 | { 534 | "name": "doctrine/orm", 535 | "version": "2.4.x-dev", 536 | "source": { 537 | "type": "git", 538 | "url": "https://github.com/doctrine/doctrine2.git", 539 | "reference": "18c873216bf496e08270c90bba964704da556b54" 540 | }, 541 | "dist": { 542 | "type": "zip", 543 | "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/18c873216bf496e08270c90bba964704da556b54", 544 | "reference": "18c873216bf496e08270c90bba964704da556b54", 545 | "shasum": "" 546 | }, 547 | "require": { 548 | "doctrine/collections": "~1.1", 549 | "doctrine/dbal": "~2.4", 550 | "ext-pdo": "*", 551 | "php": ">=5.3.2", 552 | "symfony/console": "~2.0" 553 | }, 554 | "require-dev": { 555 | "satooshi/php-coveralls": "dev-master", 556 | "symfony/yaml": "~2.1" 557 | }, 558 | "suggest": { 559 | "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" 560 | }, 561 | "bin": [ 562 | "bin/doctrine", 563 | "bin/doctrine.php" 564 | ], 565 | "type": "library", 566 | "extra": { 567 | "branch-alias": { 568 | "dev-master": "2.4.x-dev" 569 | } 570 | }, 571 | "autoload": { 572 | "psr-0": { 573 | "Doctrine\\ORM\\": "lib/" 574 | } 575 | }, 576 | "notification-url": "https://packagist.org/downloads/", 577 | "license": [ 578 | "MIT" 579 | ], 580 | "authors": [ 581 | { 582 | "name": "Roman Borschel", 583 | "email": "roman@code-factory.org" 584 | }, 585 | { 586 | "name": "Benjamin Eberlei", 587 | "email": "kontakt@beberlei.de" 588 | }, 589 | { 590 | "name": "Guilherme Blanco", 591 | "email": "guilhermeblanco@gmail.com" 592 | }, 593 | { 594 | "name": "Jonathan Wage", 595 | "email": "jonwage@gmail.com" 596 | } 597 | ], 598 | "description": "Object-Relational-Mapper for PHP", 599 | "homepage": "http://www.doctrine-project.org", 600 | "keywords": [ 601 | "database", 602 | "orm" 603 | ], 604 | "time": "2015-02-16 00:29:00" 605 | }, 606 | { 607 | "name": "kdyby/annotations", 608 | "version": "dev-master", 609 | "source": { 610 | "type": "git", 611 | "url": "https://github.com/Kdyby/Annotations.git", 612 | "reference": "f85e67da92f61d408e42631049b99d8dfe6e73b8" 613 | }, 614 | "dist": { 615 | "type": "zip", 616 | "url": "https://api.github.com/repos/Kdyby/Annotations/zipball/f85e67da92f61d408e42631049b99d8dfe6e73b8", 617 | "reference": "f85e67da92f61d408e42631049b99d8dfe6e73b8", 618 | "shasum": "" 619 | }, 620 | "require": { 621 | "doctrine/annotations": "~1.2", 622 | "kdyby/doctrine-cache": "~2.3@dev", 623 | "nette/di": "~2.2@dev", 624 | "nette/utils": "~2.2@dev" 625 | }, 626 | "conflict": { 627 | "kdyby/doctrine": "0.9.*" 628 | }, 629 | "require-dev": { 630 | "jakub-onderka/php-parallel-lint": "~0.7", 631 | "latte/latte": "~2.3@dev", 632 | "nette/application": "~2.3@dev", 633 | "nette/bootstrap": "~2.3@dev", 634 | "nette/caching": "~2.3@dev", 635 | "nette/component-model": "~2.2@dev", 636 | "nette/database": "~2.3@dev", 637 | "nette/deprecated": "~2.2@dev", 638 | "nette/di": "~2.3@dev", 639 | "nette/finder": "~2.3@dev", 640 | "nette/forms": "~2.3@dev", 641 | "nette/http": "~2.3@dev", 642 | "nette/mail": "~2.3@dev", 643 | "nette/neon": "~2.3@dev", 644 | "nette/php-generator": "~2.3@dev", 645 | "nette/reflection": "~2.3@dev", 646 | "nette/robot-loader": "~2.3@dev", 647 | "nette/safe-stream": "~2.3@dev", 648 | "nette/security": "~2.3@dev", 649 | "nette/tester": "~1.3@rc", 650 | "nette/tokenizer": "~2.2@dev", 651 | "nette/utils": "~2.3@dev", 652 | "tracy/tracy": "~2.3@dev" 653 | }, 654 | "type": "library", 655 | "extra": { 656 | "branch-alias": { 657 | "dev-master": "2.1-dev" 658 | } 659 | }, 660 | "autoload": { 661 | "psr-0": { 662 | "Kdyby\\Annotations\\": "src/" 663 | } 664 | }, 665 | "notification-url": "https://packagist.org/downloads/", 666 | "license": [ 667 | "BSD-3-Clause", 668 | "GPL-2.0", 669 | "GPL-3.0" 670 | ], 671 | "authors": [ 672 | { 673 | "name": "Filip Procházka", 674 | "email": "filip@prochazka.su", 675 | "homepage": "http://filip-prochazka.com" 676 | }, 677 | { 678 | "name": "Jáchym Toušek", 679 | "email": "enumag@gmail.com", 680 | "homepage": "http://enumag.cz" 681 | } 682 | ], 683 | "description": "Doctrine Annotations integration into Nette Framework", 684 | "homepage": "http://kdyby.org", 685 | "keywords": [ 686 | "annotations", 687 | "doctrine", 688 | "kdyby", 689 | "nette" 690 | ], 691 | "time": "2015-02-02 01:05:23" 692 | }, 693 | { 694 | "name": "kdyby/console", 695 | "version": "dev-master", 696 | "source": { 697 | "type": "git", 698 | "url": "https://github.com/Kdyby/Console.git", 699 | "reference": "dfc4942bc787a9be585ce88505a2f75fabce4a06" 700 | }, 701 | "dist": { 702 | "type": "zip", 703 | "url": "https://api.github.com/repos/Kdyby/Console/zipball/dfc4942bc787a9be585ce88505a2f75fabce4a06", 704 | "reference": "dfc4942bc787a9be585ce88505a2f75fabce4a06", 705 | "shasum": "" 706 | }, 707 | "require": { 708 | "nette/application": "~2.2@dev", 709 | "nette/di": "~2.2@dev", 710 | "nette/http": "~2.2@dev", 711 | "symfony/console": "~2.5" 712 | }, 713 | "require-dev": { 714 | "kdyby/events": "~2.3@dev", 715 | "latte/latte": "~2.3@dev", 716 | "nette/application": "~2.3@dev", 717 | "nette/bootstrap": "~2.3@dev", 718 | "nette/caching": "~2.3@dev", 719 | "nette/component-model": "~2.2@dev", 720 | "nette/database": "~2.3@dev", 721 | "nette/deprecated": "~2.2@dev", 722 | "nette/di": "~2.3@dev", 723 | "nette/finder": "~2.3@dev", 724 | "nette/forms": "~2.3@dev", 725 | "nette/http": "~2.3@dev", 726 | "nette/mail": "~2.3@dev", 727 | "nette/neon": "~2.3@dev", 728 | "nette/php-generator": "~2.3@dev", 729 | "nette/reflection": "~2.3@dev", 730 | "nette/robot-loader": "~2.3@dev", 731 | "nette/safe-stream": "~2.3@dev", 732 | "nette/security": "~2.3@dev", 733 | "nette/tester": "~1.3@rc", 734 | "nette/tokenizer": "~2.2@dev", 735 | "nette/utils": "~2.3@dev", 736 | "symfony/event-dispatcher": "~2.4", 737 | "tracy/tracy": "~2.3@dev" 738 | }, 739 | "type": "library", 740 | "extra": { 741 | "branch-alias": { 742 | "dev-master": "2.3-dev" 743 | } 744 | }, 745 | "autoload": { 746 | "psr-0": { 747 | "Kdyby\\Console\\": "src/" 748 | }, 749 | "classmap": [ 750 | "src/Kdyby/Console/CliPresenter.php", 751 | "src/Kdyby/Console/exceptions.php" 752 | ] 753 | }, 754 | "notification-url": "https://packagist.org/downloads/", 755 | "license": [ 756 | "BSD-3-Clause", 757 | "GPL-2.0", 758 | "GPL-3.0" 759 | ], 760 | "authors": [ 761 | { 762 | "name": "Filip Procházka", 763 | "email": "filip@prochazka.su", 764 | "homepage": "http://filip-prochazka.com" 765 | } 766 | ], 767 | "description": "Symfony Console integration for Kdyby components", 768 | "homepage": "http://kdyby.org", 769 | "keywords": [ 770 | "console", 771 | "kdyby", 772 | "nette" 773 | ], 774 | "time": "2015-02-22 17:34:52" 775 | }, 776 | { 777 | "name": "kdyby/doctrine", 778 | "version": "v2.3.0", 779 | "source": { 780 | "type": "git", 781 | "url": "https://github.com/Kdyby/Doctrine.git", 782 | "reference": "aff77eb0a362d91b3c0a937ec9ec9e028561fa9d" 783 | }, 784 | "dist": { 785 | "type": "zip", 786 | "url": "https://api.github.com/repos/Kdyby/Doctrine/zipball/aff77eb0a362d91b3c0a937ec9ec9e028561fa9d", 787 | "reference": "aff77eb0a362d91b3c0a937ec9ec9e028561fa9d", 788 | "shasum": "" 789 | }, 790 | "require": { 791 | "doctrine/dbal": "~2.5", 792 | "doctrine/instantiator": "~1.0.3", 793 | "doctrine/orm": "2.4.*", 794 | "kdyby/annotations": "~2.1@dev", 795 | "kdyby/console": "~2.3@dev", 796 | "kdyby/doctrine-cache": "~2.3.2@dev", 797 | "kdyby/events": "~2.3@dev", 798 | "nette/di": "~2.2@dev", 799 | "nette/neon": "~2.2@dev", 800 | "nette/robot-loader": "~2.2@dev", 801 | "nette/utils": "~2.2@dev" 802 | }, 803 | "require-dev": { 804 | "dg/dibi": "~2.0", 805 | "latte/latte": "~2.3@dev", 806 | "nette/application": "~2.3@dev", 807 | "nette/bootstrap": "~2.3@dev", 808 | "nette/caching": "~2.3@dev", 809 | "nette/component-model": "~2.2@dev", 810 | "nette/database": "~2.3@dev", 811 | "nette/deprecated": "~2.2@dev", 812 | "nette/di": "~2.3@dev", 813 | "nette/finder": "~2.3@dev", 814 | "nette/forms": "~2.3@dev", 815 | "nette/http": "~2.3@dev", 816 | "nette/mail": "~2.3@dev", 817 | "nette/neon": "~2.3@dev", 818 | "nette/php-generator": "~2.3@dev", 819 | "nette/reflection": "~2.3@dev", 820 | "nette/robot-loader": "~2.3@dev", 821 | "nette/safe-stream": "~2.3@dev", 822 | "nette/security": "~2.3@dev", 823 | "nette/tester": "~1.3@rc", 824 | "nette/tokenizer": "~2.2@dev", 825 | "nette/utils": "~2.3@dev", 826 | "tracy/tracy": "~2.3@dev" 827 | }, 828 | "type": "library", 829 | "extra": { 830 | "branch-alias": { 831 | "dev-master": "2.2-dev" 832 | } 833 | }, 834 | "autoload": { 835 | "psr-0": { 836 | "Kdyby\\Doctrine\\": "src/", 837 | "Kdyby\\Persistence\\": "src/", 838 | "Kdyby\\DibiBridge\\": "src/" 839 | }, 840 | "classmap": [ 841 | "src/Kdyby/Doctrine/exceptions.php" 842 | ] 843 | }, 844 | "notification-url": "https://packagist.org/downloads/", 845 | "license": [ 846 | "BSD-3-Clause", 847 | "GPL-2.0", 848 | "GPL-3.0" 849 | ], 850 | "authors": [ 851 | { 852 | "name": "Filip Procházka", 853 | "email": "filip@prochazka.su", 854 | "homepage": "http://filip-prochazka.com" 855 | } 856 | ], 857 | "description": "Doctrine integration into Nette Framework", 858 | "homepage": "http://kdyby.org", 859 | "keywords": [ 860 | "dbal", 861 | "doctrine", 862 | "kdyby", 863 | "nette", 864 | "orm" 865 | ], 866 | "time": "2015-02-02 01:45:38" 867 | }, 868 | { 869 | "name": "kdyby/doctrine-cache", 870 | "version": "dev-master", 871 | "source": { 872 | "type": "git", 873 | "url": "https://github.com/Kdyby/DoctrineCache.git", 874 | "reference": "0ed3e693c18526f5cd3faedc5518298af1b96e9a" 875 | }, 876 | "dist": { 877 | "type": "zip", 878 | "url": "https://api.github.com/repos/Kdyby/DoctrineCache/zipball/0ed3e693c18526f5cd3faedc5518298af1b96e9a", 879 | "reference": "0ed3e693c18526f5cd3faedc5518298af1b96e9a", 880 | "shasum": "" 881 | }, 882 | "require": { 883 | "doctrine/cache": "~1.4", 884 | "nette/caching": "~2.2@dev", 885 | "nette/di": "~2.2@dev" 886 | }, 887 | "require-dev": { 888 | "jakub-onderka/php-parallel-lint": "~0.7", 889 | "latte/latte": "~2.3@dev", 890 | "nette/application": "~2.3@dev", 891 | "nette/bootstrap": "~2.3@dev", 892 | "nette/caching": "~2.3@dev", 893 | "nette/component-model": "~2.2@dev", 894 | "nette/database": "~2.3@dev", 895 | "nette/deprecated": "~2.2@dev", 896 | "nette/di": "~2.3@dev", 897 | "nette/finder": "~2.3@dev", 898 | "nette/forms": "~2.3@dev", 899 | "nette/http": "~2.3@dev", 900 | "nette/mail": "~2.3@dev", 901 | "nette/neon": "~2.3@dev", 902 | "nette/php-generator": "~2.3@dev", 903 | "nette/reflection": "~2.3@dev", 904 | "nette/robot-loader": "~2.3@dev", 905 | "nette/safe-stream": "~2.3@dev", 906 | "nette/security": "~2.3@dev", 907 | "nette/tester": "~1.3@rc", 908 | "nette/tokenizer": "~2.2@dev", 909 | "nette/utils": "~2.3@dev", 910 | "tracy/tracy": "~2.3@dev" 911 | }, 912 | "type": "library", 913 | "extra": { 914 | "branch-alias": { 915 | "dev-master": "2.3-dev" 916 | } 917 | }, 918 | "autoload": { 919 | "psr-0": { 920 | "Kdyby\\DoctrineCache\\": "src/" 921 | }, 922 | "classmap": [ 923 | "src/Kdyby/DoctrineCache/exceptions.php" 924 | ] 925 | }, 926 | "notification-url": "https://packagist.org/downloads/", 927 | "license": [ 928 | "BSD-3-Clause", 929 | "GPL-2.0", 930 | "GPL-3.0" 931 | ], 932 | "authors": [ 933 | { 934 | "name": "Filip Procházka", 935 | "email": "filip@prochazka.su", 936 | "homepage": "http://filip-prochazka.com" 937 | } 938 | ], 939 | "description": "Doctrine Cache bridge for Nette Framework", 940 | "homepage": "http://kdyby.org", 941 | "keywords": [ 942 | "cache", 943 | "doctrine", 944 | "kdyby", 945 | "nette" 946 | ], 947 | "time": "2015-02-02 00:32:56" 948 | }, 949 | { 950 | "name": "kdyby/events", 951 | "version": "dev-master", 952 | "source": { 953 | "type": "git", 954 | "url": "https://github.com/Kdyby/Events.git", 955 | "reference": "1f309d9513e2b75ef58e00d893b904a0351c5630" 956 | }, 957 | "dist": { 958 | "type": "zip", 959 | "url": "https://api.github.com/repos/Kdyby/Events/zipball/1f309d9513e2b75ef58e00d893b904a0351c5630", 960 | "reference": "1f309d9513e2b75ef58e00d893b904a0351c5630", 961 | "shasum": "" 962 | }, 963 | "require": { 964 | "nette/di": "~2.2@dev", 965 | "nette/utils": "~2.2@dev" 966 | }, 967 | "require-dev": { 968 | "jakub-onderka/php-parallel-lint": "~0.7", 969 | "latte/latte": "~2.3@dev", 970 | "nette/application": "~2.3@dev", 971 | "nette/bootstrap": "~2.3@dev", 972 | "nette/caching": "~2.3@dev", 973 | "nette/component-model": "~2.2@dev", 974 | "nette/database": "~2.3@dev", 975 | "nette/deprecated": "@dev", 976 | "nette/di": "~2.3@dev", 977 | "nette/finder": "~2.3@dev", 978 | "nette/forms": "~2.3@dev", 979 | "nette/http": "~2.3@dev", 980 | "nette/mail": "~2.3@dev", 981 | "nette/neon": "~2.3@dev", 982 | "nette/nette": "~2.3@dev", 983 | "nette/php-generator": "~2.3@dev", 984 | "nette/reflection": "~2.3@dev", 985 | "nette/robot-loader": "~2.3@dev", 986 | "nette/safe-stream": "~2.3@dev", 987 | "nette/security": "~2.3@dev", 988 | "nette/tester": "@dev", 989 | "nette/tokenizer": "~2.2@dev", 990 | "nette/utils": "~2.3@dev", 991 | "symfony/event-dispatcher": "~2.5", 992 | "tracy/tracy": "~2.3@dev" 993 | }, 994 | "type": "library", 995 | "extra": { 996 | "branch-alias": { 997 | "dev-master": "2.3-dev" 998 | } 999 | }, 1000 | "autoload": { 1001 | "psr-0": { 1002 | "Kdyby\\Events\\": "src/" 1003 | }, 1004 | "classmap": [ 1005 | "src/Kdyby/Events/exceptions.php" 1006 | ], 1007 | "files": [ 1008 | "src/Doctrine/compatibility.php" 1009 | ] 1010 | }, 1011 | "notification-url": "https://packagist.org/downloads/", 1012 | "license": [ 1013 | "BSD-3-Clause", 1014 | "GPL-2.0", 1015 | "GPL-3.0" 1016 | ], 1017 | "authors": [ 1018 | { 1019 | "name": "Filip Procházka", 1020 | "email": "filip@prochazka.su", 1021 | "homepage": "http://filip-prochazka.com" 1022 | } 1023 | ], 1024 | "description": "Events for Nette Framework", 1025 | "homepage": "http://kdyby.org", 1026 | "keywords": [ 1027 | "kdyby", 1028 | "nette" 1029 | ], 1030 | "time": "2015-02-01 22:25:59" 1031 | }, 1032 | { 1033 | "name": "latte/latte", 1034 | "version": "dev-master", 1035 | "source": { 1036 | "type": "git", 1037 | "url": "https://github.com/nette/latte.git", 1038 | "reference": "4aa7b506b21dc8622cf23af798ef218dc58a97c5" 1039 | }, 1040 | "dist": { 1041 | "type": "zip", 1042 | "url": "https://api.github.com/repos/nette/latte/zipball/4aa7b506b21dc8622cf23af798ef218dc58a97c5", 1043 | "reference": "4aa7b506b21dc8622cf23af798ef218dc58a97c5", 1044 | "shasum": "" 1045 | }, 1046 | "require": { 1047 | "ext-tokenizer": "*", 1048 | "php": ">=5.3.1" 1049 | }, 1050 | "require-dev": { 1051 | "nette/tester": "~1.3" 1052 | }, 1053 | "suggest": { 1054 | "ext-fileinfo": "to use filter |datastream", 1055 | "ext-mbstring": "to use filters like lower, upper, capitalize, ..." 1056 | }, 1057 | "type": "library", 1058 | "extra": { 1059 | "branch-alias": { 1060 | "dev-master": "2.3-dev" 1061 | } 1062 | }, 1063 | "autoload": { 1064 | "classmap": [ 1065 | "src/" 1066 | ] 1067 | }, 1068 | "notification-url": "https://packagist.org/downloads/", 1069 | "license": [ 1070 | "BSD-3-Clause", 1071 | "GPL-2.0", 1072 | "GPL-3.0" 1073 | ], 1074 | "authors": [ 1075 | { 1076 | "name": "David Grudl", 1077 | "homepage": "http://davidgrudl.com" 1078 | }, 1079 | { 1080 | "name": "Nette Community", 1081 | "homepage": "http://nette.org/contributors" 1082 | } 1083 | ], 1084 | "description": "Latte: the amazing template engine for PHP", 1085 | "homepage": "http://latte.nette.org", 1086 | "keywords": [ 1087 | "templating", 1088 | "twig" 1089 | ], 1090 | "time": "2015-02-26 08:09:42" 1091 | }, 1092 | { 1093 | "name": "mockery/mockery", 1094 | "version": "dev-master", 1095 | "source": { 1096 | "type": "git", 1097 | "url": "https://github.com/padraic/mockery.git", 1098 | "reference": "ef3ca8f5bbfd720e4f970526a1e7493005ebf41f" 1099 | }, 1100 | "dist": { 1101 | "type": "zip", 1102 | "url": "https://api.github.com/repos/padraic/mockery/zipball/ef3ca8f5bbfd720e4f970526a1e7493005ebf41f", 1103 | "reference": "ef3ca8f5bbfd720e4f970526a1e7493005ebf41f", 1104 | "shasum": "" 1105 | }, 1106 | "require": { 1107 | "lib-pcre": ">=7.0", 1108 | "php": ">=5.3.2" 1109 | }, 1110 | "require-dev": { 1111 | "hamcrest/hamcrest-php": "~1.1", 1112 | "phpunit/phpunit": "~4.0" 1113 | }, 1114 | "type": "library", 1115 | "extra": { 1116 | "branch-alias": { 1117 | "dev-master": "0.9.x-dev" 1118 | } 1119 | }, 1120 | "autoload": { 1121 | "psr-0": { 1122 | "Mockery": "library/" 1123 | } 1124 | }, 1125 | "notification-url": "https://packagist.org/downloads/", 1126 | "license": [ 1127 | "BSD-3-Clause" 1128 | ], 1129 | "authors": [ 1130 | { 1131 | "name": "Pádraic Brady", 1132 | "email": "padraic.brady@gmail.com", 1133 | "homepage": "http://blog.astrumfutura.com" 1134 | }, 1135 | { 1136 | "name": "Dave Marshall", 1137 | "email": "dave.marshall@atstsolutions.co.uk", 1138 | "homepage": "http://davedevelopment.co.uk" 1139 | } 1140 | ], 1141 | "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", 1142 | "homepage": "http://github.com/padraic/mockery", 1143 | "keywords": [ 1144 | "BDD", 1145 | "TDD", 1146 | "library", 1147 | "mock", 1148 | "mock objects", 1149 | "mockery", 1150 | "stub", 1151 | "test", 1152 | "test double", 1153 | "testing" 1154 | ], 1155 | "time": "2015-02-27 21:38:21" 1156 | }, 1157 | { 1158 | "name": "nette/application", 1159 | "version": "dev-master", 1160 | "source": { 1161 | "type": "git", 1162 | "url": "https://github.com/nette/application.git", 1163 | "reference": "6144b265234b31a48ca795e0efce392cfca1def7" 1164 | }, 1165 | "dist": { 1166 | "type": "zip", 1167 | "url": "https://api.github.com/repos/nette/application/zipball/6144b265234b31a48ca795e0efce392cfca1def7", 1168 | "reference": "6144b265234b31a48ca795e0efce392cfca1def7", 1169 | "shasum": "" 1170 | }, 1171 | "require": { 1172 | "nette/component-model": "~2.2", 1173 | "nette/di": "~2.3", 1174 | "nette/http": "~2.2", 1175 | "nette/reflection": "~2.2", 1176 | "nette/security": "~2.2", 1177 | "nette/utils": "~2.2", 1178 | "php": ">=5.3.1" 1179 | }, 1180 | "conflict": { 1181 | "nette/nette": "<2.2" 1182 | }, 1183 | "require-dev": { 1184 | "latte/latte": "~2.3", 1185 | "nette/forms": "~2.2", 1186 | "nette/robot-loader": "~2.2", 1187 | "nette/tester": "~1.3" 1188 | }, 1189 | "suggest": { 1190 | "latte/latte": "Allows using Latte in templates", 1191 | "nette/forms": "Allows to use Nette\\Application\\UI\\Form" 1192 | }, 1193 | "type": "library", 1194 | "extra": { 1195 | "branch-alias": { 1196 | "dev-master": "2.3-dev" 1197 | } 1198 | }, 1199 | "autoload": { 1200 | "classmap": [ 1201 | "src/" 1202 | ] 1203 | }, 1204 | "notification-url": "https://packagist.org/downloads/", 1205 | "license": [ 1206 | "BSD-3-Clause", 1207 | "GPL-2.0", 1208 | "GPL-3.0" 1209 | ], 1210 | "authors": [ 1211 | { 1212 | "name": "David Grudl", 1213 | "homepage": "http://davidgrudl.com" 1214 | }, 1215 | { 1216 | "name": "Nette Community", 1217 | "homepage": "http://nette.org/contributors" 1218 | } 1219 | ], 1220 | "description": "Nette Application MVC Component", 1221 | "homepage": "http://nette.org", 1222 | "time": "2015-02-25 22:44:23" 1223 | }, 1224 | { 1225 | "name": "nette/bootstrap", 1226 | "version": "dev-master", 1227 | "source": { 1228 | "type": "git", 1229 | "url": "https://github.com/nette/bootstrap.git", 1230 | "reference": "5b7c055f38e8d329bc8f4b4504899b5b39be5199" 1231 | }, 1232 | "dist": { 1233 | "type": "zip", 1234 | "url": "https://api.github.com/repos/nette/bootstrap/zipball/5b7c055f38e8d329bc8f4b4504899b5b39be5199", 1235 | "reference": "5b7c055f38e8d329bc8f4b4504899b5b39be5199", 1236 | "shasum": "" 1237 | }, 1238 | "require": { 1239 | "nette/di": "~2.3", 1240 | "nette/utils": "~2.2", 1241 | "php": ">=5.3.1" 1242 | }, 1243 | "conflict": { 1244 | "nette/nette": "<2.2" 1245 | }, 1246 | "require-dev": { 1247 | "latte/latte": "~2.2", 1248 | "nette/application": "~2.3", 1249 | "nette/caching": "~2.3", 1250 | "nette/database": "~2.3", 1251 | "nette/forms": "~2.3", 1252 | "nette/http": "~2.3", 1253 | "nette/mail": "~2.3", 1254 | "nette/robot-loader": "~2.2", 1255 | "nette/safe-stream": "~2.2", 1256 | "nette/security": "~2.3", 1257 | "nette/tester": "~1.3", 1258 | "tracy/tracy": "~2.3" 1259 | }, 1260 | "suggest": { 1261 | "nette/robot-loader": "to use Configurator::createRobotLoader()", 1262 | "tracy/tracy": "to use Configurator::enableDebugger()" 1263 | }, 1264 | "type": "library", 1265 | "extra": { 1266 | "branch-alias": { 1267 | "dev-master": "2.3-dev" 1268 | } 1269 | }, 1270 | "autoload": { 1271 | "classmap": [ 1272 | "src/" 1273 | ] 1274 | }, 1275 | "notification-url": "https://packagist.org/downloads/", 1276 | "license": [ 1277 | "BSD-3-Clause", 1278 | "GPL-2.0", 1279 | "GPL-3.0" 1280 | ], 1281 | "authors": [ 1282 | { 1283 | "name": "David Grudl", 1284 | "homepage": "http://davidgrudl.com" 1285 | }, 1286 | { 1287 | "name": "Nette Community", 1288 | "homepage": "http://nette.org/contributors" 1289 | } 1290 | ], 1291 | "description": "Nette Bootstrap", 1292 | "homepage": "http://nette.org", 1293 | "time": "2015-02-20 19:43:56" 1294 | }, 1295 | { 1296 | "name": "nette/caching", 1297 | "version": "dev-master", 1298 | "source": { 1299 | "type": "git", 1300 | "url": "https://github.com/nette/caching.git", 1301 | "reference": "e9508220f5628d9ac075ec3c13ba1e053dbd7944" 1302 | }, 1303 | "dist": { 1304 | "type": "zip", 1305 | "url": "https://api.github.com/repos/nette/caching/zipball/e9508220f5628d9ac075ec3c13ba1e053dbd7944", 1306 | "reference": "e9508220f5628d9ac075ec3c13ba1e053dbd7944", 1307 | "shasum": "" 1308 | }, 1309 | "require": { 1310 | "nette/finder": "~2.2", 1311 | "nette/utils": "~2.2", 1312 | "php": ">=5.3.1" 1313 | }, 1314 | "conflict": { 1315 | "nette/nette": "<2.2" 1316 | }, 1317 | "require-dev": { 1318 | "latte/latte": "~2.3", 1319 | "nette/di": "~2.3", 1320 | "nette/tester": "~1.0" 1321 | }, 1322 | "type": "library", 1323 | "extra": { 1324 | "branch-alias": { 1325 | "dev-master": "2.3-dev" 1326 | } 1327 | }, 1328 | "autoload": { 1329 | "classmap": [ 1330 | "src/" 1331 | ] 1332 | }, 1333 | "notification-url": "https://packagist.org/downloads/", 1334 | "license": [ 1335 | "BSD-3-Clause", 1336 | "GPL-2.0", 1337 | "GPL-3.0" 1338 | ], 1339 | "authors": [ 1340 | { 1341 | "name": "David Grudl", 1342 | "homepage": "http://davidgrudl.com" 1343 | }, 1344 | { 1345 | "name": "Nette Community", 1346 | "homepage": "http://nette.org/contributors" 1347 | } 1348 | ], 1349 | "description": "Nette Caching Component", 1350 | "homepage": "http://nette.org", 1351 | "time": "2015-02-18 02:23:54" 1352 | }, 1353 | { 1354 | "name": "nette/component-model", 1355 | "version": "dev-master", 1356 | "source": { 1357 | "type": "git", 1358 | "url": "https://github.com/nette/component-model.git", 1359 | "reference": "a96c5179631eec6e47881a77607577ef199e74cc" 1360 | }, 1361 | "dist": { 1362 | "type": "zip", 1363 | "url": "https://api.github.com/repos/nette/component-model/zipball/a96c5179631eec6e47881a77607577ef199e74cc", 1364 | "reference": "a96c5179631eec6e47881a77607577ef199e74cc", 1365 | "shasum": "" 1366 | }, 1367 | "require": { 1368 | "nette/utils": "~2.2", 1369 | "php": ">=5.3.1" 1370 | }, 1371 | "conflict": { 1372 | "nette/nette": "<2.2" 1373 | }, 1374 | "require-dev": { 1375 | "nette/tester": "~1.3" 1376 | }, 1377 | "type": "library", 1378 | "extra": { 1379 | "branch-alias": { 1380 | "dev-master": "2.3-dev" 1381 | } 1382 | }, 1383 | "autoload": { 1384 | "classmap": [ 1385 | "src/" 1386 | ] 1387 | }, 1388 | "notification-url": "https://packagist.org/downloads/", 1389 | "license": [ 1390 | "BSD-3-Clause", 1391 | "GPL-2.0", 1392 | "GPL-3.0" 1393 | ], 1394 | "authors": [ 1395 | { 1396 | "name": "David Grudl", 1397 | "homepage": "http://davidgrudl.com" 1398 | }, 1399 | { 1400 | "name": "Nette Community", 1401 | "homepage": "http://nette.org/contributors" 1402 | } 1403 | ], 1404 | "description": "Nette Component Model", 1405 | "homepage": "http://nette.org", 1406 | "time": "2015-02-05 02:51:09" 1407 | }, 1408 | { 1409 | "name": "nette/database", 1410 | "version": "dev-master", 1411 | "source": { 1412 | "type": "git", 1413 | "url": "https://github.com/nette/database.git", 1414 | "reference": "18a2ca9872967f11dd33d7bd236a1a52d6aa8e7d" 1415 | }, 1416 | "dist": { 1417 | "type": "zip", 1418 | "url": "https://api.github.com/repos/nette/database/zipball/18a2ca9872967f11dd33d7bd236a1a52d6aa8e7d", 1419 | "reference": "18a2ca9872967f11dd33d7bd236a1a52d6aa8e7d", 1420 | "shasum": "" 1421 | }, 1422 | "require": { 1423 | "ext-pdo": "*", 1424 | "nette/caching": "~2.2", 1425 | "nette/utils": "~2.2", 1426 | "php": ">=5.3.1" 1427 | }, 1428 | "conflict": { 1429 | "nette/nette": "<2.2" 1430 | }, 1431 | "require-dev": { 1432 | "mockery/mockery": "~0.9.1", 1433 | "nette/di": "~2.3", 1434 | "nette/tester": "~1.3" 1435 | }, 1436 | "type": "library", 1437 | "extra": { 1438 | "branch-alias": { 1439 | "dev-master": "2.3-dev" 1440 | } 1441 | }, 1442 | "autoload": { 1443 | "classmap": [ 1444 | "src/" 1445 | ] 1446 | }, 1447 | "notification-url": "https://packagist.org/downloads/", 1448 | "license": [ 1449 | "BSD-3-Clause", 1450 | "GPL-2.0", 1451 | "GPL-3.0" 1452 | ], 1453 | "authors": [ 1454 | { 1455 | "name": "David Grudl", 1456 | "homepage": "http://davidgrudl.com" 1457 | }, 1458 | { 1459 | "name": "Nette Community", 1460 | "homepage": "http://nette.org/contributors" 1461 | } 1462 | ], 1463 | "description": "Nette Database Component", 1464 | "homepage": "http://nette.org", 1465 | "time": "2015-02-25 22:34:33" 1466 | }, 1467 | { 1468 | "name": "nette/deprecated", 1469 | "version": "dev-master", 1470 | "source": { 1471 | "type": "git", 1472 | "url": "https://github.com/nette/deprecated.git", 1473 | "reference": "ca8329b0b00bd930fdd79c268f1d1361ea978cb6" 1474 | }, 1475 | "dist": { 1476 | "type": "zip", 1477 | "url": "https://api.github.com/repos/nette/deprecated/zipball/ca8329b0b00bd930fdd79c268f1d1361ea978cb6", 1478 | "reference": "ca8329b0b00bd930fdd79c268f1d1361ea978cb6", 1479 | "shasum": "" 1480 | }, 1481 | "require-dev": { 1482 | "latte/latte": "~2.2", 1483 | "nette/application": "~2.2", 1484 | "nette/bootstrap": "~2.2, >=2.2.1", 1485 | "nette/caching": "~2.2", 1486 | "nette/forms": "~2.2", 1487 | "nette/mail": "~2.2", 1488 | "nette/safe-stream": "~2.2", 1489 | "nette/tester": "~1.1", 1490 | "nette/utils": "~2.2", 1491 | "tracy/tracy": "~2.2" 1492 | }, 1493 | "type": "library", 1494 | "autoload": { 1495 | "classmap": [ 1496 | "src/" 1497 | ], 1498 | "files": [ 1499 | "src/loader.php" 1500 | ] 1501 | }, 1502 | "notification-url": "https://packagist.org/downloads/", 1503 | "license": [ 1504 | "BSD-3-Clause", 1505 | "GPL-2.0", 1506 | "GPL-3.0" 1507 | ], 1508 | "authors": [ 1509 | { 1510 | "name": "David Grudl", 1511 | "homepage": "http://davidgrudl.com" 1512 | }, 1513 | { 1514 | "name": "Nette Community", 1515 | "homepage": "http://nette.org/contributors" 1516 | } 1517 | ], 1518 | "description": "APIs and features removed from Nette Framework", 1519 | "homepage": "http://nette.org", 1520 | "time": "2015-01-31 14:17:44" 1521 | }, 1522 | { 1523 | "name": "nette/di", 1524 | "version": "dev-master", 1525 | "source": { 1526 | "type": "git", 1527 | "url": "https://github.com/nette/di.git", 1528 | "reference": "e0de3a754ac420c79a775604c699c620975700fc" 1529 | }, 1530 | "dist": { 1531 | "type": "zip", 1532 | "url": "https://api.github.com/repos/nette/di/zipball/e0de3a754ac420c79a775604c699c620975700fc", 1533 | "reference": "e0de3a754ac420c79a775604c699c620975700fc", 1534 | "shasum": "" 1535 | }, 1536 | "require": { 1537 | "nette/neon": "~2.3", 1538 | "nette/php-generator": "~2.3", 1539 | "nette/utils": "~2.3", 1540 | "php": ">=5.3.1" 1541 | }, 1542 | "conflict": { 1543 | "nette/nette": "<2.2" 1544 | }, 1545 | "require-dev": { 1546 | "nette/tester": "~1.3" 1547 | }, 1548 | "type": "library", 1549 | "extra": { 1550 | "branch-alias": { 1551 | "dev-master": "2.3-dev" 1552 | } 1553 | }, 1554 | "autoload": { 1555 | "classmap": [ 1556 | "src/" 1557 | ] 1558 | }, 1559 | "notification-url": "https://packagist.org/downloads/", 1560 | "license": [ 1561 | "BSD-3-Clause", 1562 | "GPL-2.0", 1563 | "GPL-3.0" 1564 | ], 1565 | "authors": [ 1566 | { 1567 | "name": "David Grudl", 1568 | "homepage": "http://davidgrudl.com" 1569 | }, 1570 | { 1571 | "name": "Nette Community", 1572 | "homepage": "http://nette.org/contributors" 1573 | } 1574 | ], 1575 | "description": "Nette Dependency Injection Component", 1576 | "homepage": "http://nette.org", 1577 | "time": "2015-02-28 09:10:19" 1578 | }, 1579 | { 1580 | "name": "nette/finder", 1581 | "version": "dev-master", 1582 | "source": { 1583 | "type": "git", 1584 | "url": "https://github.com/nette/finder.git", 1585 | "reference": "0eba793c90e236714b6f76474590d14d6bfe733a" 1586 | }, 1587 | "dist": { 1588 | "type": "zip", 1589 | "url": "https://api.github.com/repos/nette/finder/zipball/0eba793c90e236714b6f76474590d14d6bfe733a", 1590 | "reference": "0eba793c90e236714b6f76474590d14d6bfe733a", 1591 | "shasum": "" 1592 | }, 1593 | "require": { 1594 | "nette/utils": "~2.2", 1595 | "php": ">=5.3.1" 1596 | }, 1597 | "conflict": { 1598 | "nette/nette": "<2.2" 1599 | }, 1600 | "require-dev": { 1601 | "nette/tester": "~1.0" 1602 | }, 1603 | "type": "library", 1604 | "extra": { 1605 | "branch-alias": { 1606 | "dev-master": "2.3-dev" 1607 | } 1608 | }, 1609 | "autoload": { 1610 | "classmap": [ 1611 | "src/" 1612 | ] 1613 | }, 1614 | "notification-url": "https://packagist.org/downloads/", 1615 | "license": [ 1616 | "BSD-3-Clause", 1617 | "GPL-2.0", 1618 | "GPL-3.0" 1619 | ], 1620 | "authors": [ 1621 | { 1622 | "name": "David Grudl", 1623 | "homepage": "http://davidgrudl.com" 1624 | }, 1625 | { 1626 | "name": "Nette Community", 1627 | "homepage": "http://nette.org/contributors" 1628 | } 1629 | ], 1630 | "description": "Nette Finder: Files Searching", 1631 | "homepage": "http://nette.org", 1632 | "time": "2015-02-17 20:36:43" 1633 | }, 1634 | { 1635 | "name": "nette/forms", 1636 | "version": "dev-master", 1637 | "source": { 1638 | "type": "git", 1639 | "url": "https://github.com/nette/forms.git", 1640 | "reference": "6d16631f0beab8f8d10b8f9f7f37562ca79fa5ba" 1641 | }, 1642 | "dist": { 1643 | "type": "zip", 1644 | "url": "https://api.github.com/repos/nette/forms/zipball/6d16631f0beab8f8d10b8f9f7f37562ca79fa5ba", 1645 | "reference": "6d16631f0beab8f8d10b8f9f7f37562ca79fa5ba", 1646 | "shasum": "" 1647 | }, 1648 | "require": { 1649 | "nette/component-model": "~2.2", 1650 | "nette/http": "~2.2", 1651 | "nette/utils": "~2.2", 1652 | "php": ">=5.3.1" 1653 | }, 1654 | "conflict": { 1655 | "nette/nette": "<2.2" 1656 | }, 1657 | "require-dev": { 1658 | "latte/latte": "~2.3", 1659 | "nette/di": "~2.3", 1660 | "nette/tester": "~1.3", 1661 | "tracy/tracy": "~2.2" 1662 | }, 1663 | "type": "library", 1664 | "extra": { 1665 | "branch-alias": { 1666 | "dev-master": "2.3-dev" 1667 | } 1668 | }, 1669 | "autoload": { 1670 | "classmap": [ 1671 | "src/" 1672 | ] 1673 | }, 1674 | "notification-url": "https://packagist.org/downloads/", 1675 | "license": [ 1676 | "BSD-3-Clause", 1677 | "GPL-2.0", 1678 | "GPL-3.0" 1679 | ], 1680 | "authors": [ 1681 | { 1682 | "name": "David Grudl", 1683 | "homepage": "http://davidgrudl.com" 1684 | }, 1685 | { 1686 | "name": "Nette Community", 1687 | "homepage": "http://nette.org/contributors" 1688 | } 1689 | ], 1690 | "description": "Nette Forms: greatly facilitates web forms", 1691 | "homepage": "http://nette.org", 1692 | "time": "2015-02-28 10:46:53" 1693 | }, 1694 | { 1695 | "name": "nette/http", 1696 | "version": "dev-master", 1697 | "source": { 1698 | "type": "git", 1699 | "url": "https://github.com/nette/http.git", 1700 | "reference": "836821617c4ef167dd699616923532151e7850b8" 1701 | }, 1702 | "dist": { 1703 | "type": "zip", 1704 | "url": "https://api.github.com/repos/nette/http/zipball/836821617c4ef167dd699616923532151e7850b8", 1705 | "reference": "836821617c4ef167dd699616923532151e7850b8", 1706 | "shasum": "" 1707 | }, 1708 | "require": { 1709 | "nette/utils": "~2.2, >=2.2.2", 1710 | "php": ">=5.3.1" 1711 | }, 1712 | "conflict": { 1713 | "nette/nette": "<2.2" 1714 | }, 1715 | "require-dev": { 1716 | "nette/di": "~2.3", 1717 | "nette/tester": "~1.0" 1718 | }, 1719 | "suggest": { 1720 | "ext-fileinfo": "to detect type of uploaded files" 1721 | }, 1722 | "type": "library", 1723 | "extra": { 1724 | "branch-alias": { 1725 | "dev-master": "2.3-dev" 1726 | } 1727 | }, 1728 | "autoload": { 1729 | "classmap": [ 1730 | "src/" 1731 | ] 1732 | }, 1733 | "notification-url": "https://packagist.org/downloads/", 1734 | "license": [ 1735 | "BSD-3-Clause", 1736 | "GPL-2.0", 1737 | "GPL-3.0" 1738 | ], 1739 | "authors": [ 1740 | { 1741 | "name": "David Grudl", 1742 | "homepage": "http://davidgrudl.com" 1743 | }, 1744 | { 1745 | "name": "Nette Community", 1746 | "homepage": "http://nette.org/contributors" 1747 | } 1748 | ], 1749 | "description": "Nette HTTP Component", 1750 | "homepage": "http://nette.org", 1751 | "time": "2015-02-26 08:09:11" 1752 | }, 1753 | { 1754 | "name": "nette/mail", 1755 | "version": "dev-master", 1756 | "source": { 1757 | "type": "git", 1758 | "url": "https://github.com/nette/mail.git", 1759 | "reference": "19d7e1cb8f583c6fe49e896e9a341498decb385d" 1760 | }, 1761 | "dist": { 1762 | "type": "zip", 1763 | "url": "https://api.github.com/repos/nette/mail/zipball/19d7e1cb8f583c6fe49e896e9a341498decb385d", 1764 | "reference": "19d7e1cb8f583c6fe49e896e9a341498decb385d", 1765 | "shasum": "" 1766 | }, 1767 | "require": { 1768 | "ext-iconv": "*", 1769 | "nette/utils": "~2.2", 1770 | "php": ">=5.3.1" 1771 | }, 1772 | "conflict": { 1773 | "nette/nette": "<2.2" 1774 | }, 1775 | "require-dev": { 1776 | "nette/di": "~2.3", 1777 | "nette/tester": "~1.3" 1778 | }, 1779 | "suggest": { 1780 | "ext-fileinfo": "to detect type of attached files" 1781 | }, 1782 | "type": "library", 1783 | "extra": { 1784 | "branch-alias": { 1785 | "dev-master": "2.3-dev" 1786 | } 1787 | }, 1788 | "autoload": { 1789 | "classmap": [ 1790 | "src/" 1791 | ] 1792 | }, 1793 | "notification-url": "https://packagist.org/downloads/", 1794 | "license": [ 1795 | "BSD-3-Clause", 1796 | "GPL-2.0", 1797 | "GPL-3.0" 1798 | ], 1799 | "authors": [ 1800 | { 1801 | "name": "David Grudl", 1802 | "homepage": "http://davidgrudl.com" 1803 | }, 1804 | { 1805 | "name": "Nette Community", 1806 | "homepage": "http://nette.org/contributors" 1807 | } 1808 | ], 1809 | "description": "Nette Mail: Sending E-mails", 1810 | "homepage": "http://nette.org", 1811 | "time": "2015-02-24 22:24:13" 1812 | }, 1813 | { 1814 | "name": "nette/neon", 1815 | "version": "dev-master", 1816 | "source": { 1817 | "type": "git", 1818 | "url": "https://github.com/nette/neon.git", 1819 | "reference": "c14c3ae106fbf11bef6dfc3ec7668c59bdd7f58e" 1820 | }, 1821 | "dist": { 1822 | "type": "zip", 1823 | "url": "https://api.github.com/repos/nette/neon/zipball/c14c3ae106fbf11bef6dfc3ec7668c59bdd7f58e", 1824 | "reference": "c14c3ae106fbf11bef6dfc3ec7668c59bdd7f58e", 1825 | "shasum": "" 1826 | }, 1827 | "require": { 1828 | "ext-iconv": "*", 1829 | "php": ">=5.3.1" 1830 | }, 1831 | "require-dev": { 1832 | "nette/tester": "~1.0" 1833 | }, 1834 | "type": "library", 1835 | "extra": { 1836 | "branch-alias": { 1837 | "dev-master": "2.3-dev" 1838 | } 1839 | }, 1840 | "autoload": { 1841 | "classmap": [ 1842 | "src/" 1843 | ] 1844 | }, 1845 | "notification-url": "https://packagist.org/downloads/", 1846 | "license": [ 1847 | "BSD-3-Clause", 1848 | "GPL-2.0", 1849 | "GPL-3.0" 1850 | ], 1851 | "authors": [ 1852 | { 1853 | "name": "David Grudl", 1854 | "homepage": "http://davidgrudl.com" 1855 | }, 1856 | { 1857 | "name": "Nette Community", 1858 | "homepage": "http://nette.org/contributors" 1859 | } 1860 | ], 1861 | "description": "Nette NEON: parser & generator for Nette Object Notation", 1862 | "homepage": "http://ne-on.org", 1863 | "time": "2015-02-17 21:10:16" 1864 | }, 1865 | { 1866 | "name": "nette/nette", 1867 | "version": "dev-master", 1868 | "source": { 1869 | "type": "git", 1870 | "url": "https://github.com/nette/nette.git", 1871 | "reference": "dd83acebd56e43d6335d95483cf1cefc29f92d0f" 1872 | }, 1873 | "dist": { 1874 | "type": "zip", 1875 | "url": "https://api.github.com/repos/nette/nette/zipball/dd83acebd56e43d6335d95483cf1cefc29f92d0f", 1876 | "reference": "dd83acebd56e43d6335d95483cf1cefc29f92d0f", 1877 | "shasum": "" 1878 | }, 1879 | "require": { 1880 | "latte/latte": "@dev", 1881 | "nette/application": "@dev", 1882 | "nette/bootstrap": "@dev", 1883 | "nette/caching": "@dev", 1884 | "nette/component-model": "@dev", 1885 | "nette/database": "@dev", 1886 | "nette/deprecated": "@dev", 1887 | "nette/di": "@dev", 1888 | "nette/finder": "@dev", 1889 | "nette/forms": "@dev", 1890 | "nette/http": "@dev", 1891 | "nette/mail": "@dev", 1892 | "nette/neon": "@dev", 1893 | "nette/php-generator": "@dev", 1894 | "nette/reflection": "@dev", 1895 | "nette/robot-loader": "@dev", 1896 | "nette/safe-stream": "@dev", 1897 | "nette/security": "@dev", 1898 | "nette/tokenizer": "@dev", 1899 | "nette/utils": "@dev", 1900 | "tracy/tracy": "@dev" 1901 | }, 1902 | "require-dev": { 1903 | "nette/tester": "~1.3" 1904 | }, 1905 | "type": "library", 1906 | "extra": { 1907 | "branch-alias": { 1908 | "dev-master": "2.3-dev" 1909 | } 1910 | }, 1911 | "autoload": { 1912 | "classmap": [ 1913 | "Nette/" 1914 | ] 1915 | }, 1916 | "notification-url": "https://packagist.org/downloads/", 1917 | "license": [ 1918 | "BSD-3-Clause", 1919 | "GPL-2.0", 1920 | "GPL-3.0" 1921 | ], 1922 | "authors": [ 1923 | { 1924 | "name": "David Grudl", 1925 | "homepage": "http://davidgrudl.com" 1926 | }, 1927 | { 1928 | "name": "Nette Community", 1929 | "homepage": "http://nette.org/contributors" 1930 | } 1931 | ], 1932 | "description": "Nette Framework - innovative framework for fast and easy development of secured web applications in PHP. Write less, have cleaner code and your work will bring you joy.", 1933 | "homepage": "http://nette.org", 1934 | "keywords": [ 1935 | "Forms", 1936 | "database", 1937 | "debugging", 1938 | "framework", 1939 | "mailing", 1940 | "mvc", 1941 | "templating" 1942 | ], 1943 | "time": "2015-02-25 16:28:06" 1944 | }, 1945 | { 1946 | "name": "nette/php-generator", 1947 | "version": "dev-master", 1948 | "source": { 1949 | "type": "git", 1950 | "url": "https://github.com/nette/php-generator.git", 1951 | "reference": "bb8439b73fab9f403a7fa0d61e4c1913f75200ff" 1952 | }, 1953 | "dist": { 1954 | "type": "zip", 1955 | "url": "https://api.github.com/repos/nette/php-generator/zipball/bb8439b73fab9f403a7fa0d61e4c1913f75200ff", 1956 | "reference": "bb8439b73fab9f403a7fa0d61e4c1913f75200ff", 1957 | "shasum": "" 1958 | }, 1959 | "require": { 1960 | "nette/utils": "~2.2", 1961 | "php": ">=5.3.1" 1962 | }, 1963 | "conflict": { 1964 | "nette/nette": "<2.2" 1965 | }, 1966 | "require-dev": { 1967 | "nette/tester": "~1.0" 1968 | }, 1969 | "type": "library", 1970 | "extra": { 1971 | "branch-alias": { 1972 | "dev-master": "2.3-dev" 1973 | } 1974 | }, 1975 | "autoload": { 1976 | "classmap": [ 1977 | "src/" 1978 | ] 1979 | }, 1980 | "notification-url": "https://packagist.org/downloads/", 1981 | "license": [ 1982 | "BSD-3-Clause", 1983 | "GPL-2.0", 1984 | "GPL-3.0" 1985 | ], 1986 | "authors": [ 1987 | { 1988 | "name": "David Grudl", 1989 | "homepage": "http://davidgrudl.com" 1990 | }, 1991 | { 1992 | "name": "Nette Community", 1993 | "homepage": "http://nette.org/contributors" 1994 | } 1995 | ], 1996 | "description": "Nette PHP Generator", 1997 | "homepage": "http://nette.org", 1998 | "time": "2015-02-18 17:11:05" 1999 | }, 2000 | { 2001 | "name": "nette/reflection", 2002 | "version": "dev-master", 2003 | "source": { 2004 | "type": "git", 2005 | "url": "https://github.com/nette/reflection.git", 2006 | "reference": "08328bbd23323de285966dac7164f9ceb73cd77b" 2007 | }, 2008 | "dist": { 2009 | "type": "zip", 2010 | "url": "https://api.github.com/repos/nette/reflection/zipball/08328bbd23323de285966dac7164f9ceb73cd77b", 2011 | "reference": "08328bbd23323de285966dac7164f9ceb73cd77b", 2012 | "shasum": "" 2013 | }, 2014 | "require": { 2015 | "ext-tokenizer": "*", 2016 | "nette/caching": "~2.2", 2017 | "nette/utils": "~2.2", 2018 | "php": ">=5.3.1" 2019 | }, 2020 | "conflict": { 2021 | "nette/nette": "<2.2" 2022 | }, 2023 | "require-dev": { 2024 | "nette/di": "~2.3", 2025 | "nette/tester": "~1.0" 2026 | }, 2027 | "type": "library", 2028 | "extra": { 2029 | "branch-alias": { 2030 | "dev-master": "2.3-dev" 2031 | } 2032 | }, 2033 | "autoload": { 2034 | "classmap": [ 2035 | "src/" 2036 | ] 2037 | }, 2038 | "notification-url": "https://packagist.org/downloads/", 2039 | "license": [ 2040 | "BSD-3-Clause", 2041 | "GPL-2.0", 2042 | "GPL-3.0" 2043 | ], 2044 | "authors": [ 2045 | { 2046 | "name": "David Grudl", 2047 | "homepage": "http://davidgrudl.com" 2048 | }, 2049 | { 2050 | "name": "Nette Community", 2051 | "homepage": "http://nette.org/contributors" 2052 | } 2053 | ], 2054 | "description": "Nette PHP Reflection Component", 2055 | "homepage": "http://nette.org", 2056 | "time": "2015-02-16 15:33:50" 2057 | }, 2058 | { 2059 | "name": "nette/robot-loader", 2060 | "version": "dev-master", 2061 | "source": { 2062 | "type": "git", 2063 | "url": "https://github.com/nette/robot-loader.git", 2064 | "reference": "0ae50d98dff4adbf1a0d756bf61f7f7c37d36651" 2065 | }, 2066 | "dist": { 2067 | "type": "zip", 2068 | "url": "https://api.github.com/repos/nette/robot-loader/zipball/0ae50d98dff4adbf1a0d756bf61f7f7c37d36651", 2069 | "reference": "0ae50d98dff4adbf1a0d756bf61f7f7c37d36651", 2070 | "shasum": "" 2071 | }, 2072 | "require": { 2073 | "nette/caching": "~2.2", 2074 | "nette/finder": "~2.3", 2075 | "nette/utils": "~2.2", 2076 | "php": ">=5.3.1" 2077 | }, 2078 | "conflict": { 2079 | "nette/nette": "<2.2" 2080 | }, 2081 | "require-dev": { 2082 | "nette/tester": "~1.0" 2083 | }, 2084 | "type": "library", 2085 | "extra": { 2086 | "branch-alias": { 2087 | "dev-master": "2.3-dev" 2088 | } 2089 | }, 2090 | "autoload": { 2091 | "classmap": [ 2092 | "src/" 2093 | ] 2094 | }, 2095 | "notification-url": "https://packagist.org/downloads/", 2096 | "license": [ 2097 | "BSD-3-Clause", 2098 | "GPL-2.0", 2099 | "GPL-3.0" 2100 | ], 2101 | "authors": [ 2102 | { 2103 | "name": "David Grudl", 2104 | "homepage": "http://davidgrudl.com" 2105 | }, 2106 | { 2107 | "name": "Nette Community", 2108 | "homepage": "http://nette.org/contributors" 2109 | } 2110 | ], 2111 | "description": "Nette RobotLoader: comfortable autoloading", 2112 | "homepage": "http://nette.org", 2113 | "time": "2015-02-05 13:03:37" 2114 | }, 2115 | { 2116 | "name": "nette/safe-stream", 2117 | "version": "dev-master", 2118 | "source": { 2119 | "type": "git", 2120 | "url": "https://github.com/nette/safe-stream.git", 2121 | "reference": "2881ad56880e9231a2456a7bf41b174df4ab320a" 2122 | }, 2123 | "dist": { 2124 | "type": "zip", 2125 | "url": "https://api.github.com/repos/nette/safe-stream/zipball/2881ad56880e9231a2456a7bf41b174df4ab320a", 2126 | "reference": "2881ad56880e9231a2456a7bf41b174df4ab320a", 2127 | "shasum": "" 2128 | }, 2129 | "require": { 2130 | "php": ">=5.3.1" 2131 | }, 2132 | "conflict": { 2133 | "nette/nette": "<2.2" 2134 | }, 2135 | "require-dev": { 2136 | "nette/tester": "~1.0" 2137 | }, 2138 | "type": "library", 2139 | "extra": { 2140 | "branch-alias": { 2141 | "dev-master": "2.3-dev" 2142 | } 2143 | }, 2144 | "autoload": { 2145 | "files": [ 2146 | "src/loader.php" 2147 | ] 2148 | }, 2149 | "notification-url": "https://packagist.org/downloads/", 2150 | "license": [ 2151 | "BSD-3-Clause", 2152 | "GPL-2.0", 2153 | "GPL-3.0" 2154 | ], 2155 | "authors": [ 2156 | { 2157 | "name": "David Grudl", 2158 | "homepage": "http://davidgrudl.com" 2159 | }, 2160 | { 2161 | "name": "Nette Community", 2162 | "homepage": "http://nette.org/contributors" 2163 | } 2164 | ], 2165 | "description": "Nette SafeStream: Atomic Operations", 2166 | "homepage": "http://nette.org", 2167 | "time": "2015-01-27 13:35:41" 2168 | }, 2169 | { 2170 | "name": "nette/security", 2171 | "version": "dev-master", 2172 | "source": { 2173 | "type": "git", 2174 | "url": "https://github.com/nette/security.git", 2175 | "reference": "a4ce91375ccc9bbb3f27a384f9f747273011e443" 2176 | }, 2177 | "dist": { 2178 | "type": "zip", 2179 | "url": "https://api.github.com/repos/nette/security/zipball/a4ce91375ccc9bbb3f27a384f9f747273011e443", 2180 | "reference": "a4ce91375ccc9bbb3f27a384f9f747273011e443", 2181 | "shasum": "" 2182 | }, 2183 | "require": { 2184 | "nette/utils": "~2.2", 2185 | "php": ">=5.3.1" 2186 | }, 2187 | "conflict": { 2188 | "nette/nette": "<2.2" 2189 | }, 2190 | "require-dev": { 2191 | "nette/di": "~2.3", 2192 | "nette/http": "~2.3", 2193 | "nette/tester": "~1.0" 2194 | }, 2195 | "type": "library", 2196 | "extra": { 2197 | "branch-alias": { 2198 | "dev-master": "2.4-dev" 2199 | } 2200 | }, 2201 | "autoload": { 2202 | "classmap": [ 2203 | "src/" 2204 | ] 2205 | }, 2206 | "notification-url": "https://packagist.org/downloads/", 2207 | "license": [ 2208 | "BSD-3-Clause", 2209 | "GPL-2.0", 2210 | "GPL-3.0" 2211 | ], 2212 | "authors": [ 2213 | { 2214 | "name": "David Grudl", 2215 | "homepage": "http://davidgrudl.com" 2216 | }, 2217 | { 2218 | "name": "Nette Community", 2219 | "homepage": "http://nette.org/contributors" 2220 | } 2221 | ], 2222 | "description": "Nette Security: Access Control Component", 2223 | "homepage": "http://nette.org", 2224 | "time": "2015-02-24 20:37:24" 2225 | }, 2226 | { 2227 | "name": "nette/tokenizer", 2228 | "version": "dev-master", 2229 | "source": { 2230 | "type": "git", 2231 | "url": "https://github.com/nette/tokenizer.git", 2232 | "reference": "80d520ad59e64273dfe4f4e20f6e18c0dc6848fe" 2233 | }, 2234 | "dist": { 2235 | "type": "zip", 2236 | "url": "https://api.github.com/repos/nette/tokenizer/zipball/80d520ad59e64273dfe4f4e20f6e18c0dc6848fe", 2237 | "reference": "80d520ad59e64273dfe4f4e20f6e18c0dc6848fe", 2238 | "shasum": "" 2239 | }, 2240 | "require": { 2241 | "php": ">=5.3.1" 2242 | }, 2243 | "conflict": { 2244 | "nette/nette": "<2.2" 2245 | }, 2246 | "require-dev": { 2247 | "nette/tester": "~1.0" 2248 | }, 2249 | "type": "library", 2250 | "extra": { 2251 | "branch-alias": { 2252 | "dev-master": "2.3-dev" 2253 | } 2254 | }, 2255 | "autoload": { 2256 | "classmap": [ 2257 | "src/" 2258 | ] 2259 | }, 2260 | "notification-url": "https://packagist.org/downloads/", 2261 | "license": [ 2262 | "BSD-3-Clause", 2263 | "GPL-2.0", 2264 | "GPL-3.0" 2265 | ], 2266 | "authors": [ 2267 | { 2268 | "name": "David Grudl", 2269 | "homepage": "http://davidgrudl.com" 2270 | }, 2271 | { 2272 | "name": "Nette Community", 2273 | "homepage": "http://nette.org/contributors" 2274 | } 2275 | ], 2276 | "description": "Nette Tokenizer", 2277 | "homepage": "http://nette.org", 2278 | "time": "2015-01-27 13:36:59" 2279 | }, 2280 | { 2281 | "name": "nette/utils", 2282 | "version": "dev-master", 2283 | "source": { 2284 | "type": "git", 2285 | "url": "https://github.com/nette/utils.git", 2286 | "reference": "d313999e0fa64c48fe96d44d7d043b6344ee1518" 2287 | }, 2288 | "dist": { 2289 | "type": "zip", 2290 | "url": "https://api.github.com/repos/nette/utils/zipball/d313999e0fa64c48fe96d44d7d043b6344ee1518", 2291 | "reference": "d313999e0fa64c48fe96d44d7d043b6344ee1518", 2292 | "shasum": "" 2293 | }, 2294 | "require": { 2295 | "php": ">=5.3.1" 2296 | }, 2297 | "conflict": { 2298 | "nette/nette": "<2.2" 2299 | }, 2300 | "require-dev": { 2301 | "nette/tester": "~1.0" 2302 | }, 2303 | "suggest": { 2304 | "ext-gd": "to use Image", 2305 | "ext-iconv": "to use Strings::webalize() and toAscii()", 2306 | "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", 2307 | "ext-mbstring": "to use Strings::lower() etc..." 2308 | }, 2309 | "type": "library", 2310 | "extra": { 2311 | "branch-alias": { 2312 | "dev-master": "2.3-dev" 2313 | } 2314 | }, 2315 | "autoload": { 2316 | "classmap": [ 2317 | "src/" 2318 | ] 2319 | }, 2320 | "notification-url": "https://packagist.org/downloads/", 2321 | "license": [ 2322 | "BSD-3-Clause", 2323 | "GPL-2.0", 2324 | "GPL-3.0" 2325 | ], 2326 | "authors": [ 2327 | { 2328 | "name": "David Grudl", 2329 | "homepage": "http://davidgrudl.com" 2330 | }, 2331 | { 2332 | "name": "Nette Community", 2333 | "homepage": "http://nette.org/contributors" 2334 | } 2335 | ], 2336 | "description": "Nette Utility Classes", 2337 | "homepage": "http://nette.org", 2338 | "time": "2015-02-26 08:08:08" 2339 | }, 2340 | { 2341 | "name": "symfony/console", 2342 | "version": "2.6.x-dev", 2343 | "target-dir": "Symfony/Component/Console", 2344 | "source": { 2345 | "type": "git", 2346 | "url": "https://github.com/symfony/Console.git", 2347 | "reference": "0f670aba3dd4750a7539890f401f609c1bad2453" 2348 | }, 2349 | "dist": { 2350 | "type": "zip", 2351 | "url": "https://api.github.com/repos/symfony/Console/zipball/0f670aba3dd4750a7539890f401f609c1bad2453", 2352 | "reference": "0f670aba3dd4750a7539890f401f609c1bad2453", 2353 | "shasum": "" 2354 | }, 2355 | "require": { 2356 | "php": ">=5.3.3" 2357 | }, 2358 | "require-dev": { 2359 | "psr/log": "~1.0", 2360 | "symfony/event-dispatcher": "~2.1", 2361 | "symfony/phpunit-bridge": "~2.7", 2362 | "symfony/process": "~2.1" 2363 | }, 2364 | "suggest": { 2365 | "psr/log": "For using the console logger", 2366 | "symfony/event-dispatcher": "", 2367 | "symfony/process": "" 2368 | }, 2369 | "type": "library", 2370 | "extra": { 2371 | "branch-alias": { 2372 | "dev-master": "2.6-dev" 2373 | } 2374 | }, 2375 | "autoload": { 2376 | "psr-0": { 2377 | "Symfony\\Component\\Console\\": "" 2378 | } 2379 | }, 2380 | "notification-url": "https://packagist.org/downloads/", 2381 | "license": [ 2382 | "MIT" 2383 | ], 2384 | "authors": [ 2385 | { 2386 | "name": "Symfony Community", 2387 | "homepage": "http://symfony.com/contributors" 2388 | }, 2389 | { 2390 | "name": "Fabien Potencier", 2391 | "email": "fabien@symfony.com" 2392 | } 2393 | ], 2394 | "description": "Symfony Console Component", 2395 | "homepage": "http://symfony.com", 2396 | "time": "2015-02-24 11:52:21" 2397 | }, 2398 | { 2399 | "name": "tracy/tracy", 2400 | "version": "dev-master", 2401 | "source": { 2402 | "type": "git", 2403 | "url": "https://github.com/nette/tracy.git", 2404 | "reference": "19493609e3306e2a61c1b988cd30aa39bf487fc3" 2405 | }, 2406 | "dist": { 2407 | "type": "zip", 2408 | "url": "https://api.github.com/repos/nette/tracy/zipball/19493609e3306e2a61c1b988cd30aa39bf487fc3", 2409 | "reference": "19493609e3306e2a61c1b988cd30aa39bf487fc3", 2410 | "shasum": "" 2411 | }, 2412 | "require": { 2413 | "php": ">=5.3.1" 2414 | }, 2415 | "require-dev": { 2416 | "nette/di": "~2.3", 2417 | "nette/tester": "~1.3" 2418 | }, 2419 | "type": "library", 2420 | "extra": { 2421 | "branch-alias": { 2422 | "dev-master": "2.3-dev" 2423 | } 2424 | }, 2425 | "autoload": { 2426 | "classmap": [ 2427 | "src" 2428 | ], 2429 | "files": [ 2430 | "src/shortcuts.php" 2431 | ] 2432 | }, 2433 | "notification-url": "https://packagist.org/downloads/", 2434 | "license": [ 2435 | "BSD-3-Clause", 2436 | "GPL-2.0", 2437 | "GPL-3.0" 2438 | ], 2439 | "authors": [ 2440 | { 2441 | "name": "David Grudl", 2442 | "homepage": "http://davidgrudl.com" 2443 | }, 2444 | { 2445 | "name": "Nette Community", 2446 | "homepage": "http://nette.org/contributors" 2447 | } 2448 | ], 2449 | "description": "Tracy: useful PHP debugger", 2450 | "homepage": "http://tracy.nette.org", 2451 | "keywords": [ 2452 | "debug", 2453 | "debugger", 2454 | "nette" 2455 | ], 2456 | "time": "2015-02-26 08:10:17" 2457 | } 2458 | ], 2459 | "packages-dev": [ 2460 | { 2461 | "name": "nette/tester", 2462 | "version": "dev-master", 2463 | "source": { 2464 | "type": "git", 2465 | "url": "https://github.com/nette/tester.git", 2466 | "reference": "f3bf32d831dc462a66d9a115f4345397335e658b" 2467 | }, 2468 | "dist": { 2469 | "type": "zip", 2470 | "url": "https://api.github.com/repos/nette/tester/zipball/f3bf32d831dc462a66d9a115f4345397335e658b", 2471 | "reference": "f3bf32d831dc462a66d9a115f4345397335e658b", 2472 | "shasum": "" 2473 | }, 2474 | "require": { 2475 | "php": ">=5.3.0" 2476 | }, 2477 | "bin": [ 2478 | "Tester/tester" 2479 | ], 2480 | "type": "library", 2481 | "extra": { 2482 | "branch-alias": { 2483 | "dev-master": "1.3-dev" 2484 | } 2485 | }, 2486 | "autoload": { 2487 | "classmap": [ 2488 | "Tester/" 2489 | ] 2490 | }, 2491 | "notification-url": "https://packagist.org/downloads/", 2492 | "license": [ 2493 | "BSD-3-Clause", 2494 | "GPL-2.0", 2495 | "GPL-3.0" 2496 | ], 2497 | "authors": [ 2498 | { 2499 | "name": "David Grudl", 2500 | "homepage": "http://davidgrudl.com" 2501 | }, 2502 | { 2503 | "name": "Nette Community", 2504 | "homepage": "http://nette.org/contributors" 2505 | } 2506 | ], 2507 | "description": "An easy-to-use PHP unit testing framework.", 2508 | "homepage": "http://nette.org", 2509 | "keywords": [ 2510 | "nette", 2511 | "testing", 2512 | "unit" 2513 | ], 2514 | "time": "2015-02-26 08:07:42" 2515 | } 2516 | ], 2517 | "aliases": [], 2518 | "minimum-stability": "dev", 2519 | "stability-flags": { 2520 | "mockery/mockery": 20, 2521 | "symfony/console": 20, 2522 | "kdyby/doctrine": 20 2523 | }, 2524 | "prefer-stable": false, 2525 | "prefer-lowest": false, 2526 | "platform": { 2527 | "php": ">= 5.5.0" 2528 | }, 2529 | "platform-dev": [] 2530 | } 2531 | -------------------------------------------------------------------------------- /license-mit.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Vojtěch Kohout (aka Tharos) 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /log/.htaccess: -------------------------------------------------------------------------------- 1 | Order Allow,Deny 2 | Deny from all -------------------------------------------------------------------------------- /log/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | RPG example 2 | =========== 3 | 4 | This repository contains an example of trivial RPG game core based on [Nette Framework](http://nette.org) and [Kdyby\Doctrine](https://github.com/Kdyby/Doctrine) libraries. 5 | It is meant to be used for study purposes. 6 | 7 | See [this post](http://forum.nette.org/cs/22304-zavislost-jednoho-modelu-na-jinych#p152039) for motivation. 8 | 9 | ![RPG](https://dl.dropboxusercontent.com/u/64984807/rpg.png) 10 | 11 | ------- 12 | 13 | In order to get the application running please: 14 | 15 | 1. Clone this repository into some empty directory 16 | 2. Run `composer install` in that directory 17 | 3. Create an empty MySQL database and run `/_resources/schema.sql` and `/_resources/data.sql` script on it 18 | 4. Copy `/config/config.local.sample.neon` to `/config/config.local.neon` 19 | 5. Update database connection settings in `/config/config.local.neon` 20 | 6. Make sure that the web server can write into directories `/log` and `/temp` 21 | 22 | And that's all. Now you can use "entry point" `http://localhost//www/` 23 | 24 | If you want to switch the application into a *dev* mode, please place empty file named `dev` into `/app/config` directory. 25 | 26 | Requirements 27 | ------- 28 | 29 | Application requires PHP 5.5 or newer and MySQL 5 or newer. It is intended for running on Apache or Nginx server. 30 | 31 | License 32 | ------- 33 | 34 | MIT 35 | 36 | Copyright (c) 2015 Vojtěch Kohout (aka Tharos) 37 | -------------------------------------------------------------------------------- /temp/.htaccess: -------------------------------------------------------------------------------- 1 | Order Allow,Deny 2 | Deny from all -------------------------------------------------------------------------------- /temp/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tests/RPG/Game/ItemTest.php: -------------------------------------------------------------------------------- 1 | shouldReceive('addItem')->getMock() 22 | ->shouldReceive('removeItem')->getMock(); 23 | 24 | $playerB = Mockery::mock(Player::class) 25 | ->shouldReceive('addItem')->getMock(); 26 | 27 | $item = new Item(1, $playerA, 100); 28 | 29 | Assert::same($playerA, $item->getOwner()); 30 | 31 | $item->changeOwner($playerB); 32 | 33 | Assert::same($playerB, $item->getOwner()); 34 | } 35 | 36 | } 37 | 38 | 39 | 40 | (new ItemTest)->run(); 41 | 42 | 43 | -------------------------------------------------------------------------------- /tests/RPG/Game/PlayerTest.php: -------------------------------------------------------------------------------- 1 | getCredits()); 25 | 26 | $player->receiveCredits(50); 27 | 28 | Assert::same(Player::CREDITS_DEFAULT + 50, $player->getCredits()); 29 | } 30 | 31 | 32 | 33 | public function testReceiveCreditsException() 34 | { 35 | $player = new Player('A'); 36 | 37 | Assert::throws(function () use ($player) { 38 | $player->receiveCredits(-50); 39 | }, InvalidArgumentException::class); 40 | } 41 | 42 | 43 | 44 | public function testBuyItem() 45 | { 46 | $playerA = new Player('A'); 47 | $playerB = new Player('B'); 48 | 49 | $item = Mockery::mock(Item::class) 50 | ->shouldReceive('getPrice')->andReturn(50)->getMock() 51 | ->shouldReceive('getOwner')->andReturn($playerB)->getMock() 52 | ->shouldReceive('changeOwner')->atLeast()->once()->getMock(); 53 | 54 | Assert::same(Player::CREDITS_DEFAULT, $playerA->getCredits()); 55 | 56 | $playerA->buyItem($item); 57 | 58 | Assert::same(Player::CREDITS_DEFAULT - 50, $playerA->getCredits()); 59 | Assert::same(Player::CREDITS_DEFAULT + 50, $playerB->getCredits()); 60 | } 61 | 62 | 63 | 64 | public function testBuyItemException() 65 | { 66 | $player = new Player('A'); 67 | 68 | $item = Mockery::mock(Item::class) 69 | ->shouldReceive('getPrice')->andReturn(150)->getMock(); 70 | 71 | Assert::throws(function () use ($player, $item) { 72 | $player->buyItem($item); 73 | }, NotEnoughCreditsException::class); 74 | } 75 | 76 | 77 | 78 | public function testAddItemException() 79 | { 80 | $player = new Player('A'); 81 | 82 | $item = Mockery::mock(Item::class) 83 | ->shouldReceive('isReleased')->andReturn(FALSE)->getMock(); 84 | 85 | Assert::throws(function () use ($player, $item) { 86 | $player->addItem($item); 87 | }, InvalidArgumentException::class, "Cannot add item that isn't released."); 88 | } 89 | 90 | 91 | 92 | public function testRemoveItemException() 93 | { 94 | $player = new Player('A'); 95 | 96 | $item = Mockery::mock(Item::class) 97 | ->shouldReceive('isReleased')->andReturn(FALSE)->getMock(); 98 | 99 | Assert::throws(function () use ($player, $item) { 100 | $player->removeItem($item); 101 | }, InvalidArgumentException::class, "Cannot remove item that isn't released."); 102 | } 103 | 104 | 105 | 106 | protected function tearDown() 107 | { 108 | parent::tearDown(); 109 | Mockery::close(); 110 | } 111 | 112 | } 113 | 114 | 115 | 116 | (new PlayerTest)->run(); 117 | 118 | 119 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | setDebugMode(FALSE); 14 | $configurator->setTempDirectory(__DIR__ . '/../temp'); 15 | $configurator->createRobotLoader() 16 | ->addDirectory(__DIR__ . '/../app') 17 | ->register(); 18 | 19 | $configurator->addConfig(__DIR__ . '/../app/config/config.neon'); 20 | $configurator->addConfig(__DIR__ . '/../app/config/config.local.neon'); 21 | return $configurator->createContainer(); 22 | -------------------------------------------------------------------------------- /vendor/.htaccess: -------------------------------------------------------------------------------- 1 | Order Allow,Deny 2 | Deny from all 3 | -------------------------------------------------------------------------------- /vendor/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /www/.htaccess: -------------------------------------------------------------------------------- 1 | # Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html) 2 | 3 | # disable directory listing 4 | 5 | Options -Indexes 6 | 7 | 8 | # enable cool URL 9 | 10 | RewriteEngine On 11 | # RewriteBase / 12 | 13 | # prevents files starting with dot to be viewed by browser 14 | RewriteRule /\.|^\. - [F] 15 | 16 | # front controller 17 | RewriteCond %{REQUEST_FILENAME} !-f 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L] 20 | 21 | 22 | # enable gzip compression 23 | 24 | 25 | AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json 26 | 27 | 28 | -------------------------------------------------------------------------------- /www/css/reset.css: -------------------------------------------------------------------------------- 1 | /* html5doctor.com Reset v1.6.1 (http://html5doctor.com/html-5-reset-stylesheet/) - http://cssreset.com */ 2 | html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { 3 | margin: 0; 4 | padding: 0; 5 | border: 0; 6 | outline: 0; 7 | font-size: 100%; 8 | vertical-align: baseline; 9 | background: transparent 10 | } 11 | 12 | body { 13 | line-height: 1 14 | } 15 | 16 | article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { 17 | display: block 18 | } 19 | 20 | nav ul { 21 | list-style: none 22 | } 23 | 24 | blockquote, q { 25 | quotes: none 26 | } 27 | 28 | blockquote:before, blockquote:after, q:before, q:after { 29 | content: none 30 | } 31 | 32 | a { 33 | margin: 0; 34 | padding: 0; 35 | font-size: 100%; 36 | vertical-align: baseline; 37 | background: transparent 38 | } 39 | 40 | ins { 41 | background-color: #ff9; 42 | color: #000; 43 | text-decoration: none 44 | } 45 | 46 | mark { 47 | background-color: #ff9; 48 | color: #000; 49 | font-style: italic; 50 | font-weight: bold 51 | } 52 | 53 | del { 54 | text-decoration: line-through 55 | } 56 | 57 | abbr[title], dfn[title] { 58 | border-bottom: 1px dotted; 59 | cursor: help 60 | } 61 | 62 | table { 63 | border-collapse: collapse; 64 | border-spacing: 0 65 | } 66 | 67 | hr { 68 | display: block; 69 | height: 1px; 70 | border: 0; 71 | border-top: 1px solid #ccc; 72 | margin: 1em 0; 73 | padding: 0 74 | } 75 | 76 | input, select { 77 | vertical-align: middle 78 | } 79 | 80 | /* clearfix */ 81 | .clearfix:after { 82 | visibility: hidden; 83 | display: block; 84 | font-size: 0; 85 | content: " "; 86 | clear: both; 87 | height: 0; 88 | } 89 | 90 | *:first-child + html .clearfix { 91 | zoom: 1; 92 | } 93 | 94 | .cleaner { 95 | clear: both; 96 | font-size: 0; 97 | height: 0; 98 | } 99 | -------------------------------------------------------------------------------- /www/css/rpg.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: white; 3 | font: 15px/23px 'Open Sans', sans-serif; 4 | color: #333; 5 | } 6 | 7 | h2, h3 { 8 | color: #358000; 9 | line-height: 34px; 10 | margin: 0; 11 | padding-top: 4px; 12 | padding-bottom: 8px; 13 | } 14 | 15 | h2 { 16 | font-size: 23px; 17 | } 18 | 19 | h3 { 20 | font-size: 18px; 21 | } 22 | 23 | p, ul, table { 24 | margin-bottom: 23px; 25 | } 26 | 27 | ul { 28 | padding-left: 30px; 29 | } 30 | 31 | ul ul { 32 | margin-bottom: 0; 33 | } 34 | 35 | form select { 36 | width: 100px; 37 | cursor: pointer; 38 | } 39 | 40 | form label { 41 | display: block; 42 | text-align: left; 43 | padding-right: 10px; 44 | } 45 | 46 | form input[type=submit] { 47 | font-size: 18px; 48 | width: 100px; 49 | } 50 | 51 | form .error { 52 | color: red; 53 | } 54 | 55 | #page { 56 | width: 700px; 57 | margin: 30px auto 50px; 58 | border: 1px solid #ccc; 59 | background: #fafafa; 60 | } 61 | 62 | .l-cols .l-mainContent, .l-cols .l-extraContent { 63 | width: 330px; 64 | padding: 5px 10px 1px; 65 | } 66 | 67 | .l-cols .l-mainContent { 68 | float: left; 69 | } 70 | 71 | .l-cols .l-extraContent { 72 | float: right; 73 | } 74 | 75 | .items { 76 | list-style-type: none; 77 | } 78 | 79 | .messages { 80 | padding: 0; 81 | } 82 | 83 | .message { 84 | font-size: 13px; 85 | list-style-type: none; 86 | border: 1px solid #ccc; 87 | margin-bottom: 10px; 88 | padding: 2px 4px; 89 | background: #fefefe; 90 | 91 | } 92 | 93 | .message-recipient { 94 | font-weight: bold; 95 | margin-right: 10px; 96 | } 97 | 98 | .message-content { 99 | display: block; 100 | } 101 | .flash { 102 | font-size: 16px; 103 | text-align: center; 104 | line-height: 34px; 105 | padding-top: 6px; 106 | padding-bottom: 6px; 107 | } 108 | .flash-success { 109 | color: green; 110 | } 111 | -------------------------------------------------------------------------------- /www/index.php: -------------------------------------------------------------------------------- 1 | getByType(Application::class)->run(); 8 | -------------------------------------------------------------------------------- /www/robots.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tharos/RPG/7808540355ff536ab1ef200da397ca0e2cea1c40/www/robots.txt -------------------------------------------------------------------------------- /www/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | --------------------------------------------------------------------------------