/tests/bootstrap.php

https://github.com/brikou/mandango · PHP · 405 lines · 390 code · 6 blank · 9 comment · 0 complexity · a8b4518b59f2c322c08e95b65156f584 MD5 · raw file

  1. <?php
  2. // autoloader
  3. require_once(__DIR__.'/../vendor/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php');
  4. use Symfony\Component\ClassLoader\UniversalClassLoader;
  5. $loader = new UniversalClassLoader();
  6. $loader->registerNamespaces(array(
  7. 'Mandango' => __DIR__.'/../src',
  8. 'Mandango\Tests' => __DIR__,
  9. 'Mandango\Mondator' => __DIR__.'/../vendor/mondator/src',
  10. 'Model' => __DIR__,
  11. ));
  12. $loader->registerPrefixes(array(
  13. 'Twig_' => __DIR__.'/../vendor/twig/lib',
  14. ));
  15. $loader->register();
  16. // mondator
  17. $configClasses = array(
  18. 'Model\Article' => array(
  19. 'collection' => 'articles',
  20. 'fields' => array(
  21. 'title' => 'string',
  22. 'content' => 'string',
  23. 'note' => 'string',
  24. 'line' => 'string',
  25. 'text' => 'string',
  26. 'isActive' => 'boolean',
  27. 'date' => 'date',
  28. 'database' => array('dbName' => 'basatos', 'type' => 'string'),
  29. ),
  30. 'embeddedsOne' => array(
  31. 'source' => array('class' => 'Model\Source'),
  32. 'simpleEmbedded' => array('class' => 'Model\SimpleEmbedded'),
  33. ),
  34. 'embeddedsMany' => array(
  35. 'comments' => array('class' => 'Model\Comment'),
  36. ),
  37. 'referencesOne' => array(
  38. 'author' => array('class' => 'Model\Author', 'field' => 'authorId'),
  39. 'information' => array('class' => 'Model\ArticleInformation', 'field' => 'informationId'),
  40. 'like' => array('polymorphic' => true, 'field' => 'likeRef'),
  41. 'friend' => array('polymorphic' => true, 'field' => 'friendRef', 'discriminatorField' => 'name', 'discriminatorMap' => array(
  42. 'au' => 'Model\Author',
  43. 'ct' => 'Model\Category',
  44. 'us' => 'Model\User',
  45. )),
  46. ),
  47. 'referencesMany' => array(
  48. 'categories' => array('class' => 'Model\Category', 'field' => 'categoryIds'),
  49. 'related' => array('polymorphic' => true, 'field' => 'relatedRef'),
  50. 'elements' => array('polymorphic' => true, 'field' => 'elementsRef', 'discriminatorField' => 'type', 'discriminatorMap' => array(
  51. 'element' => 'Model\FormElement',
  52. 'textarea' => 'Model\TextareaFormElement',
  53. 'radio' => 'Model\RadioFormElement',
  54. )),
  55. ),
  56. 'relationsManyThrough' => array(
  57. 'votesUsers' => array('class' => 'Model\User', 'through' => 'Model\ArticleVote', 'local' => 'article', 'foreign' => 'user'),
  58. ),
  59. 'indexes' => array(
  60. array(
  61. 'keys' => array('slug' => 1),
  62. 'options' => array('unique' => true),
  63. ),
  64. array(
  65. 'keys' => array('authorId' => 1, 'isActive' => 1),
  66. ),
  67. ),
  68. ),
  69. 'Model\ArticleInformation' => array(
  70. 'fields' => array(
  71. 'name' => 'string',
  72. ),
  73. 'relationsOne' => array(
  74. 'article' => array('class' => 'Model\Article', 'reference' => 'information'),
  75. ),
  76. ),
  77. 'Model\ArticleVote' => array(
  78. 'fields' => array(
  79. ),
  80. 'referencesOne' => array(
  81. 'article' => array('class' => 'Model\Article', 'field' => 'articleId'),
  82. 'user' => array('class' => 'Model\User', 'field' => 'userId'),
  83. ),
  84. ),
  85. 'Model\Author' => array(
  86. 'fields' => array(
  87. 'name' => 'string',
  88. ),
  89. 'relationsManyOne' => array(
  90. 'articles' => array('class' => 'Model\Article', 'reference' => 'author'),
  91. ),
  92. ),
  93. 'Model\Category' => array(
  94. 'fields' => array(
  95. 'name' => 'string',
  96. ),
  97. 'relationsManyMany' => array(
  98. 'articles' => array('class' => 'Model\Article', 'reference' => 'categories'),
  99. ),
  100. ),
  101. 'Model\Comment' => array(
  102. 'isEmbedded' => true,
  103. 'fields' => array(
  104. 'name' => 'string',
  105. 'text' => 'string',
  106. 'note' => 'string',
  107. 'line' => 'string',
  108. ),
  109. 'referencesOne' => array(
  110. 'author' => array('class' => 'Model\Author', 'field' => 'authorId'),
  111. ),
  112. 'referencesMany' => array(
  113. 'categories' => array('class' => 'Model\Category', 'field' => 'categoryIds'),
  114. ),
  115. 'embeddedsMany' => array(
  116. 'infos' => array('class' => 'Model\Info'),
  117. ),
  118. 'indexes' => array(
  119. array(
  120. 'keys' => array('line' => 1),
  121. 'options' => array('unique' => true),
  122. ),
  123. array(
  124. 'keys' => array('authorId' => 1, 'note' => 1),
  125. ),
  126. ),
  127. ),
  128. 'Model\Info' => array(
  129. 'isEmbedded' => true,
  130. 'fields' => array(
  131. 'name' => 'string',
  132. 'text' => 'string',
  133. 'note' => 'string',
  134. 'line' => 'string',
  135. ),
  136. 'indexes' => array(
  137. array(
  138. 'keys' => array('note' => 1),
  139. 'options' => array('unique' => true),
  140. ),
  141. array(
  142. 'keys' => array('name' => 1, 'line' => 1),
  143. ),
  144. ),
  145. ),
  146. 'Model\Source' => array(
  147. 'isEmbedded' => true,
  148. 'fields' => array(
  149. 'name' => 'string',
  150. 'text' => 'string',
  151. 'note' => 'string',
  152. 'line' => 'string',
  153. 'from' => array('dbName' => 'desde', 'type' => 'string'),
  154. ),
  155. 'referencesOne' => array(
  156. 'author' => array('class' => 'Model\Author', 'field' => 'authorId'),
  157. ),
  158. 'referencesMany' => array(
  159. 'categories' => array('class' => 'Model\Category', 'field' => 'categoryIds'),
  160. ),
  161. 'embeddedsOne' => array(
  162. 'info' => array('class' => 'Model\Info'),
  163. ),
  164. 'indexes' => array(
  165. array(
  166. 'keys' => array('name' => 1),
  167. 'options' => array('unique' => true),
  168. ),
  169. array(
  170. 'keys' => array('authorId' => 1, 'line' => 1),
  171. ),
  172. ),
  173. ),
  174. 'Model\User' => array(
  175. 'fields' => array(
  176. 'username' => 'string',
  177. ),
  178. ),
  179. 'Model\SimpleEmbedded' => array(
  180. 'isEmbedded' => true,
  181. 'fields' => array(
  182. 'name' => 'string',
  183. ),
  184. ),
  185. // reference to same class
  186. 'Model\Message' => array(
  187. 'fields' => array(
  188. 'author' => 'string',
  189. ),
  190. 'referencesOne' => array(
  191. 'replyTo' => array('class' => 'Model\Message', 'field' => 'replyToId'),
  192. ),
  193. ),
  194. // default values
  195. 'Model\Book' => array(
  196. 'fields' => array(
  197. 'title' => 'string',
  198. 'comment' => array('type' => 'string', 'default' => 'good'),
  199. 'isHere' => array('type' => 'boolean', 'default' => true),
  200. ),
  201. ),
  202. // events
  203. 'Model\Events' => array(
  204. 'fields' => array(
  205. 'name' => 'string',
  206. ),
  207. 'events' => array(
  208. 'preInsert' => array('myPreInsert'),
  209. 'postInsert' => array('myPostInsert'),
  210. 'preUpdate' => array('myPreUpdate'),
  211. 'postUpdate' => array('myPostUpdate'),
  212. 'preDelete' => array('myPreDelete'),
  213. 'postDelete' => array('myPostDelete'),
  214. ),
  215. ),
  216. 'Model\EventsEmbeddedOne' => array(
  217. 'fields' => array(
  218. 'name' => 'string',
  219. ),
  220. 'embeddedsOne' => array(
  221. 'embedded' => array('class' => 'Model\EmbeddedEvents'),
  222. ),
  223. ),
  224. 'Model\EventsEmbeddedMany' => array(
  225. 'fields' => array(
  226. 'name' => 'string',
  227. ),
  228. 'embeddedsMany' => array(
  229. 'embedded' => array('class' => 'Model\EmbeddedEvents'),
  230. ),
  231. ),
  232. 'Model\EmbeddedEvents' => array(
  233. 'isEmbedded' => true,
  234. 'fields' => array(
  235. 'name' => 'string',
  236. ),
  237. 'events' => array(
  238. 'preInsert' => array('myPreInsert'),
  239. 'postInsert' => array('myPostInsert'),
  240. 'preUpdate' => array('myPreUpdate'),
  241. 'postUpdate' => array('myPostUpdate'),
  242. 'preDelete' => array('myPreDelete'),
  243. 'postDelete' => array('myPostDelete'),
  244. ),
  245. ),
  246. 'Model\InitializeArgs' => array(
  247. 'fields' => array(
  248. 'name' => 'string',
  249. ),
  250. 'referencesOne' => array(
  251. 'author' => array('class' => 'Model\Author'),
  252. ),
  253. ),
  254. // gridfs
  255. 'Model\Image' => array(
  256. 'isFile' => true,
  257. 'fields' => array(
  258. 'name' => 'string',
  259. ),
  260. ),
  261. // global connection
  262. 'Model\ConnectionGlobal' => array(
  263. 'connection' => 'global',
  264. 'fields' => array(
  265. 'field' => 'string',
  266. ),
  267. ),
  268. // single inheritance
  269. 'Model\Element' => array(
  270. 'inheritable' => array('type' => 'single'),
  271. 'fields' => array(
  272. 'label' => 'string',
  273. ),
  274. 'referencesMany' => array(
  275. 'categories' => array('class' => 'Model\Category'),
  276. ),
  277. 'embeddedsOne' => array(
  278. 'source' => array('class' => 'Model\Source'),
  279. ),
  280. ),
  281. 'Model\TextElement' => array(
  282. 'inheritable' => array('type' => 'single'),
  283. 'inheritance' => array('class' => 'Model\Element', 'value' => 'textelement'),
  284. 'fields' => array(
  285. 'htmltext' => 'string',
  286. ),
  287. ),
  288. 'Model\TextTextElement' => array(
  289. 'inheritance' => array('class' => 'Model\TextElement', 'value' => 'texttextelement'),
  290. 'fields' => array(
  291. 'text_text' => 'string',
  292. ),
  293. 'events' => array(
  294. 'preInsert' => array('textTextElementPreInsert'),
  295. ),
  296. ),
  297. 'Model\FormElement' => array(
  298. 'inheritable' => array('type' => 'single'),
  299. 'inheritance' => array('class' => 'Model\Element', 'value' => 'formelement'),
  300. 'fields' => array(
  301. 'default' => 'raw',
  302. ),
  303. 'referencesOne' => array(
  304. 'author' => array('class' => 'Model\Author'),
  305. ),
  306. 'events' => array(
  307. 'preInsert' => array('formElementPreInsert'),
  308. 'postInsert' => array('formElementPostInsert'),
  309. 'preUpdate' => array('formElementPreUpdate'),
  310. 'postUpdate' => array('formElementPostUpdate'),
  311. 'preDelete' => array('formElementPreDelete'),
  312. 'postDelete' => array('formElementPostDelete'),
  313. ),
  314. 'embeddedsMany' => array(
  315. 'comments' => array('class' => 'Model\Comment'),
  316. ),
  317. ),
  318. 'Model\TextareaFormElement' => array(
  319. 'inheritance' => array('class' => 'Model\FormElement', 'value' => 'textarea'),
  320. 'fields' => array(
  321. 'default' => 'string',
  322. ),
  323. 'events' => array(
  324. 'preInsert' => array('textareaPreInsert'),
  325. 'postInsert' => array('textareaPostInsert'),
  326. 'preUpdate' => array('textareaPreUpdate'),
  327. 'postUpdate' => array('textareaPostUpdate'),
  328. 'preDelete' => array('textareaPreDelete'),
  329. 'postDelete' => array('textareaPostDelete'),
  330. ),
  331. ),
  332. 'Model\RadioFormElement' => array(
  333. 'inheritance' => array('class' => 'Model\FormElement', 'value' => 'radio'),
  334. 'fields' => array(
  335. 'options' => 'serialized',
  336. ),
  337. 'referencesOne' => array(
  338. 'authorLocal' => array('class' => 'Model\Author'),
  339. ),
  340. 'referencesMany' => array(
  341. 'categoriesLocal' => array('class' => 'Model\Category'),
  342. ),
  343. 'embeddedsOne' => array(
  344. 'sourceLocal' => array('class' => 'Model\Source'),
  345. ),
  346. 'embeddedsMany' => array(
  347. 'commentsLocal' => array('class' => 'Model\Comment'),
  348. ),
  349. ),
  350. // id generators
  351. 'Model\NoneIdGenerator' => array(
  352. 'fields' => array(
  353. 'name' => 'string',
  354. )
  355. ),
  356. 'Model\NativeIdGenerator' => array(
  357. 'idGenerator' => 'native',
  358. 'fields' => array(
  359. 'name' => 'string',
  360. )
  361. ),
  362. 'Model\SequenceIdGenerator' => array(
  363. 'idGenerator' => 'sequence',
  364. 'fields' => array(
  365. 'name' => 'string',
  366. )
  367. ),
  368. 'Model\SequenceIdGenerator2' => array(
  369. 'idGenerator' => 'sequence',
  370. 'fields' => array(
  371. 'name' => 'string',
  372. )
  373. ),
  374. 'Model\SequenceIdGeneratorDescending' => array(
  375. 'idGenerator' => array('name' => 'sequence', 'options' => array('increment' => -1)),
  376. 'fields' => array(
  377. 'name' => 'string',
  378. )
  379. ),
  380. 'Model\SequenceIdGeneratorStart' => array(
  381. 'idGenerator' => array('name' => 'sequence', 'options' => array('start' => 2000)),
  382. 'fields' => array(
  383. 'name' => 'string',
  384. )
  385. ),
  386. );
  387. use Mandango\Mondator\Mondator;
  388. $mondator = new Mondator();
  389. $mondator->setConfigClasses($configClasses);
  390. $mondator->setExtensions(array(
  391. new Mandango\Extension\Core(array(
  392. 'metadata_factory_class' => 'Model\Mapping\Metadata',
  393. 'metadata_factory_output' => __DIR__.'/Model/Mapping',
  394. 'default_output' => __DIR__.'/Model',
  395. )),
  396. new Mandango\Extension\DocumentArrayAccess(),
  397. new Mandango\Extension\DocumentPropertyOverloading(),
  398. ));
  399. $mondator->process();