public function testConfig() { $c = new Config(array('data' => 123), true); $this->assertEquals(123, $c->data); $c->data = 456; $this->assertEquals(456, $c->data); $this->assertEquals(1, count($c->asArray())); unset($c->data); $this->assertNull($c->data); }
/** * Static method to get model types * * @param \Pop\Config $config * @return array */ public static function getResources($config = null) { $resources = array(); $exclude = array(); $override = null; // Get any exclude or override config values if (null !== $config) { $configAry = $config->asArray(); if (isset($configAry['exclude_controllers'])) { $exclude = $configAry['exclude_controllers']; } if (isset($configAry['override'])) { $override = $configAry['override']; } } // If override, set overridden resources if (null !== $override) { foreach ($override as $resource) { $resources[] = $resource; } // Else, get all controllers from the system and module directories } else { $systemDirectory = new Dir(realpath(__DIR__ . '/../../../../'), true); $systemModuleDirectory = new Dir(realpath(__DIR__ . '/../../../../../module/'), true); $moduleDirectory = new Dir(realpath($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/extensions/modules'), true); $dirs = array_merge($systemDirectory->getFiles(), $systemModuleDirectory->getFiles(), $moduleDirectory->getFiles()); sort($dirs); // Dir clean up foreach ($dirs as $key => $dir) { unset($dirs[$key]); if (!(strpos($dir, 'config') !== false || strpos($dir, 'index.html') !== false)) { $k = $dir; if (substr($dir, -1) == DIRECTORY_SEPARATOR) { $k = substr($k, 0, -1); } $k = substr($k, strrpos($k, DIRECTORY_SEPARATOR) + 1); $dirs[$k] = $dir; } } // Loop through each directory, looking for controller class files foreach ($dirs as $mod => $dir) { if (file_exists($dir . 'src/' . $mod . '/Controller')) { $d = new Dir($dir . 'src/' . $mod . '/Controller', true, true, false); $dFiles = $d->getFiles(); sort($dFiles); // If found, loop through the files, getting the methods as the "permissions" foreach ($dFiles as $c) { if (strpos($c, 'index.html') === false && strpos($c, 'Abstract') === false) { // Get all public methods from class $class = str_replace(array('.php', DIRECTORY_SEPARATOR), array('', '\\'), substr($c, strpos($c, 'src') + 4)); $code = new \ReflectionClass($class); $methods = $code->getMethods(\ReflectionMethod::IS_PUBLIC); $actions = array(); foreach ($methods as $value) { if ($value->getName() !== '__construct' && $value->class == $class) { $action = $value->getName(); if (!isset($exclude[$class]) || isset($exclude[$class]) && is_array($exclude[$class]) && !in_array($action, $exclude[$class])) { $actions[] = $action; } } } $types = array(0 => '(All)'); if (strpos($class, "\\Controller\\IndexController") === false) { $classAry = explode('\\', $class); $end1 = count($classAry) - 2; $end2 = count($classAry) - 1; $model = $classAry[0] . '_Model_'; if (stripos($classAry[$end2], 'index') !== false) { $model .= $classAry[$end1]; } else { if (substr($classAry[$end2], 0, 4) == 'Type') { $model .= $classAry[$end1] . 'Type'; } else { $model .= str_replace('Controller', '', $classAry[$end2]); } } if (substr($model, -3) == 'ies') { $model = substr($model, 0, -3) . 'y'; } else { if (substr($model, -1) == 's') { $model = substr($model, 0, -1); } } $types = \Phire\Project::getModelTypes($model); // Format the resource and permissions $c = str_replace(array('Controller.php', '\\'), array('', '/'), $c); $c = substr($c, strpos($c, 'Controller') + 11); $c = str_replace('Phire/', '', $c); if (!in_array($class, $exclude) || isset($exclude[$class]) && is_array($exclude[$class])) { $resources[$class] = array('name' => $c, 'types' => $types, 'actions' => $actions); } } } } } } } return $resources; }
/** * Get available model objects * * @param \Pop\Config $config * @return array */ public static function getModels($config = null) { $models = array('0' => '----'); $exclude = array(); $override = null; // Get any exclude or override config values if (null !== $config) { $configAry = $config->asArray(); if (isset($configAry['exclude_models'])) { $exclude = $configAry['exclude_models']; } if (isset($configAry['override'])) { $override = $configAry['override']; } } // If override, set overridden models if (null !== $override) { foreach ($override as $model) { $models[$model] = $model; } // Else, get all modules from the system and module directories } else { $systemDirectory = new Dir(realpath($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . APP_PATH . '/vendor'), true); $sysModuleDirectory = new Dir(realpath($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . APP_PATH . '/module'), true); $moduleDirectory = new Dir(realpath($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/extensions/modules'), true); $dirs = array_merge($systemDirectory->getFiles(), $sysModuleDirectory->getFiles(), $moduleDirectory->getFiles()); sort($dirs); // Dir clean up foreach ($dirs as $key => $dir) { unset($dirs[$key]); if (!(strpos($dir, 'PopPHPFramework') !== false || strpos($dir, 'config') !== false || strpos($dir, 'index.html') !== false)) { $k = $dir; if (substr($dir, -1) == DIRECTORY_SEPARATOR) { $k = substr($k, 0, -1); } $k = substr($k, strrpos($k, DIRECTORY_SEPARATOR) + 1); $dirs[$k] = $dir; } } // Loop through each directory, looking for model class files foreach ($dirs as $mod => $dir) { if (file_exists($dir . 'src/' . $mod . '/Model')) { $d = new Dir($dir . 'src/' . $mod . '/Model'); $dFiles = $d->getFiles(); sort($dFiles); foreach ($dFiles as $m) { if (substr($m, 0, 8) !== 'Abstract') { $model = str_replace('.php', '', $mod . '\\Model\\' . $m); $wildcardModel = '*' . substr($model, strpos($model, '\\')); if (!in_array($model, $exclude) && !in_array($wildcardModel, $exclude) && strpos($model, 'index.html') === false) { $models[$model] = strpos($model, '\\') !== false ? substr($model, strrpos($model, '\\') + 1) : $model; } } } } } } return $models; }