You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.8 KiB

6 years ago
  1. <?php
  2. class RepositoryBase {
  3. function __construct ($id, $def) {
  4. $this->def = $def;
  5. $this->path = $def['path'];
  6. }
  7. function timestamp () {
  8. return null;
  9. }
  10. function isEmpty () {
  11. return false;
  12. }
  13. function info () {
  14. $ret = array();
  15. foreach (array('name') as $k) {
  16. if (array_key_exists($k, $this->def)) {
  17. $ret[$k] = $this->def[$k];
  18. }
  19. }
  20. $ret['timestamp'] = Date(DATE_ISO8601, $this->timestamp());
  21. return $ret;
  22. }
  23. function data ($options) {
  24. $data = array(
  25. 'categories' => array(),
  26. 'templates' => array(),
  27. 'timestamp' => Date(DATE_ISO8601, $this->timestamp()),
  28. 'lang' => array(),
  29. );
  30. return $data;
  31. }
  32. function unfoldCategories (&$data, &$categories=null) {
  33. if ($categories === null) {
  34. $categories = &$data['categories'];
  35. }
  36. foreach ($categories as $id => $_category) {
  37. $category = &$categories[$id];
  38. if (is_array($category) && $category['type'] === 'index') {
  39. foreach ($category['subCategories'] as $subIndex => $_subCategory) {
  40. $subCategory = &$category['subCategories'][$subIndex];
  41. if (array_key_exists('type', $subCategory)) {
  42. $data['categories'][$subCategory['id']] = $subCategory;
  43. $this->unfoldCategories($data, $subCategory);
  44. $category['subCategories'][$subIndex] = array(
  45. 'id' => $subCategory['id']
  46. );
  47. }
  48. }
  49. }
  50. }
  51. }
  52. function updateLang (&$data, $options) {
  53. $lang = array_key_exists('lang', $options) ? $options['lang'] : 'en';
  54. $this->unfoldCategories($data);
  55. if (!is_array($data['lang'])) {
  56. $data['lang'] = array();
  57. }
  58. foreach ($data['categories'] as $id => $category) {
  59. $name = null;
  60. if (array_key_exists("category:{$id}", $data['lang'])) {
  61. $name = $data['lang']["category:{$id}"];
  62. if ($name !== '' && $name !== null) {
  63. $data['categories'][$id]['name'] = array(
  64. $lang => $data['lang']["category:{$id}"],
  65. );
  66. }
  67. }
  68. elseif (is_array($category) && array_key_exists('name', $category)) {
  69. if (array_key_exists($lang, $category['name'])) {
  70. $name = $category['name'][$lang];
  71. }
  72. elseif (array_key_exists('en', $category['name'])) {
  73. $name = $category['name']['en'];
  74. }
  75. elseif (sizeof($category['name'])) {
  76. $name = $category['name'][array_keys($category['name'])[0]];
  77. }
  78. $data['lang']["category:{$id}"] = $name;
  79. $data['categories'][$id]['name'] = array($lang => $name);
  80. }
  81. }
  82. }
  83. function isCategory ($data) {
  84. if (!array_key_exists('type', $data)) {
  85. return true;
  86. }
  87. return in_array($data['type'], array('index', 'overpass'));
  88. }
  89. }