Move projectlist classes to their own folder
[gitphp.git] / include / git / ProjectListArray.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php
/**
 * GitPHP ProjectListArray
 *
 * Lists all projects in a multidimensional array
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2010 Christopher Han
 * @package GitPHP
 * @subpackage Git
 */
 
require_once(GITPHP_GITOBJECTDIR . 'ProjectListBase.class.php');
require_once(GITPHP_GITOBJECTDIR . 'Project.class.php');
 
/**
 * ProjectListArray class
 *
 * @package GitPHP
 * @subpackage Git
 */
class GitPHP_ProjectListArray extends GitPHP_ProjectListBase
{
 
        /**
         * __construct
         *
         * constructor
         *
         * @param string $projectRoot project root
         * @param mixed $projectArray array to read
         * @throws Exception if parameter is not an array
         * @access public
         */
        public function __construct($projectRoot, $projectArray)
        {
                if (!is_array($projectArray)) {
                        throw new Exception('An array of projects is required');
                }
 
                $this->projectConfig = $projectArray;
 
                parent::__construct($projectRoot);
        }
 
        /**
         * PopulateProjects
         *
         * Populates the internal list of projects
         *
         * @access protected
         * @throws Exception if file cannot be read
         */
        protected function PopulateProjects()
        {
                foreach ($this->projectConfig as $proj => $projData) {
                        try {
                                if (is_string($projData)) {
                                        // Just flat array of project paths
                                        $projObj = $this->InstantiateProject($projData);
                                        if ($projObj) {
                                                $this->projects[$projData] = $projObj;
                                                unset($projObj);
                                        }
                                } else if (is_array($projData)) {
                                        if (is_string($proj) && !empty($proj)) {
                                                // Project key pointing to data array
                                                $projObj = $this->InstantiateProject($proj);
                                                if ($projObj) {
                                                        $this->projects[$proj] = $projObj;
                                                        unset($projObj);
                                                }
                                        } else if (isset($projData['project'])) {
                                                // List of data arrays with projects inside
                                                $projObj = $this->InstantiateProject($projData['project']);
                                                if ($projObj) {
                                                        $this->projects[$projData['project']] = $projObj;
                                                        unset($projObj);
                                                }
                                        }
                                }
                        } catch (Exception $e) {
                                GitPHP_DebugLog::GetInstance()->Log($e->getMessage());
                        }
                }
        }
 
        /**
         * InstantiateProject
         *
         * Instantiates project object
         *
         * @access protected
         * @param string $proj project
         * @return mixed project
         */
        protected function InstantiateProject($proj)
        {
                $found = false;
                $projectSettings = null;
                foreach ($this->projectConfig as $key => $projData) {
                        if (is_string($projData) && ($projData == $proj)) {
                                // Just flat array of project paths
                                $found = true;
                                break;
                        } else if (is_array($projData)) {
                                if (is_string($key) && !empty($key) && ($key == $proj)) {
                                        // Project key pointing to data array
                                        $found = true;
                                        $projectSettings = $projData;
                                        break;
                                }
                                if (isset($projData['project']) && ($projData['project'] == $proj)) {
                                        // List of data arrays with projects inside
                                        $found = true;
                                        $projectSettings = $projData;
                                        break;
                                }
                        }
                }
 
                if (!$found) {
                        return;
                }
 
                $projectObj = new GitPHP_Project($this->projectRoot, $proj);
 
                $this->ApplyGlobalConfig($projectObj);
 
                $this->ApplyGitConfig($projectObj);
 
                if ($projectSettings != null)
                        $this->ApplyProjectSettings($projectObj, $projectSettings);
 
                if ($this->projectSettings && isset($this->projectSettings[$proj])) {
                        $this->ApplyProjectSettings($projectObj, $this->projectSettings[$proj]);
                }
 
                return $projectObj;
        }
 
}
 
comments