PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/_app/core/fieldset.php

https://bitbucket.org/sirestudios/fortis-wellness
PHP | 106 lines | 66 code | 19 blank | 21 comment | 6 complexity | ef3b63be9a6ac4d8a7010fd42201614e MD5 | raw file
Possible License(s): JSON
  1. <?php
  2. class statamic_fieldset
  3. {
  4. protected $data = array();
  5. protected $name = null;
  6. public function Statamic_Fieldset($data)
  7. {
  8. $this->data = $data;
  9. }
  10. public function set_name($name)
  11. {
  12. $this->name = $name;
  13. }
  14. public function get_name()
  15. {
  16. return $this->name;
  17. }
  18. public function get_data()
  19. {
  20. return $this->data;
  21. }
  22. // STATIC FUNCTIONS
  23. // ------------------------------------------------------
  24. public static function load($fieldsets)
  25. {
  26. $fields = array('fields' => array());
  27. $included_fields = array('fields' => array());
  28. $fieldset_names = array();
  29. if (! is_array($fieldsets)) {
  30. $fieldsets = array($fieldsets);
  31. }
  32. foreach ($fieldsets as $key => $name) {
  33. if (File::exists("_config/fieldsets/{$name}.yaml")) {
  34. $meta = self::fetch_fieldset($name);
  35. if (isset($meta['include'])) {
  36. if ( ! is_array($meta['include'])) {
  37. $meta['include'] = array($meta['include']);
  38. }
  39. foreach ($meta['include'] as $include_key => $include_name) {
  40. $include = self::fetch_fieldset($include_name);
  41. $included_fields['fields'] = array_merge($included_fields['fields'], $include['fields']);
  42. }
  43. }
  44. // Merge it all together
  45. $fields['fields'] = array_merge($fields['fields'], $included_fields['fields']);
  46. if (is_array(array_get($meta, 'fields', array()))) {
  47. $fields['fields'] = array_merge($fields['fields'], $meta['fields']);
  48. }
  49. $fieldset_names[] = $name;
  50. }
  51. }
  52. $set = new Statamic_Fieldset($fields);
  53. $set->set_name($fieldset_names);
  54. return $set;
  55. }
  56. public static function fetch_fieldset($fieldset)
  57. {
  58. $defaults = array('fields' => array());
  59. if (File::exists("_config/fieldsets/{$fieldset}.yaml")) {
  60. $meta_raw = file_get_contents("_config/fieldsets/{$fieldset}.yaml");
  61. $meta = array_merge($defaults, YAML::Parse($meta_raw));
  62. return $meta;
  63. }
  64. return $defaults;
  65. }
  66. public static function get_list()
  67. {
  68. $sets = array();
  69. $folder = "_config/fieldsets/*";
  70. $list = glob($folder);
  71. if ($list) {
  72. foreach ($list as $name) {
  73. if (is_dir($name)) {
  74. } else {
  75. $start = strrpos($name, "/")+1;
  76. $end = strrpos($name, ".");
  77. $key = substr($name, $start, $end-$start);
  78. $sets[$key] = self::fetch_fieldset($key);
  79. }
  80. }
  81. }
  82. return $sets;
  83. }
  84. }