mirror of
https://github.com/salesagility/SuiteCRM.git
synced 2024-12-22 12:28:31 +00:00
337 lines
13 KiB
PHP
Executable File
337 lines
13 KiB
PHP
Executable File
<?php
|
|
/**
|
|
*
|
|
* SugarCRM Community Edition is a customer relationship management program developed by
|
|
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
|
|
*
|
|
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
|
|
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU Affero General Public License version 3 as published by the
|
|
* Free Software Foundation with the addition of the following permission added
|
|
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
|
|
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
|
|
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
* this program; if not, see http://www.gnu.org/licenses or write to the Free
|
|
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301 USA.
|
|
*
|
|
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
|
|
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of this program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU Affero General Public License version 3.
|
|
*
|
|
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
|
|
* these Appropriate Legal Notices must retain the display of the "Powered by
|
|
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
|
|
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
|
|
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
|
|
*/
|
|
|
|
require_once('include/nusoap/nusoap.php');
|
|
require_once('ModuleInstall/PackageManager/PackageManagerDownloader.php');
|
|
|
|
define("HTTPS_URL", "https://depot.sugarcrm.com/depot/SugarDepotSoap.php");
|
|
define("ACTIVE_STATUS", "ACTIVE");
|
|
|
|
#[\AllowDynamicProperties]
|
|
class PackageManagerComm
|
|
{
|
|
/**
|
|
* Initialize the soap client and store in the $GLOBALS object for use
|
|
*
|
|
* @param login designates whether we want to try to login after we initialize or not
|
|
*/
|
|
public static function initialize($login = true)
|
|
{
|
|
if (empty($GLOBALS['SugarDepot'])) {
|
|
$GLOBALS['log']->debug('USING HTTPS TO CONNECT TO HEARTBEAT');
|
|
$soap_client = new nusoapclient(HTTPS_URL, false);
|
|
$ping = $soap_client->call('sugarPing', array());
|
|
$GLOBALS['SugarDepot'] = $soap_client;
|
|
}
|
|
//if we do not have a session, then try to login
|
|
if ($login && empty($_SESSION['SugarDepotSessionID'])) {
|
|
self::login();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check for errors in the response or error_str
|
|
*/
|
|
public static function errorCheck()
|
|
{
|
|
if (!empty($GLOBALS['SugarDepot']->error_str)) {
|
|
$GLOBALS['log']->fatal($GLOBALS['SugarDepot']->error_str);
|
|
$GLOBALS['log']->fatal($GLOBALS['SugarDepot']->response);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set the credentials for use during login
|
|
*
|
|
* @param username Mambo username
|
|
* @param password Mambo password
|
|
* @param download_key User's download key
|
|
*/
|
|
public function setCredentials($username, $password, $download_key)
|
|
{
|
|
$_SESSION['SugarDepotUsername'] = $username;
|
|
$_SESSION['SugarDepotPassword'] = $password;
|
|
$_SESSION['SugarDepotDownloadKey'] = $download_key;
|
|
}
|
|
|
|
/**
|
|
* Clears out the session so we can reauthenticate.
|
|
*/
|
|
public static function clearSession()
|
|
{
|
|
$_SESSION['SugarDepotSessionID'] = null;
|
|
unset($_SESSION['SugarDepotSessionID']);
|
|
}
|
|
/////////////////////////////////////////////////////////
|
|
////////// BEGIN: Base Functions for Communicating with the depot
|
|
/**
|
|
* Login to the depot
|
|
*
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
public static function login($terms_checked = true)
|
|
{
|
|
if (empty($_SESSION['SugarDepotSessionID'])) {
|
|
global $license;
|
|
$GLOBALS['log']->debug("Begin SugarDepot Login");
|
|
self::initialize(false);
|
|
require('sugar_version.php');
|
|
require('config.php');
|
|
$credentials = PackageManager::getCredentials();
|
|
if (empty($license)) {
|
|
loadLicense();
|
|
}
|
|
$info = sugarEncode('2813', serialize(getSystemInfo(true)));
|
|
$pm = new PackageManager();
|
|
$installed = $pm->buildInstalledReleases();
|
|
$installed = base64_encode(serialize($installed));
|
|
$params = array('installed_modules' => $installed, 'terms_checked' => $terms_checked, 'system_name' => $credentials['system_name']);
|
|
$terms_version = (!empty($_SESSION['SugarDepot_TermsVersion']) ? $_SESSION['SugarDepot_TermsVersion'] : '');
|
|
if (!empty($terms_version)) {
|
|
$params['terms_version'] = $terms_version;
|
|
}
|
|
|
|
$result = $GLOBALS['SugarDepot']->call('depotLogin', array(array('user_name' => $credentials['username'], 'password' => $credentials['password']),'info'=>$info, 'params' => $params));
|
|
self::errorCheck();
|
|
if (!is_array($result)) {
|
|
$_SESSION['SugarDepotSessionID'] = $result;
|
|
}
|
|
$GLOBALS['log']->debug("End SugarDepot Login");
|
|
return $result;
|
|
} else {
|
|
return $_SESSION['SugarDepotSessionID'];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Logout from the depot
|
|
*/
|
|
public function logout()
|
|
{
|
|
self::initialize();
|
|
$result = $GLOBALS['SugarDepot']->call('depotLogout', array('session_id' => $_SESSION['SugarDepotSessionID']));
|
|
}
|
|
|
|
/**
|
|
* Get all promotions from the depot
|
|
*/
|
|
public static function getPromotion()
|
|
{
|
|
self::initialize();
|
|
//check for fault first and then return
|
|
$name_value_list = $GLOBALS['SugarDepot']->call('depotGetPromotion', array('session_id' => $_SESSION['SugarDepotSessionID']));
|
|
return $name_value_list;
|
|
}
|
|
|
|
/**
|
|
* A generic function which given a category_id some filter will
|
|
* return an object which contains categories and packages
|
|
*
|
|
* @param category_id the category_id to fetch
|
|
* @param filter a filter which will limit theh number of results returned
|
|
* @return categories_and_packages
|
|
* @see categories_and_packages
|
|
*/
|
|
public static function getCategoryPackages($category_id, $filter = array())
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotGetCategoriesPackages', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'filter' => $filter));
|
|
}
|
|
|
|
/**
|
|
* Return a list of child categories to the parent specified in category_id
|
|
*
|
|
* @param category_id the parent category_id
|
|
* @param filter a filter which will limit theh number of results returned
|
|
* @return categories_and_packages
|
|
* @see categories_and_packages
|
|
*/
|
|
public static function getCategories($category_id, $filter = array())
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotGetCategories', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'filter' => $filter));
|
|
}
|
|
|
|
/**
|
|
* Return a list of packages which belong to the parent category_id
|
|
*
|
|
* @param category_id the category_id to fetch
|
|
* @param filter a filter which will limit theh number of results returned
|
|
* @return packages
|
|
* @see packages
|
|
*/
|
|
public static function getPackages($category_id, $filter = array())
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotGetPackages', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'filter' => $filter));
|
|
}
|
|
|
|
/**
|
|
* Return a list of releases belong to a package
|
|
*
|
|
* @param category_id the category_id to fetch
|
|
* @param package_id the package id which the release belongs to
|
|
* @return packages
|
|
* @see packages
|
|
*/
|
|
public static function getReleases($category_id, $package_id, $filter = array())
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotGetReleases', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'package_id' => $package_id, 'filter' => $filter));
|
|
}
|
|
|
|
/**
|
|
* Download a given release
|
|
*
|
|
* @param category_id the category_id to fetch
|
|
* @param package_id the package id which the release belongs to
|
|
* @param release_id the release we want to download
|
|
* @return download
|
|
* @see download
|
|
*/
|
|
public function download($category_id, $package_id, $release_id)
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotDownloadRelease', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'package_id' => $package_id, 'release_id' => $release_id));
|
|
}
|
|
|
|
/**
|
|
* Add a requested download to the queue
|
|
*
|
|
* @param category_id the category_id to fetch
|
|
* @param package_id the package id which the release belongs to
|
|
* @param release_id the release we want to download
|
|
* @return the filename to download
|
|
*/
|
|
public static function addDownload($category_id, $package_id, $release_id)
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotAddDownload', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'package_id' => $package_id, 'release_id' => $release_id, 'download_key' => '123'));
|
|
}
|
|
|
|
/**
|
|
* Call the PackageManagerDownloader function which uses curl in order to download the specified file
|
|
*
|
|
* @param filename the file to download
|
|
* @return path to downloaded file
|
|
*/
|
|
public static function performDownload($filename)
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
$GLOBALS['log']->debug("Performing download from depot: Session ID: ".$_SESSION['SugarDepotSessionID']." Filename: ".$filename);
|
|
return PackageManagerDownloader::download($_SESSION['SugarDepotSessionID'], $filename);
|
|
}
|
|
|
|
/**
|
|
* Retrieve documentation for the given release or package
|
|
*
|
|
* @param package_id the specified package to retrieve documentation
|
|
* @param release_id the specified release to retrieve documentation
|
|
*
|
|
* @return documents
|
|
*/
|
|
public static function getDocumentation($package_id, $release_id)
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotGetDocumentation', array('session_id' => $_SESSION['SugarDepotSessionID'], 'package_id' => $package_id, 'release_id' => $release_id));
|
|
}
|
|
|
|
public static function getTermsAndConditions()
|
|
{
|
|
self::initialize(false);
|
|
return $GLOBALS['SugarDepot']->call('depotTermsAndConditions', array());
|
|
}
|
|
|
|
/**
|
|
* Log that the user has clicked on a document
|
|
*
|
|
* @param document_id the document the user has clicked on
|
|
*/
|
|
public function downloadedDocumentation($document_id)
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
$GLOBALS['log']->debug("Logging Document: ".$document_id);
|
|
$GLOBALS['SugarDepot']->call('depotDownloadedDocumentation', array('session_id' => $_SESSION['SugarDepotSessionID'], 'document_id' => $document_id));
|
|
}
|
|
|
|
/**
|
|
* Send the list of installed objects, could be patches, or modules, .. to the depot and allow the depot to send back
|
|
* a list of corresponding updates
|
|
*
|
|
* @param objects_to_check an array of name_value_lists which contain the appropriate values
|
|
* which will allow the depot to check for updates
|
|
*
|
|
* @return array of name_value_lists of corresponding updates
|
|
*/
|
|
public static function checkForUpdates($objects_to_check)
|
|
{
|
|
self::initialize();
|
|
//check for fault
|
|
return $GLOBALS['SugarDepot']->call('depotCheckForUpdates', array('session_id' => $_SESSION['SugarDepotSessionID'], 'objects' => $objects_to_check));
|
|
}
|
|
/**
|
|
* Ping the server to determine if we have established proper communication
|
|
*
|
|
* @return true if we can communicate with the server and false otherwise
|
|
*/
|
|
public function isAlive()
|
|
{
|
|
self::initialize(false);
|
|
|
|
$status = $GLOBALS['SugarDepot']->call('sugarPing', array());
|
|
if (empty($status) || $GLOBALS['SugarDepot']->getError() || $status != ACTIVE_STATUS) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
////////// END: Base Functions for Communicating with the depot
|
|
////////////////////////////////////////////////////////
|
|
}
|