/** * Returns an array of available, grouped, instantiated Data Type objects. * @param string * @param boolean * @return array */ public static function getDataTypePlugins($runtimeContext, $installedOnly = true) { $allowedDataTypes = array(); if ($installedOnly) { $installedDataTypes = Settings::getSetting("installedDataTypes"); $allowedDataTypes = explode(",", $installedDataTypes); } $dataTypesFolder = realpath(__DIR__ . "/../../plugins/dataTypes"); $dataTypes = array(); if ($handle = opendir($dataTypesFolder)) { while (false !== ($item = readdir($handle))) { if ($item == "." || $item == ".." || $item == ".svn") { continue; } if (!empty($allowedDataTypes) && !in_array($item, $allowedDataTypes)) { continue; } if (is_dir("$dataTypesFolder/$item")) { $obj = self::instantiateDataType($runtimeContext, $dataTypesFolder, $item); if ($obj != null && $obj !== false) { $folders = explode(DIRECTORY_SEPARATOR, $dataTypesFolder . DIRECTORY_SEPARATOR . $item); $folders = array_reverse($folders); $obj->path = "{$folders[2]}/{$folders[1]}/{$folders[0]}"; $obj->folder = $item; $dataTypes[] = $obj; } } } closedir($handle); } // now sort the data type information by field groups first and their order within those // field groups $dataTypeGroups = Core::getDataTypeGroups(); $sortedDataTypes = array(); foreach ($dataTypeGroups as $groupNameKey) { $groupTypes = array(); foreach ($dataTypes as $currDataType) { $currFieldGroupKey = $currDataType->getDataTypeFieldGroup(); $currFieldGroupOrder = $currDataType->getDataTypeFieldGroupOrder(); if ($currFieldGroupKey == $groupNameKey) { // TODO this prevents two DataTypes using the same order, which leads to accidental bugs $groupTypes[$currFieldGroupOrder] = $currDataType; } } ksort($groupTypes, SORT_NUMERIC); $sortedDataTypes[$groupNameKey] = array_values($groupTypes); } return $sortedDataTypes; }