function DefineExtensions(&$Context) { $Extensions = array(); $CurrExtensions = array(); $CurrentExtensions = @file($Context->Configuration["APPLICATION_PATH"] . 'conf/extensions.php'); if (!$CurrentExtensions) { $Context->WarningCollector->Add($Context->GetDefinition('ErrReadFileExtensions') . $Context->Configuration["APPLICATION_PATH"] . 'conf/extensions.php'); } else { foreach ($CurrentExtensions as $ExLine) { if (substr($ExLine, 0, 7) == 'include') { $CurrExtensions[] = substr(trim($ExLine), 43, -15); } } } // Examine Extensions directory $FolderHandle = @opendir($Context->Configuration["EXTENSIONS_PATH"]); if (!$FolderHandle) { $Context->WarningCollector->Add(str_replace("//1", $Context->Configuration["EXTENSIONS_PATH"], $Context->GetDefinition('ErrOpenDirectoryExtensions'))); return false; } else { // Loop through each Extension folder while (false !== ($Item = readdir($FolderHandle))) { $Extension = $Context->ObjectFactory->NewObject($Context, 'Extension'); $RecordItem = true; // skip directories and hidden files if (strlen($Item) < 1 || !is_dir($Context->Configuration["EXTENSIONS_PATH"] . $Item) || !file_exists($Context->Configuration["EXTENSIONS_PATH"] . $Item . '/default.php')) { continue; } // Retrieve Extension properties $Lines = @file($Context->Configuration["EXTENSIONS_PATH"] . $Item . '/default.php'); if (!$Lines) { $Context->WarningCollector->Add($Context->GetDefinition('ErrReadExtensionDefinition') . " {$Item}"); } else { // We only examine the first 30 lines of the file $Header = array_slice($Lines, 0, 30); $Extension->FileName = $Item . "/default.php"; foreach ($Header as $CurrentLine) { @(list($key, $val) = @explode(': ', trim($CurrentLine), 2)); switch ($key) { case 'Extension Name': $Extension->Name = FormatStringForDisplay($val); break; case 'Extension Url': $Extension->Url = FormatStringForDisplay($val); break; case 'Description': $Extension->Description = FormatStringForDisplay($val); break; case 'Version': $Extension->Version = FormatStringForDisplay($val); break; case 'Author': $Extension->Author = FormatStringForDisplay($val); break; case 'Author Url': $Extension->AuthorUrl = FormatStringForDisplay($val); break; default: // nothing } } if ($Extension->IsValid()) { $Extension->Enabled = in_array($Item, $CurrExtensions); $Extensions[FormatExtensionKey($Extension->Name)] = $Extension; } } } ksort($Extensions); return $Extensions; } }
function DefineExtensions(&$Context, $update = false) { $Extensions = array(); $CurrExtensions = array(); $CurrentExtensions = @file($Context->Configuration["APPLICATION_PATH"] . 'conf/extensions.php'); if (!$CurrentExtensions) { $Context->WarningCollector->Add($Context->GetDefinition('ErrReadFileExtensions') . $Context->Configuration["APPLICATION_PATH"] . 'conf/extensions.php'); } else { foreach ($CurrentExtensions as $ExLine) { if (substr($ExLine, 0, 7) == 'include') { $CurrExtensions[] = substr(trim($ExLine), 43, -15); } } } // Examine Extensions directory $FolderHandle = @opendir($Context->Configuration["EXTENSIONS_PATH"]); if (!$FolderHandle) { $Context->WarningCollector->Add(str_replace("//1", $Context->Configuration["EXTENSIONS_PATH"], $Context->GetDefinition('ErrOpenDirectoryExtensions'))); return false; } else { // Loop through each Extension folder while (false !== ($Item = readdir($FolderHandle))) { $Extension = $Context->ObjectFactory->NewObject($Context, 'Extension'); $RecordItem = true; // Skip directories and hidden files if (strlen($Item) < 1 || !is_dir($Context->Configuration["EXTENSIONS_PATH"] . $Item) || !file_exists($Context->Configuration["EXTENSIONS_PATH"] . $Item . '/default.php')) { continue; } // Retrieve Extension properties $Lines = @file($Context->Configuration["EXTENSIONS_PATH"] . $Item . '/default.php'); if (!$Lines) { $Context->WarningCollector->Add($Context->GetDefinition('ErrReadExtensionDefinition') . " {$Item}"); } else { // We only examine the first 30 lines of the file $Header = array_slice($Lines, 0, 30); $Extension->FileName = $Item . "/default.php"; foreach ($Header as $CurrentLine) { @(list($key, $val) = @explode(': ', trim($CurrentLine), 2)); switch ($key) { case 'Extension Name': $Extension->Name = FormatStringForDisplay($val); break; case 'Extension Url': $Extension->Url = FormatStringForDisplay($val); break; case 'Description': $Extension->Description = FormatStringForDisplay($val); break; case 'Version': $Extension->Version = FormatStringForDisplay($val); break; case 'Author': $Extension->Author = FormatStringForDisplay($val); break; case 'Author Url': $Extension->AuthorUrl = FormatStringForDisplay($val); break; default: // Nothing } } if ($Extension->IsValid()) { $isOfficial = false; // Loop through the list of official extensions so we know to exclude them from update checking $OfficialExtensionsArray = explode(';', $Context->Configuration['OFFICIAL_EXTENSIONS']); foreach ($OfficialExtensionsArray as $OfficialExtension) { if ($Extension->Name == $OfficialExtension) { $isOfficial = true; } } // If the user is on the "Updates & Reminders" page if ($update == true) { // If this isn't an official extension, add it to the list of extensions to be checked for updates if ($isOfficial == false) { $Extension->Enabled = in_array($Item, $CurrExtensions); $Extensions[FormatExtensionKey($Extension->Name)] = $Extension; } // If the user is on the Extensions page } else { $Extension->Enabled = in_array($Item, $CurrExtensions); $Extensions[FormatExtensionKey($Extension->Name)] = $Extension; if ($isOfficial == true) { $Extension->Official = 1; } } } } } uksort($Extensions, "strnatcasecmp"); return $Extensions; } }