Sfoglia il codice sorgente

- Enhancement (Trac#189) first version of a (simple) End-Users portal.
- Fix for the appUserPreferences class

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@808 a333f486-631f-4898-b8df-5754b55c2be0

dflaven 14 anni fa
parent
commit
a127f4f7d5
1 ha cambiato i file con 170 aggiunte e 0 eliminazioni
  1. 170 0
      application/portalwebpage.class.inc.php

+ 170 - 0
application/portalwebpage.class.inc.php

@@ -0,0 +1,170 @@
+<?php
+// Copyright (C) 2010 Combodo SARL
+//
+//   This program is free software; you can redistribute it and/or modify
+//   it under the terms of the GNU General Public License as published by
+//   the Free Software Foundation; version 3 of the License.
+//
+//   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 General Public License for more details.
+//
+//   You should have received a copy of the GNU General Public License
+//   along with this program; if not, write to the Free Software
+//   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+/**
+ * Class PortalWebPage
+ *
+ * @author      Erwan Taloc <erwan.taloc@combodo.com>
+ * @author      Romain Quetiez <romain.quetiez@combodo.com>
+ * @author      Denis Flaven <denis.flaven@combodo.com>
+ * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
+ */
+
+require_once("../application/nicewebpage.class.inc.php");
+require_once("../application/applicationcontext.class.inc.php");
+require_once("../application/user.preferences.class.inc.php");
+/**
+ * Web page with some associated CSS and scripts (jquery) for a fancier display
+ * of the Portal web page
+ */
+class PortalWebPage extends NiceWebPage
+{
+	/**
+	 * Portal menu
+	 */
+	protected $m_aMenuButtons;
+	
+    public function __construct($sTitle)
+    {
+    	$this->m_aMenuButtons = array();
+        parent::__construct($sTitle);
+		$this->add_header("Content-type: text/html; charset=utf-8");
+		$this->add_header("Cache-control: no-cache");
+		$this->add_linked_stylesheet("../css/jquery.treeview.css");
+		$this->add_linked_stylesheet("../css/jquery.autocomplete.css");
+		$this->add_linked_stylesheet("../portal/portal.css");
+		$this->add_linked_script('../js/jquery.layout.min.js');
+		$this->add_linked_script('../js/jquery.ba-bbq.min.js');
+		$this->add_linked_script("../js/jquery.tablehover.js");
+		$this->add_linked_script("../js/jquery.treeview.js");
+		$this->add_linked_script("../js/jquery.autocomplete.js");
+		$this->add_linked_script("../js/jquery.bgiframe.js");
+		$this->add_linked_script("../js/jquery.positionBy.js");
+		$this->add_linked_script("../js/jquery.popupmenu.js");
+		$this->add_linked_script("../js/date.js");
+		$this->add_linked_script("../js/jquery.tablesorter.min.js");
+		$this->add_linked_script("../js/jquery.blockUI.js");
+		$this->add_linked_script("../js/utils.js");
+		$this->add_linked_script("../js/forms-json-utils.js");
+		$this->add_linked_script("../js/swfobject.js");
+		$this->add_ready_script(
+<<<EOF
+try
+{
+	//add new widget called TruncatedList to properly display truncated lists when they are sorted
+	$.tablesorter.addWidget({ 
+	    // give the widget a id 
+	    id: "truncatedList", 
+	    // format is called when the on init and when a sorting has finished 
+	    format: function(table)
+	    { 
+			// Check if there is a "truncated" line
+			this.truncatedList = false;  
+			if ($("tr td.truncated",table).length > 0)
+			{
+				this.truncatedList = true;
+			}
+			if (this.truncatedList)
+			{
+				$("tr td",table).removeClass('truncated');
+				$("tr:last td",table).addClass('truncated');
+			}
+	    } 
+	});
+		
+	
+	$.tablesorter.addWidget({ 
+	    // give the widget a id 
+	    id: "myZebra", 
+	    // format is called when the on init and when a sorting has finished 
+	    format: function(table)
+	    {
+	    	// Replace the 'red even' lines by 'red_even' since most browser do not support 2 classes selector in CSS, etc..
+			$("tbody tr:even",table).addClass('even');
+			$("tbody tr.red:even",table).removeClass('red').removeClass('even').addClass('red_even');
+			$("tbody tr.orange:even",table).removeClass('orange').removeClass('even').addClass('orange_even');
+			$("tbody tr.green:even",table).removeClass('green').removeClass('even').addClass('green_even');
+	    } 
+	});
+		
+	$("table.listResults").tableHover(); // hover tables
+	$(".listResults").tablesorter( { widgets: ['myZebra', 'truncatedList']} ); // sortable and zebra tables
+	$(".date-pick").datepicker({
+			showOn: 'button',
+			buttonImage: '../images/calendar.png',
+			buttonImageOnly: true,
+			dateFormat: 'yy-mm-dd',
+			constrainInput: false,
+			changeMonth: true,
+			changeYear: true
+		});
+	$('.resizable').resizable(); // Make resizable everything that claims to be resizable !
+}
+catch(err)
+{
+	// Do something with the error !
+	alert(err);
+}
+EOF
+);
+
+	$this->add_script(
+<<<EOF
+	function CheckSelection(sMessage)
+	{
+		var bResult = ($('input:checked').length > 0);
+		if (!bResult)
+		{
+			alert(sMessage);
+		}
+		return bResult;
+	}
+
+	function GoBack()
+	{
+		var form = $('#request_form');
+		var step = $('input[name=step]');
+
+		form.unbind('submit'); // De-activate validation
+		step.val(step.val() -2); // To go Back one step: next step is x, current step is x-1, previous step is x-2
+		form.submit(); // Go
+	}
+EOF
+);
+		
+	}
+	
+	/**
+	 * Add a button to the portal's main menu
+	 */
+	public function AddMenuButton($sId, $sLabel, $sHyperlink)
+	{
+		$this->m_aMenuButtons[] = array('id' => $sId, 'label' => $sLabel, 'hyperlink' => $sHyperlink);
+	}
+	
+	public function output()
+	{
+		$this->AddMenuButton('logoff', 'Portal:Disconnect', '../pages/logoff.php?portal=1'); // This menu is always present and is the last one
+		$sMenu = '	<div id="banner"><div id="portal_menu"><div id="logo"></div>';
+		foreach($this->m_aMenuButtons as $aMenuItem)
+		{
+			$sMenu .= "<a class=\"button\" id=\"{$aMenuItem['id']}\" href=\"{$aMenuItem['hyperlink']}\"><span>".Dict::S($aMenuItem['label'])."</span></a>";
+		}
+		$this->s_content = '<div id="portal">'.$sMenu.'<div id="content">'.$this->s_content.'</div></div>';
+		parent::output();
+	}
+}
+?>