RendererTrait.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * @link http://www.yiiframework.com/
  4. * @copyright Copyright (c) 2008 Yii Software LLC
  5. * @license http://www.yiiframework.com/license/
  6. */
  7. namespace yii\apidoc\templates\bootstrap;
  8. use yii\apidoc\models\TypeDoc;
  9. /**
  10. * Common methods for renderers
  11. */
  12. trait RendererTrait
  13. {
  14. /**
  15. * @var array official Yii extensions
  16. */
  17. public $extensions = [
  18. 'apidoc',
  19. 'authclient',
  20. 'bootstrap',
  21. 'codeception',
  22. 'composer',
  23. 'debug',
  24. 'elasticsearch',
  25. 'faker',
  26. 'gii',
  27. 'imagine',
  28. 'jui',
  29. 'mongodb',
  30. 'redis',
  31. 'smarty',
  32. 'sphinx',
  33. 'swiftmailer',
  34. 'twig',
  35. ];
  36. /**
  37. * Returns nav TypeDocs
  38. * @param TypeDoc $type typedoc to take category from
  39. * @param TypeDoc[] $types TypeDocs to filter
  40. * @return array
  41. */
  42. public function getNavTypes($type, $types)
  43. {
  44. if ($type === null) {
  45. return $types;
  46. }
  47. return $this->filterTypes($types, $this->getTypeCategory($type));
  48. }
  49. /**
  50. * Returns category of TypeDoc
  51. * @param TypeDoc $type
  52. * @return string
  53. */
  54. protected function getTypeCategory($type)
  55. {
  56. $extensions = $this->extensions;
  57. $navClasses = 'app';
  58. if (isset($type)) {
  59. if ($type->name == 'Yii' || $type->name == 'YiiRequirementChecker') {
  60. $navClasses = 'yii';
  61. } elseif (strncmp($type->name, 'yii\\', 4) == 0) {
  62. $navClasses = 'yii';
  63. $subName = substr($type->name, 4);
  64. if (($pos = strpos($subName, '\\')) !== false) {
  65. $subNamespace = substr($subName, 0, $pos);
  66. if (in_array($subNamespace, $extensions)) {
  67. $navClasses = $subNamespace;
  68. }
  69. }
  70. }
  71. }
  72. return $navClasses;
  73. }
  74. /**
  75. * Returns types of a given class
  76. *
  77. * @param TypeDoc[] $types
  78. * @param string $navClasses
  79. * @return array
  80. */
  81. protected function filterTypes($types, $navClasses)
  82. {
  83. switch ($navClasses) {
  84. case 'app':
  85. $types = array_filter($types, function ($val) {
  86. return strncmp($val->name, 'yii\\', 4) !== 0;
  87. });
  88. break;
  89. case 'yii':
  90. $self = $this;
  91. $types = array_filter($types, function ($val) use ($self) {
  92. if ($val->name == 'Yii' || $val->name == 'YiiRequirementChecker') {
  93. return true;
  94. }
  95. if (strlen($val->name) < 5) {
  96. return false;
  97. }
  98. $subName = substr($val->name, 4, strpos($val->name, '\\', 5) - 4);
  99. return strncmp($val->name, 'yii\\', 4) === 0 && !in_array($subName, $self->extensions);
  100. });
  101. break;
  102. default:
  103. $types = array_filter($types, function ($val) use ($navClasses) {
  104. return strncmp($val->name, "yii\\$navClasses\\", strlen("yii\\$navClasses\\")) === 0;
  105. });
  106. }
  107. return $types;
  108. }
  109. }