/**
  * Obtain a list of releases from the server.  This function is currently used for generating the patches/langpacks for upgrade wizard
  * as well as during installation
  */
 function getReleases()
 {
     $json = getJSONobj();
     $category_id = '';
     $package_id = '';
     $types = '';
     if (isset($_REQUEST['category_id'])) {
         $category_id = nl2br($_REQUEST['category_id']);
     }
     if (isset($_REQUEST['package_id'])) {
         $package_id = nl2br($_REQUEST['package_id']);
     }
     if (isset($_REQUEST['types'])) {
         $types = nl2br($_REQUEST['types']);
     }
     $types = explode(',', $types);
     $filter = array();
     $count = count($types);
     $index = 1;
     $type_str = '';
     foreach ($types as $type) {
         $type_str .= "'" . $type . "'";
         if ($index < $count) {
             $type_str .= ",";
         }
         $index++;
     }
     $filter = array('type' => $type_str);
     $filter = PackageManager::toNameValueList($filter);
     $releases = PackageManager::getReleases($category_id, $package_id, $filter);
     $nodes = array();
     $release_map = array();
     foreach ($releases['packages'] as $release) {
         $release = PackageManager::fromNameValueList($release);
         $nodes[] = array('description' => $release['description'], 'version' => $release['version'], 'build_number' => $release['build_number'], 'id' => $release['id']);
         $release_map[$release['id']] = array('package_id' => $release['package_id'], 'category_id' => $release['category_id']);
     }
     $_SESSION['ML_PATCHES'] = $release_map;
     echo 'result = ' . $json->encode(array('releases' => $nodes));
 }
 /**
  * A Static method to Build the display for the package manager
  *
  * @param String form1 - the form to display for manual downloading
  * @param String hidden_fields - the hidden fields related to downloading a package
  * @param String form_action - the form_action to be used when downloading from the server
  * @param String types - the types of objects we will request from the server
  * @param String active_form - the form to display first
  * @return String - a string of html which will be used to display the forms
  */
 function buildPatchDisplay($form1, $hidden_fields, $form_action, $types = array('module'), $active_form = 'form1')
 {
     global $current_language;
     $mod_strings = return_module_language($current_language, "Administration");
     $ss = new Sugar_Smarty();
     $ss->assign('FORM_1_PLACE_HOLDER', $form1);
     $ss->assign('form_action', $form_action);
     $ss->assign('hidden_fields', $hidden_fields);
     $mod_strings = return_module_language($current_language, "Administration");
     $ss->assign('MOD', $mod_strings);
     $result = PackageManagerDisplay::getHeader();
     $header_text = $result['text'];
     $isAlive = $result['isAlive'];
     $show_login = $result['show_login'];
     $display = 'none';
     //if($isAlive){
     $display = 'block';
     //}
     $form2 = "<table  class='tabForm' width='100%'  cellpadding='0' cellspacing='0' width='100%' border='0'>";
     if (!$isAlive) {
         $form2 .= "<tr><td><span id='span_display_html'>" . $header_text . "</span></td></tr>";
     }
     $form2 .= "</table>";
     $form2 .= "<table width='100%'><tr><td align='left'>";
     if ($show_login) {
         $form2 .= "<input type='button' class='button' onClick='PackageManager.showLoginDialog(true);' value='" . $mod_strings['LBL_MODIFY_CREDENTIALS'] . "'>";
     }
     $form2 .= "</td><td align='right'><div id='workingStatusDiv' style='display:none;'>" . SugarThemeRegistry::current()->getImage("sqsWait", "border='0' align='bottom'", null, null, '.gif', "Loading") . "</div></td></tr><tr><td colspan='2'>";
     $loginViewStyle = $isAlive ? 'none' : 'block';
     $selectViewStyle = $isAlive ? 'block' : 'none';
     $form2 .= "<div id='selectView' style='display:" . $selectViewStyle . "'>";
     $form2 .= "  <div id='patch_downloads' class='ygrid-mso' style='height:205px; display: " . $display . ";'></div>";
     $form2 .= "</div>";
     if (!$show_login) {
         $loginViewStyle = 'none';
     }
     //$form2 .= "<div id='loginView' style='display:".$loginViewStyle."'>";
     //$form2 .= PackageManagerDisplay::buildLoginPanel($mod_strings, $isAlive);
     //$form2 .= "</div>";
     $form2 .= "</td></tr></table>";
     $form2 = '';
     $packages = array();
     $releases = array();
     if ($isAlive) {
         $filter = array();
         $count = count($types);
         $index = 1;
         $type_str = '"';
         foreach ($types as $type) {
             $type_str .= "'" . $type . "'";
             if ($index < $count) {
                 $type_str .= ",";
             }
             $index++;
         }
         $type_str .= '"';
         $filter = array('type' => $type_str);
         $filter = PackageManager::toNameValueList($filter);
         $pm = new PackageManager();
         /*if(in_array('patch', $types)){
           	$releases = $pm->getReleases('3', '3', $filter);
           }else{
           	$releases = $pm->getReleases('', '', $filter);
           }*/
     }
     if ($form_action == 'install.php' && (empty($releases) || count($releases['packages']) == 0)) {
         //return false;
     }
     $tree = PackageManagerDisplay::buildTreeView('treeview', $isAlive);
     $tree->tree_style = 'include/ytree/TreeView/css/check/tree.css';
     $ss->assign('TREEHEADER', $tree->generate_header());
     $ss->assign('module_load', 'false');
     $ss->assign('MODULE_SELECTOR', PackageManagerDisplay::buildGridOutput($tree, $mod_strings, $isAlive, $show_login));
     $ss->assign('FORM_2_PLACE_HOLDER', $form2);
     $ss->assign('scripts', PackageManagerDisplay::getDisplayScript(false, 'patch', $releases, $types, $isAlive));
     $str = $ss->fetch('ModuleInstall/PackageManager/tpls/PackageForm.tpl');
     return $str;
 }
 function toNameValueLists($arrays)
 {
     $lists = array();
     foreach ($arrays as $array) {
         $lists[] = PackageManager::toNameValueList($array);
     }
     return $lists;
 }