Index: trunk/kernel/action.php
===================================================================
--- trunk/kernel/action.php	(revision 268)
+++ trunk/kernel/action.php	(revision 269)
@@ -1,2219 +1,2222 @@
 <?php
 
 $ro_perm = $objSession->HasSystemPermission("SYSTEM_ACCESS.READONLY");
 
 if( defined('DEBUG_ACTIONS') && (DEBUG_ACTIONS & KERNEL_ACTIONS) == KERNEL_ACTIONS )
 {
 	if($Action) echo "Kernel Action [<b>$Action</b>]<br>\n";
 }
 
 if( defined('DEBUG_ACTIONS') && (DEBUG_ACTIONS & SHOW_REQUEST) == SHOW_REQUEST )
 {
 	// don't show debug output in tree & header of admin & while logging in
 	$script = basename($_SERVER['PHP_SELF']);
 	$skip_debug = Array('index.php','tree.php','head.php','credits.php');
 	if( !in_array($script, $skip_debug) )
 	{
 		echo "ScriptName: <b>$script</b> (<b>".dirname($_SERVER['PHP_SELF'])."</b>)<br><br>";
+		$div_height = (count($_REQUEST)+1)*26;
+		if($div_height > 300) $div_height = 300;
+		echo '<div class="debug_layer" style="height: '.$div_height.'px;">';
 		echo '<table border="0" cellspacing="0" cellpadding="4" class="debug_table">';
 		echo '<thead style="font-weight: bold;"><td>Src</td><td>Name</td><td>Value</td></thead>';
 		
 		foreach($_REQUEST as $key => $value)
 		{
 			if( !is_array($value) && trim($value) == '' ) $value = '&nbsp;';
 			$src = isset($_GET[$key]) ? 'GE' : (isset($_POST[$key]) ? 'PO' : (isset($_COOKIE[$key]) ? 'CO' : '?') );	
 			echo '<tr><td>'.$src.'</td><td>'.$key.'</td><td>'.print_r($value, true).'</td></tr>';
 		}
-		echo '</table>';
+		echo '</table></div>';
 	}
 	unset($script, $skip_debug);
 }
 
 	switch($Action)
 	{
 		case "m_add_user":		  
 	  	  	$dupe_user = '';
 			$user_pending = (int)$_POST["user_pending"];
 			$user_enabled = (int)$_POST["user_enabled"];
 			$CreatedOn = DateTimestamp($_POST["user_date"],GetDateFormat()); 
 			$dob = DateTimestamp($_POST["user_dob"],GetDateFormat());
 			
 		  	$objEditItems = new clsUserManager();
 		  	$objEditItems->SourceTable = $objSession->GetEditTable("PortalUser");
 
 		  	if(strlen($_POST["user_login"]))
           		$id = $objUsers->GetUserId($_POST["user_login"]);
 		  	else
 		    	$dob = 0;
 		    
           	if($id)
           	{
               	$lvErrorString = language('la_error_duplicate_username');
               	$dupe_user = $_POST["user_login"];
               	$_POST["user_login"] = '';
             }
           	         
           		$password = md5($_POST["password"]);
 		    	$u = $objEditItems->Add_User($_POST["user_login"], $password,
                 	                    $_POST["user_email"], $CreatedOn, $_POST["user_firstname"], 
                     	                $_POST["user_lastname"], $_POST["status"], 
                         	            $_POST["user_phone"], 
                             	        $_POST["user_street"], $_POST["user_city"], 
                                 	    $_POST["user_state"], $_POST["user_zip"], $_POST["user_country"], $dob);
      
             	$objCustomEdit = new clsCustomDataList(); //$objSession->GetEditTable("CustomMetaData"));
             	$objCustomEdit->SetTable('edit');
             	$objCustomEdit->LoadResource($u->Get("ResourceId"));
             	$CustomFields = new clsCustomFieldList(6);
             	$DataChanged = FALSE;
             	foreach($_POST as $key=>$value)
             	{
             		if(substr($key,0,1)=="_")
             		{
             			$field = substr($key,1);
             			$cvalue = $CustomFields->GetItemByField("FieldName",$field,FALSE);
             		
             			if(is_object($cvalue))
             			{
             				$objCustomEdit->SetFieldValue($cvalue->Get("CustomFieldId"),$u->Get("ResourceId"),$value);
             				$DataChanged = TRUE;
             			}
             		}
             	}          	
             	if($DataChanged) $objCustomEdit->SaveData();
             	$objCustomEdit->SetTable('live');
           	
           	
 			break;    
 		case "m_edit_user":
 		    $CreatedOn = DateTimestamp($_POST["user_date"],GetDateFormat()); 
             $dob = DateTimestamp($_POST["user_dob"],GetDateFormat());
 			$objEditItems = new clsUserManager();
 			$objEditItems->SourceTable = $objSession->GetEditTable("PortalUser");
 			$user_pending = (int)$_POST["user_pending"];
             $user_enabled = (int)$_POST["user_enabled"];
             $UserId=(int)$_POST["user_id"];
             //echo $UserId."<br>\n";
             if(!strlen($_POST["user_login"]))
               $dob = 0;
             if(strlen($_POST["password"]))
             {
               $password = md5($_POST["password"]);	
             }  
             else
               $password = "";
 			$u = $objEditItems->Edit_User($UserId, $_POST["user_login"], $password,
                                      $_POST["user_email"], $CreatedOn, $_POST["user_firstname"], 
                                      $_POST["user_lastname"], $_POST["status"], 
                                      $_POST["user_phone"], 
                                      $_POST["user_street"], $_POST["user_city"], 
                                      $_POST["user_state"], $_POST["user_zip"], $_POST["user_country"],
                                      $dob);
            
             $objCustomEdit = new clsCustomDataList(); //$objSession->GetEditTable("CustomMetaData"));
             $objCustomEdit->SetTable('edit');
            	$DataChanged = false;
            	
             $objCustomEdit->LoadResource($u->Get("ResourceId"));
             $CustomFields = new clsCustomFieldList(6);
             
             foreach($_POST as $key=>$value)
             {
             	if(substr($key,0,1)=="_")
             	{
             		$field = substr($key,1);
             		$cvalue = $CustomFields->GetItemByField("FieldName",$field,FALSE);
             		
             		if(is_object($cvalue))
             		{
             			//echo "Saving CF: (".$cvalue->Get("CustomFieldId")." ; ".$u->Get("ResourceId")." ; $value)<br>";
             			$objCustomEdit->SetFieldValue($cvalue->Get("CustomFieldId"),$u->Get("ResourceId"),$value);
             			$DataChanged = TRUE;
             		}
             	}
             }
         	
             if($DataChanged)
             	$objCustomEdit->SaveData();
             $objCustomEdit->SetTable('live');
 		break;
 		case "m_user_primarygroup":		 
 		  	//print_pre($_REQUEST);
 		  	if($ro_perm) break;
 		  	$users = explode(',', $_POST["userlist"]);
 		  	$GroupResourceId = $_POST['grouplist'];
 		  	$g = $objGroups->GetItemByField("ResourceId", $GroupResourceId);
 		  	$GroupId = $g->UniqueId();
 		  	
 		  	if( is_array($users) )
 		  		foreach($users as $user_id)
 		  		{
 		  			$u = $objUsers->GetItemByField("ResourceId", $user_id);
 		  			$g->AddUser($u->Get("PortalUserId"), 1);
 		  		}
      		break;
      		
 		case "m_edit_group":		   
 			$objEditItems = new clsGroupList();
 			$objEditItems->SourceTable = $objSession->GetEditTable("PortalGroup");
 			$objEditItems->Edit_Group($_POST["group_id"], $_POST["group_name"],$_POST["group_comments"]);
 		break;
         case "m_add_group":
 			$objEditItems = new clsGroupList();
 			$objEditItems->SourceTable = $objSession->GetEditTable("PortalGroup");
 			$objEditItems->Add_Group($_POST["group_name"], $_POST["group_comments"],0);
 		break;
      case "m_group_sysperm":
 		  if($_POST["GroupEditStatus"]==0)
           {          
             $objSession->ResetSysPermCache();
             $GroupId = $_POST["GroupId"];
 			if($GroupId)
 			{
 			  $objEditItems = new clsGroupList();
 			  $objEditItems->SourceTable = $objSession->GetEditTable("PortalGroup");
 			  $g = $objEditItems->GetItemByField("ResourceId",$GroupId);              
               if(is_object($g))
 			  {
                 
 			    $PermList = explode(",",$_POST["PermList"]);                
 				for($i=0;$i<count($PermList);$i++)
 				{
 				  if(@in_array($PermList[$i],$_POST["inherit"]))
 				  {
 				    $value = -1;
 				  }
 				  else
                   {
 				    $value = 0;
                     if(@in_array($PermList[$i],$_POST["permvalue"]))
 				      $value = 1;
 				  }                  
 				  $g->SetSystemPermission($PermList[$i],$value);
 				}
 			  }
 			}
           }
 		break;
         case "m_user_sysperm":
           if($ro_perm) break;
           if($_POST["UserEditStatus"]==0)
           {
 		    $UserId = $_POST["ItemId"];
 			if($UserId)
 			{
 			  $objEditItems = new clsUserManager();
 			  $objEditItems->SourceTable = $objSession->GetEditTable("PortalUser");
 			  $u = $objEditItems->GetItemByField("ResourceId",$UserId);
 			  unset($g);
               if(is_object($u))
 			  {
                 $objSession->ResetSysPermCache();
 			    $g = $u->GetPersonalGroup(FALSE);
 			    $PermList = explode(",",$_POST["PermList"]);
 				for($i=0;$i<count($PermList);$i++)
 				{
 				  if(!@in_array($PermList[$i],$_POST["inherit"]))
 				  {
                     if(!is_object($g))
 					  $g = $u->GetPersonalGroup(TRUE);
 
 					$value = 0;
 					if(is_array($_POST["permvalue"]))
 					{
 				      if(in_array($PermList[$i],$_POST["permvalue"]))
 				        $value =1;
 					  $g->SetSystemPermission($PermList[$i],$value);
 					}
 					else
 					  $g->SetSystemPermission($PermList[$i],-1);
 				  }
 				  else
                   {
 				    if(is_object($g))
 					  $g->SetSystemPermission($PermList[$i],-1);
 				  }
 				}
 			  }
 			}
           }
 	    break;
 		case "m_approve_user":
 			if($ro_perm) break;
 			foreach($_POST["itemlist"] as $userid)
 			{
 				$user = $objUsers->GetItemByField("ResourceId",$userid);
 				$user->Approve();
 			}
             $objUsers->Clear();
 		break;
 
         case "m_deny_user":
             if($ro_perm) break;
             foreach($_POST["itemlist"] as $userid)
             {
                 $user = $objUsers->GetItemByField("ResourceId",$userid);
                 $user->Deny();
             }
             $objUsers->Clear();
         break;
 		case "m_delete_user":
 				if($ro_perm) break;
 				foreach($_POST["itemlist"] as $userid)
 					$objUsers->Delete_User($userid);
 		break;
 		case "m_delete_group":
             if($ro_perm) break;
             foreach($_POST["itemlist"] as $groupid)
             {            
 			  	$objGroups->Delete_Group($groupid);
 			}
 		break;
 		case "m_user_assign":
 			$useridlist = implode("-", $userlist);
 			$objSession->SetUserStatus($useridlist, "g_usergroup_status");
 			$g_usergroup_status = $useridlist;
 		break;
 		case "m_group_assign":
 			foreach($grouplist as $group)
 				$objGroups->Add_Users_To_Group($group);
 		break;
 		case "m_remove_group":
 			$adodbConnection = GetAdodbConnection();
 			$adodbConnection->Execute("DELETE FROM UserGroup where UserId='$UserId' AND GroupId='$GroupId'");
 		break;
 
         case "m_SetVariable":  
             $objSession->SetPersistantVariable($_POST["fieldname"], $_POST["varvalue"]);
         break;
         case "m_SetSessionVariable":
             $objSession->SetVariable($_POST["fieldname"], $_POST["varvalue"]);
             //echo "Setting $fieldname to $varvalue<br>\n";
             if($_POST["fieldname"]=="SearchType")
                 $objSession->SetVariable("SearchWord","");
         break;
  
        case "m_edit_permissions":           
           if($ro_perm) break;
           
           if($_POST["CatEditStatus"] != -1)
           {
           	$objSession->SetVariable('PermCache_UpdateRequired', 1);
             $GroupId = $_POST["GroupId"];
             $CatId = $_POST["CategoryId"];
             $Module = $_POST["Module"];
             $ado = GetADODBConnection();
             $sql = "SELECT * FROM ".GetTablePrefix()."PermissionConfig WHERE ModuleId='$Module'";
             $rs = $ado->Execute($sql);
             $PermNames = array();
             while($rs && !$rs->EOF)
             {
                 $data = $rs->fields;
                 $PermNames[] = $data["PermissionName"];
                 $rs->MoveNext();
             }
             
             $inherit = array();
             if(is_array($_POST["inherit"]))
             {            
               foreach($_POST["inherit"] as $perm)
               {
                 $inherit[$perm] = 1;
               }
             }
             $access = array();
             if(is_array($_POST["permvalue"]))
             {            
               foreach($_POST["permvalue"] as $perm)
               {
                 $access[$perm] = 1;
               }
             }
             $objPermList = new clsPermList($CatId,$GroupId);
             $objPermList->LoadCategory($CatId);
 
             for($i=0;$i<count($PermNames);$i++)
             {                 
                if(!array_key_exists($PermNames[$i],$inherit))
                {
                    $PermValue = (int)$access[$PermNames[$i]];
                    
                    $Perm = $objPermList->GetPermByName($PermNames[$i]);                   
                    if($Perm)
                    {
                        $Id = $Perm->Get("PermissionId");
                        //echo "Editing $Id<br>\n";
                        $objPermList->Edit_Permission($Id,$CatId,$GroupId,$PermNames[$i],$PermValue,0);
                    }
                    else
                    {
                        //echo "Adding ".$PermNames[$i];
                        $objPermList->Add_Permission($CatId,$GroupId,$PermNames[$i],$PermValue,0);
                    }
                }
                else
                {        
                   $Perm = $objPermList->GetPermByName($PermNames[$i]);
                   if($Perm)
                   {
                       $Id = $Perm->Get("PermissionId");
                       $objPermList->Delete_Permission($Id);
                   }
                }
             }
             //$c = $objCatList->GetItem($CatId);
             //$glist = $objGroups->GetAllGroupList();
             //$ViewList = $objPermList->GetGroupPermList($c,"CATEGORY.VIEW",$glist );
             //$c->SetViewPerms("CATEGORY.VIEW",$ViewList,$glist);
             //$c->Update();
           }
         break; 
      case "m_perm_delete_group":
               
               $ado = GetADODBConnection();
               $CatId = $_POST["CategoryId"];
               foreach($_POST["itemlist"] as $groupid)
               {
                 $g = $objGroups->GetItemByField("ResourceId",$groupid);
                 if(is_object($g))
                 {                
                     $sql = "DELETE FROM ".GetTablePrefix()."Permissions WHERE CatId=$CatId AND GroupId=".$g->Get("GroupId");
                     if($objSession->HasSystemPermission("DEBUG.LIST"))
                         echo $sql."<br>\n";
                     $ado->Execute($sql);                  
                 }
               }
         break;
 
       case "m_user_addto_group":      	
             if($ro_perm) break;
             $user = $_POST["UserId"];
             if(is_numeric($user))
             {            
               if(strlen($_POST["grouplist"]))
               {              
                 $groups = explode(",",$_POST["grouplist"]);
                 if(is_array($groups))
                 {                
                   for($i=0; $i<count($groups);$i++)
                   {                 
                     $g = $objGroups->GetItemByField("ResourceId",$groups[$i]);
                     $g->AddUser($user);                 
                   }
                 }
                 else
                 {
                     $g = $objGroups->GetItem($groups);
                     $g->AddUser($user);
                 }
               }
             }
       break;
      case "m_group_add_user":       
          if($ro_perm) break;
          $group = $_POST["GroupId"];
          $EditGroups = new clsGroupList();
          $EditGroups->SourceTable = $objSession->GetEditTable($objGroups->SourceTable);
          $g = $EditGroups->GetItem($group);
 //         echo "Group: $group <br>\n";
          if(is_numeric($group))
          {
              $users = explode(",",$_POST["userlist"]);
              foreach($users as $userid)
              {
                 $u = $objUsers->GetItemByField("ResourceId",$userid);
                 $g->AddUser($u->Get("PortalUserId"));
              }
          }
 
       break;
       case "m_group_removeuser":
           if($ro_perm) break;
           $group = $_POST["GroupId"];
           $g =  $objGroups->GetItem($group);
           if($group>0)
           {
               foreach($_POST["itemlist"] as $user_id)
               {
                   $u = $objUsers->GetItemByField("ResourceId",$user_id);
                   $g->DeleteUser($u->Get("PortalUserId"));
               }
           }
       break;    
       case "m_user_removegroup":
            if($ro_perm) break;
            $user = $_POST["UserId"];
            if($user>0)
            {  
              foreach($_POST["itemlist"] as $groupid)
              {
                 $g = $objGroups->GetItem($groupid);
                 $g->DeleteUser($user);
              }
            }
       break;
       case "m_sendmail":
           $idlist = explode(",",$_POST["idlist"]);
           $html = (int)$_POST["html_enable"];
           $body = inp_escape($_POST["email_body"],$html);
           $subject = inp_escape($_POST["email_body"],$html);
           $Email = new clsEmailMessage();
      	  $Email->Set("Subject",$subject);
      	  $Email->Set("Template",$body);
      	  if($html)
      	    $Email->Set("MessageType","HTML");
      	  if(count($idlist)>0)
      	  {
      	    switch($_POST["IdType"])
              {        
      	      case "group":
      	      	foreach($idlist as $id)
      	        	$Email->SendToGroup($id);
      	      break;
                case "user":
      	        foreach($idlist as $id)
      	          	$Email->SendToUser($id);
                break;
      	    }/*switch*/
      	  }
      break;
      case "m_item_recount":
       RunDown($m_var_list["cat"],"UpdateCacheCounts");
      break;
      case "m_cat_delete":         
          if($objSession->HasCatPermission("CATEGORY.DELETE",$objCatList->CurrentCategoryID()))
          {         
            if(isset($_POST["catlist"]))
            {
              if(is_array($_POST["catlist"]))
                foreach($_POST["catlist"]  as $catid)
                {
                   $objCatList->Delete_Category($catid);
 
                }
            }
          }
      break;
      case "m_cat_cut":
          if(isset($_POST["catlist"]))
          { 
              if($objSession->HasCatPermission("CATEGORY.DELETE",$catid))
              {             
                $objCatList->CopyToClipboard("CUT","CategoryId",$_POST["catlist"]);
              }
              else
                $objCatList->CopyToClipboard("COPY","CategoryId",$_POST["catlist"]);
          }
      break;
      case "m_cat_copy":
          if(isset($_POST["catlist"]))
          {
              $objCatList->CopyToClipboard("COPY","CategoryId",$_POST["catlist"]);
          }
      break;
 
      case "m_paste":
 	     if($objCatList->ItemsOnClipboard()>0)
          { 
            /* category's paste function populates a sparse array where array[old_id]=new_id */
            $PastedCatIds = array();
  	       $objCatList->PasteFromClipboard($objCatList->CurrentCategoryID(),"Name");   
          }
          else
          {
            $clip = $objSession->GetVariable("ClipBoard");
            if(strlen($clip))
            {
                $ClipBoard = ParseClipboard($clip);               
                $Action= strtolower($ClipBoard["table"])."_paste";
            }
          }
        break;
      case "m_cat_move_up":
          if (isset($_POST["catlist"]))
          {         
              foreach($_POST["catlist"] as $catid)
              {
                  $cat =& $objCatList->GetCategory($catid);
                  $cat->MoveUp();
              }
          }
      break;
      case "m_cat_move_down":
          if (isset($_POST["catlist"]))
          {
              $catlist=array_reverse($_POST["catlist"]);
              foreach($catlist as $catid)
              {
                  $cat =& $objCatList->GetCategory($catid);
                  $cat->MoveDown();
              }
          }
      break;
      case "m_cat_approve":      
          if (isset($_POST["catlist"]))
          {         
              foreach($_POST["catlist"] as $catid)
              {
                  $cat =& $objCatList->GetCategory($catid);
                  $cat->Approve();                 
              }         
          }
      break;
      case "m_cat_decline":
          if (isset($_POST["catlist"]))
          {         
              foreach($_POST["catlist"] as $catid)
              {
                  $cat =& $objCatList->GetCategory($catid);
 //                 $cat->Deny();
                  RunDown($catid,"Deny");
              }         
          }
      break;     
 
      case "m_rel_delete":
          $adodbConnection= GetADODBConnection();
          $table = $objSession->GetEditTable("Relationship");
          if(isset($_POST["itemlist"]))
          {
            if(is_array($_POST["itemlist"]))
            {
              foreach($_POST["itemlist"] as $id)
              {
                $sql = "DELETE FROM ".$table." WHERE RelationshipId=".$id;
                $adodbConnection->Execute($sql);
                if($objSession->HasSystemPermission("DEBUG.LIST"))
                    echo $sql."<br>\n";
              }
            }
            else
            {
               $sql = "DELETE FROM ".$table." WHERE RelationshipId=".$_POST["itemlist"];
               $adodbConnection->Execute($sql);
               if($objSession->HasSystemPermission("DEBUG.LIST"))
                   echo $sql."<br>\n";
            }
          }
          break;
      case "m_add_relation":
        if($_POST["CatEditStatus"]==0)
        {       
          $RelList = new clsRelationshipList();
          $RelList->SourceTable = $objSession->GetEditTable("Relationship");
 
          //$r = $RelList->Add($_POST["SourceId"],$_POST["SourceType"],$_POST["TargetId"],$_POST["TargetType"],
            //               0,(int)$_POST["Enabled"],$_POST["RelType"], $Rel);
          $ado = GetADODBConnection();
          $rs = $ado->Execute("SELECT MIN(RelationshipId) as MinValue FROM ".$RelList->SourceTable);
          $NewId = $rs->fields["MinValue"]-1;
          
          $r = $RelList->Add($_POST["SourceId"],$_POST["SourceType"],$_POST["TargetId"],$_POST["TargetType"],
                           0,(int)$_POST["Enabled"],$_POST["RelType"], $NewId);         
          
          $sql = "UPDATE ".$RelList->SourceTable." SET RelationshipId=".$NewId." WHERE RelationshipId=".$r->Get("RelationshipId");         
          if($objSession->HasSystemPermission("DEBUG.LIST"))
              echo $sql."<br>\n";
          $ado->Execute($sql);
        }
      break;
      case "m_edit_relation":
        if($_POST["CatEditStatus"]==0)
        {
          $RelList = new clsRelationshipList();
          $RelList->SourceTable = $objSession->GetEditTable("Relationship");
 
          $r = $RelList->GetItem($_POST["RelationshipId"]);
          if(is_object($r))
          {
            $r->Set("Enabled",(int)$_POST["Enabled"]);
            $r->Set("Type",(int)$_POST["RelType"]);
            $r->Set("Priority",(int)$_POST["priority"]);
            $r->Update();
          }
        }
      break;
      case "m_rel_move_up":
          $objRelList = new clsRelationshipList();
          $objRelList->SourceTable = $objSession->GetEditTable("Relationship");
          if (isset($_POST["itemlist"]))
          {         
              foreach($_POST["itemlist"] as $id)
              {
                  $r = $objRelList->GetItem($id);
                  $r->MoveUp($_POST["SourceId"]);
              }
          }
      break;
      case "m_rel_move_down":
          $objRelList = new clsRelationshipList();
          $objRelList->SourceTable = $objSession->GetEditTable("Relationship");
          if (isset($_POST["itemlist"]))
          {
              $itemlist=array_reverse($_POST["itemlist"]);
              foreach($itemlist as $id)
              {
                  $r = $objRelList->GetItem($id);
                  $r->MoveDown($_POST["SourceId"]);
              }
          }
      break;
 
 
      case "m_add_category":
          if(ValidDate($_POST["cat_date"],GetDateFormat()))
          {         
            $CreatedOn = DateTimestamp($_POST["cat_date"],GetDateFormat());
          }
          else
            $CreatedOn = time();
          $html = (int)$_POST["html_enable"];
 
          $cat_pick = $_POST["cat_pick"];
          $Status = (int)$_POST["status"];
          $Hot=(int)$_POST["itemhot"];
          $Pop = (int)$_POST["itempop"];      
          $New = (int)$_POST["itemnew"];
 
          $objEditItems = new clsCatList();
          $objEditItems->SourceTable = $objSession->GetEditTable("Category");
          $cat = $objEditItems->Add($_POST["ParentId"], $_POST["cat_name"], inp_escape($_POST["cat_desc"],$html), $CreatedOn, 
                             $cat_pick, $Status, $Hot, $New, $Pop, $_POST["Priority"], 
                             $_POST["meta_keywords"],$_POST["meta_desc"]);
             $objCustomEdit = new clsCustomDataList($objSession->GetEditTable("CustomMetaData"));
             $objCustomEdit->LoadResource($cat->Get("ResourceId"));
             $CustomFields = new clsCustomFieldList(1);
             $DataChanged = FALSE;
             foreach($_POST as $key=>$value)
             {
             	if(substr($key,0,1)=="_")
             	{
             		$field = substr($key,1);
             		$cvalue = $CustomFields->GetItemByField("FieldName",$field,FALSE);
             		
             		if(is_object($cvalue))
             		{
             			$objCustomEdit->SetFieldValue($cvalue->Get("CustomFieldId"),$cat->Get("ResourceId"),$value);
             			$DataChanged = TRUE;
             		}
             	}
             }          	
             if($DataChanged)
             	$objCustomEdit->SaveData();                            
                          
      break;              
 
      case "m_edit_category":                 
          $CreatedOn = DateTimestamp($_POST["cat_date"],GetDateFormat());
          $cat_pick = $_POST["cat_pick"];
          $Status = (int)$_POST["status"];
          $Hot=(int)$_POST["itemhot"];
          $Pop = (int)$_POST["itempop"];      
          $New = (int)$_POST["itemnew"];
 
          $html = (int)$_POST["html_enable"];
          $objEditItems = new clsCatList();
          $objEditItems->SourceTable = $objSession->GetEditTable("Category");
          
          // check if name of cat isn't changed: begin
          $original_cats = new clsCatList();
          $original_cat = $original_cats->GetItemByField('CategoryId', $_POST['CategoryId']);
          if( $original_cat->Get('Name') != $_POST['cat_name'] ) 
          	$objSession->SetVariable('PermCache_UpdateRequired', 1);
          unset($original_cat, $original_cats);
          // check if name of cat isn't changed: end
          
          $cat = $objEditItems->Edit_Category($_POST["CategoryId"],inp_escape($_POST["cat_name"],$html), inp_escape($_POST["cat_desc"],$html), $CreatedOn, $cat_pick, $Status, $Hot, $New, $Pop, $_POST["Priority"], $_POST["meta_keywords"], $_POST["meta_desc"]);         
                                       
          $objCustomEdit = new clsCustomDataList($objSession->GetEditTable("CustomMetaData"));
          $objCustomEdit->LoadResource($cat->Get("ResourceId"));
          $CustomFields = new clsCustomFieldList(1);
          $DataChanged = FALSE;
          foreach($_POST as $key=>$value)
          {
 	       	if(substr($key,0,1)=="_")
             	{
             		$field = substr($key,1);
             		$cvalue = $CustomFields->GetItemByField("FieldName",$field,FALSE);
             		
             		if(is_object($cvalue))
             		{
             			$objCustomEdit->SetFieldValue($cvalue->Get("CustomFieldId"),$cat->Get("ResourceId"),$value);
             			$DataChanged = TRUE;
             		}
             	}
          }          	
          if($DataChanged)
          	$objCustomEdit->SaveData();  
          	                                      
      break;
      case "m_edit_custom_data":
      	
      	$id = $_POST["ItemId"];                   
         $objEditData = new clsCustomDataList(); //$objSession->GetEditTable("CustomMetaData"));		
         $objEditData->SetTable('edit');
         $ado = GetADODBConnection();
 
         if($id && is_array($_POST["CustomData"]))
         {
             foreach($_POST["CustomData"] as $FieldId => $Value)
             {                                
                 $sql = "SELECT count(*) as reccount FROM ".$objEditData->SourceTable." WHERE CustomFieldId=$FieldId AND ResourceId=".$_POST["ItemId"];
                 $rs = $ado->Execute($sql);            
                 $intable = $rs->fields["reccount"];
                 if(!$intable)
                 {                
                     $sql = "INSERT INTO ".$objEditData->SourceTable." (ResourceId,CustomFieldId,Value) VALUES ('".$id."','$FieldId','$Value')";
                     $ado->Execute($sql);
                     //echo $sql."<br>\n";
                 }
                 else
                 {
                   $sql = "UPDATE ".$objEditData->SourceTable." SET Value='".$Value."' WHERE CustomFieldId=$FieldId AND ResourceId=".$_POST["ItemId"];
                   $ado->Execute($sql);
                   //echo $sql."<br>\n";
                 }
             }            
         }
         $objEditData->SetTable('live');
      break;
      case "m_customfield_edit":
        	if($ro_perm) break;
         $DataType = $_POST["DataType"];
         $FieldId = $_POST["CustomFieldId"];
         $FieldName = $_POST["fieldname"];
         //$FieldLabel = $_POST["fieldlabel"];
         if(strlen($FieldName))
         {        
         	$objCustomFields = new clsCustomFieldList($DataType);
         	$objCustomFields->EditField($FieldId,$DataType,$FieldName,"",(int)$_POST["generaltab"],
           							    $_POST["heading"],$_POST["fieldprompt"],$_POST["input_type"],
           							    $_POST["valuelist"]);
         }
         unset($objCustomFields);
      break;
      case "m_customfield_add":
         if($ro_perm) break;
         $DataType = $_POST["DataType"];        
         $FieldName = $_POST["fieldname"];
         //$FieldLabel = $_POST["fieldlabel"];
         if(strlen($FieldName))
         {
           $objCustomFields = new clsCustomFieldList($DataType);
           $objCustomFields->AddField($DataType,$FieldName,"",(int)$_POST["generaltab"],
           							 $_POST["heading"],$_POST["fieldprompt"],$_POST["input_type"],
           							 $_POST["valuelist"]);
           unset($objCustomFields);
         }
      break;
      case "m_customfield_delete":
      	if($ro_perm) break;
         $DataType = $_POST["DataType"];        
         $objCustomFields = new clsCustomFieldList($DataType);
 
         foreach($_POST["itemlist"] as $f)
         {
             $objCustomFields->DeleteField($f);
         	//$c = $objCustomFields->GetItem($f);
             //$c->Delete();
         }
         unset($objCustomFields);
      break;
      case "m_SearchConfig_Edit":
      	if($ro_perm) break;
         $SimpleValues = $_POST["simple"];
         $AdvValues = $_POST["advanced"];
         $module = $_POST["module"];
         $priority = $_POST["pri"];
         //phpinfo(INFO_VARIABLES);
         $objSearchConfig = new clsSearchConfigList($module);
         foreach($objSearchConfig->Items as $i)
         {
           $id = $i->Get("SearchConfigId");
           $objSearchConfig->EditFieldSettings($id,(int)$SimpleValues[$id],(int)$AdvValues[$id],$priority[$id]);       
         }
         $objSearchConfig->Clear();
         /* save relevence settings */
         $vals = $_POST["req_increase"];
         foreach($vals as $var=>$value)
         {
             $cfg = "SearchRel_Increase_".$var;
             $objConfig->Set($cfg,$value);
         }
         $vals = $_POST["rel_keyword"];
         foreach($vals as $var=>$value)
         {
             $cfg = "SearchRel_Keyword_".$var;
             $objConfig->Set($cfg,$value);
         }
         $vals = $_POST["rel_pop"];
         foreach($vals as $var=>$value)
         {
             $cfg = "SearchRel_Pop_".$var;
             $objConfig->Set($cfg,$value);
         }
         $vals = $_POST["rel_rating"];
         foreach($vals as $var=>$value)
         {
             $cfg = "SearchRel_Rating_".$var;
             $objConfig->Set($cfg,$value);
         }
      break;
      case "m_keyword_reset":
          if($ro_perm) break;
          $objSearchList = new clsSearchLogList();
          foreach($_POST["itemlist"] as $k)
          {
              $c = $objSearchList->GetItem($k);
              $c->Delete();
          }
      break;
      case "m_review_add":     
        $post_info = GetSubmitVariable($_POST, 'EditStatus');
        if($post_info['variable'] > -1)
        {
          $objReviews = new clsItemReviewList();
          $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
          $Pending = (int)$_POST["review_pending"];
          $Enabled = (int)$_POST["review_enabled"];
          $Status = (int)$_POST["status"];
          $CreatedOn = DateTimestamp($_POST["review_date"],GetDateFormat()); 
          $CreatedOn += SecondsSinceMidnight($_POST["review_time"]);
          $html = (int)$_POST["html_enable"];         
          $ReviewText = inp_escape($_POST["review_body"],1);
          
          $CreatedById = 0;
          if(strlen($_POST["createdby"])>0)
          {
          	if(strtolower($_POST["createdby"])=="root")
          	{
          	  $CreatedById = -1;
          	}
          	else 
          	{
            	  $u = $objUsers->GetItemByField("Login",$_POST["createdby"]);
            	  if(is_object($u))
            	  {
            	    $CreatedById = $u->Get("PortalUserId");
            	    if($CreatedById<1)
            	    {
            	  	  $CreatedById = $objSession->Get("PortalUserId");
            	    }
            	  }
            	  else
            	    $CreatedById = $objSession->Get("PortalUserId");
          	}
          }
          else
            $CreatedById = $objSession->Get("PortalUserId");
          
          $r = $objReviews->AddReview($CreatedOn,$ReviewText,$Status, $IPAddress, 
                                      (int)$_POST["review_priority"], $_POST["ItemId"],$_POST["ItemType"],
                                      $CreatedById,$html, $post_info['Module']);                                    
          $ado = GetADODBConnection();
          $rs = $ado->Execute("SELECT MIN(ReviewId) as MinValue FROM ".$objReviews->SourceTable);
          $NewId = $rs->fields["MinValue"]-1;
          $sql = "UPDATE ".$objReviews->SourceTable." SET ReviewId=".$NewId." WHERE ReviewId=".$r->Get("ReviewId");
          if($objSession->HasSystemPermission("DEBUG.LIST"))
              echo $sql."<br>\n";
          $ado->Execute($sql);
        }
      break;
      case "m_review_edit":     
        $post_info = GetSubmitVariable($_POST, 'EditStatus');
        if($post_info['variable'] > -1)
        {
          $objReviews = new clsItemReviewList();
          $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
          $Status = (int)$_POST["status"];
          $CreatedOn = DateTimestamp($_POST["review_date"],GetDateFormat()); 
          $CreatedOn += SecondsSinceMidnight($_POST["review_time"]);
          $html = (int)$_POST["html_enable"];
          $ReviewText = inp_escape($_POST["review_body"],1);
          $ReviewId = $_POST["ReviewId"];         
          $CreatedById = 0;
          if(strlen($_POST["createdby"])>0)
          {
          	if(strtolower($_POST["createdby"])=="root")
          	{
          	  $CreatedById = -1;
          	}
          	else 
          	{
            	  $u = $objUsers->GetItemByField("Login",$_POST["createdby"]);
            	  if(is_object($u))
            	  {
            	    $CreatedById = $u->Get("PortalUserId");
            	    if($CreatedById<1)
            	    {
            	  	  $CreatedById = $objSession->Get("PortalUserId");
            	    }
            	  }
            	  else
            	    $CreatedById = $objSession->Get("PortalUserId");
          	}
          }         
          $r = $objReviews->EditReview($ReviewId,$CreatedOn,$ReviewText,$Status, $IPAddress, 
                                       (int)$_POST["review_priority"],$_POST["ItemId"],$_POST["ItemType"],
                                       $CreatedById,$html, $post_info['Module']);  
        }
      break;
      case "m_review_delete":
          $objReviews = new clsItemReviewList();
          $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
          foreach($_POST["itemlist"] as $id)
          {
              $objReviews->DeleteReview($id);
          }         
      break;
      case "m_review_approve":
          if (isset($_POST["itemlist"]))
          {   
              $objReviews = new clsItemReviewList();
              $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
              foreach($_POST["itemlist"] as $id)
              {
                  $i = $objReviews->GetItem($id);
                  $i->Set("Status",1);
                  $i->Update();
              }
          }
      break;
      case "m_review_deny":
          if (isset($_POST["itemlist"]))
          {   
              $objReviews = new clsItemReviewList();
              $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
              foreach($_POST["itemlist"] as $id)
              {
                  $i = $objReviews->GetItem($id);
                  $i->Set("Status",0);
                  $i->Update();
              }
          }
      break;     
      case "m_review_move_up":
          if (isset($_POST["itemlist"]))
          {   
              $objReviews = new clsItemReviewList();
              $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
              foreach($_POST["itemlist"] as $id)
              {
                  $i = $objReviews->GetItem($id);
                  $i->MoveUp();
              }
          }
      break;
      case "m_review_move_down":
          if (isset($_POST["itemlist"]))
          {
              $objReviews = new clsItemReviewList();
              $objReviews->SourceTable = $objSession->GetEditTable("ItemReview");
              $itemlist=array_reverse($_POST["itemlist"]);
              foreach($itemlist as $id)
              {
                  $i = $objReviews->GetItem($id);
                  $i->MoveDown();
              }
          }
      break;
      case "m_theme_add":
          $objEditItems = new clsThemeList();
          $objEditItems->SourceTable = $objSession->GetEditTable("Theme");
          $Primary = (int)$_POST["primary"];
          if(!(int)$_POST["enabled"])
            $Primary = 0;
          $t = $objEditItems->AddTheme($_POST["name"],$_POST["description"],(int)$_POST["enabled"],
                                       (int)$_POST["CacheTimeout"],$Primary);
 
          $ado = GetADODBConnection();
          $rs = $ado->Execute("SELECT MIN(ThemeId) as MinValue FROM ".$objEditItems->SourceTable);
          $NewId = $rs->fields["MinValue"]-1;
          $sql = "UPDATE ".$objEditItems->SourceTable." SET ThemeId=".$NewId." WHERE ThemeId=".$t->Get("ThemeId");
          if($objSession->HasSystemPermission("DEBUG.LIST"))
              echo $sql."<br>\n";
          if ($Primary==1) 
          {
              $objEditItems->SetPrimaryTheme($_POST["ThemeId"]);
          }
          $ado->Execute($sql);
      break;
      case "m_theme_edit":        
          $objEditItems = new clsThemeList();
          $objEditItems->SourceTable = $objSession->GetEditTable("Theme");
          $Primary = (int)$_POST["primary"];
          if(!(int)$_POST["enabled"])
            $Primary = 0;         
            
          $objEditItems->EditTheme($_POST["ThemeId"],$_POST["name"],$_POST["description"],
                                   (int)$_POST["enabled"],$Primary,(int)$_POST["CacheTimeout"]);
          if ($Primary==1) 
          {
              $objEditItems->SetPrimaryTheme($_POST["ThemeId"]);
          }
      break;
      case "m_theme_delete":
          if (isset($_POST["itemlist"]))
          {   
              $Themes = new clsThemeList();
              foreach($_POST["itemlist"] as $id)
              {
                  $Themes->DeleteTheme($id);
              }
          }
      break;
      case "m_theme_primary":
          if( count($_POST['itemlist']) )
          {
          	$ThemeId = array_shift( $_POST['itemlist'] );
            	$t = new clsThemeList();
            	$t->SetPrimaryTheme($ThemeId);
          }
      break;
      
      case "m_template_edit":
        
        	$ThemeId = $_POST["ThemeId"];
        	$FileId = $_POST["FileId"];
        	$f = new clsThemeFile($FileId);
        
        	$f->Set("Description", $_POST["Description"] );
        	$f->Update();
        	$c = stripslashes($_POST["contents"]);
        	$f->SaveFileContents($c);
        	break;    
      case "m_template_add":
       	
       	$ThemeId = $_POST["ThemeId"];
       	if( !is_object($f) ) $f = new clsThemeFile();
        	
        	$FilePath = $_POST['name'];
       
        	if(!$FilePath)
        	{
        		$f->SetError('Template Name is required',3);
        		break;
        	}
        	else
        	{
        		if( substr($FilePath,1) != '/' ) $FilePath = '/'.$FilePath;
        		if( substr($FilePath,-3) != '.tpl' ) $FilePath .= '.tpl';
        		$FileName = basename($FilePath);
        		$FilePath = dirname($FilePath);
  			
  			// test if such file not already created
        		
        		$f->LoadFromDataBase( Array($FilePath,$FileName), Array('FilePath','FileName') );      	
        		if( !$f->Get('FileId') )
        		{
        			$f->Set( 	Array('FilePath','FileName','ThemeId', 'Description'),
        						Array($FilePath, $FileName,$_POST['ThemeId'], $_POST["Description"])
        					);
        			
        			if( $f->IsWriteablePath(true) )
        			{	
        				$f->Create();
        				$c = stripslashes($_POST["contents"]);
        				$f->SaveFileContents($c, true);
        			}
        		}
        		else
        			$f->SetError('Template with this name already exists',4);
 		}
      	break;
      case "m_template_delete":
 		$dummy = new clsThemeFile();
 		foreach($_POST["itemlist"] as $FileId)
         {            
 			$dummy->LoadFromDatabase($FileId);
 			$dummy->Delete();
 		}		
      	break;
      	
      case "m_lang_add":         
          $objEditItems = new clsLanguageList();
          $objEditItems->SourceTable = $objSession->GetEditTable("Language");
          $l = $objEditItems->AddLanguage($_POST["packname"],$_POST["localname"],
                                          (int)$_POST["enabled"],(int)$_POST["primary"],
                                          $_POST["icon"],$_POST["date_format"],$_POST["time_format"],
                                          $_POST["decimal"],$_POST["thousand"]);
 
          $ado = GetADODBConnection();
          $rs = $ado->Execute("SELECT MIN(LanguageId) as MinValue FROM ".$objEditItems->SourceTable);
          $NewId = $rs->fields["MinValue"]-1;
          $sql = "UPDATE ".$objEditItems->SourceTable." SET LanguageId=".$NewId." WHERE LanguageId=".$l->Get("LanguageId");
          if($objSession->HasSystemPermission("DEBUG.LIST"))
              echo $sql."<br>\n";
          $ado->Execute($sql);         
          if($_POST["importlabels"]==1 && $_POST["srcpack"]>0)
          {         	
             $sql = "SELECT * FROM ".GetTablePrefix()."Phrase WHERE LanguageId=".$_POST["srcpack"];
             if($objSession->HasSystemPermission("DEBUG.LIST"))
                 echo $sql."<br>\n";
 
             $rs = $ado->Execute($sql);            
             $plist = new clsPhraseList();
             $plist->SourceTable = $objSession->GetEditTable("Phrase");
             $sql = "SELECT MIN(PhraseId) as MinId FROM ".$plist->SourceTable;
             $as = $ado->Execute($sql);
             if($as && !$as->EOF)
             {
             	$MinId = (int)$as->fields["MinId"];
             }
             else
               $MinId = 0;
             $MinId--;              
             while($rs && !$rs->EOF)
             {
                 $data = $rs->fields;
                 $plist->AddPhrase($data["Phrase"],$NewId,$data["Translation"],$data["PhraseType"]);
                 $sql = "UPDATE ".$plist->SourceTable." SET PhraseId=$MinId WHERE PhraseId=0 LIMIT 1";
                 $ado->Execute($sql);
                 $MinId--;
                 $rs->MoveNext();
             }
          }
      break;
      case "m_lang_export":
      	 include_once($pathtoroot."kernel/include/xml.php");
          $Ids = $_POST["LangList"]; // language ids list to export phrases from
          
          $phrase_types = GetVar('langtypes');
          $phrase_types = ($phrase_types !== false) ? implode(',',$phrase_types) : null;
          
          $filename=$_POST["filename"];
          if(strlen($filename)>0)
          {
              $ExportFilename = $pathtoroot.$admin."/export/".$filename;                         
   	         $ExportResult = $objLanguages->ExportPhrases($ExportFilename,$Ids, $phrase_types);
          }
      break;
      case "m_lang_edit":
          $objEditItems = new clsLanguageList();
          $objEditItems->SourceTable = $objSession->GetEditTable("Language");
          $objEditItems->EditLanguage($_POST["LanguageId"],$_POST["packname"],
                                      $_POST["localname"],(int)$_POST["enabled"],
                                      (int)$_POST["primary"], $_POST["icon"],$_POST["date_format"],
                                      $_POST["time_format"], $_POST["decimal"],$_POST["thousand"]);
                                      
          if($_POST["importlabels"]==1 && $_POST["srcpack"]>0)
          {
             $ado = GetADODBConnection();
             $rs = $ado->Execute("SELECT * FROM ".GetTablePrefix()."Phrase WHERE LanguageId=".$_POST["srcpack"]);
             $plist = new clsPhraseList();
             $plist->SourceTable = $objSession->GetEditTable("Phrase");
             $sql = "SELECT MIN(PhraseId) as MinId FROM ".$plist->SourceTable;
             $as = $ado->Execute($sql);
             if($as && !$as->EOF)
             {
             	$MinId = (int)$as->fields["MinId"];
             }
             else
               $MinId = 0;
             $MinId--;  
             while($rs && !$rs->EOF)
             {
                 $data = $rs->fields;
                 $plist->AddPhrase($data["Phrase"],$_POST["LanguageId"],$data["Translation"],$data["PhraseType"]);
                 $sql = "UPDATE ".$plist->SourceTable." SET PhraseId=$MinId WHERE PhraseId=0 LIMIT 1";
                 $ado->Execute($sql);
                 $MinId--;
                 $rs->MoveNext();
             }
             unset($plist);
          }
 
      break;
      case "m_lang_delete":
      	if($ro_perm) break;
          if (isset($_POST["itemlist"]))
          {   
             $Phrases = new clsPhraseList();
             foreach($_POST["itemlist"] as $id)
             {
                 $objLanguages->DeleteLanguage($id);
                 $Phrases->DeleteLanguage($id);
             }    
             unset($Phrases);
          }
      break;
      case "m_lang_select":
          $LangId = (int)$_POST["langselect"];         
          if($LangId)
          {           	
            if($objSession->Get("PortalUserId")>0)
            {
              	//echo "$LangId";
            		$objSession->SetPersistantVariable("Language",$LangId);              
            }
            $objSession->Set("Language",$LangId); 
            $objSession->Update();
            $m_var_list_update["lang"] = $LangId;
            $m_var_list["lang"] = $LangId;
          }
      break;     
      case "m_phrase_edit":     
          $objPhraseList = new clsPhraseList();
          if((int)$_POST["direct"] != 1)                 	
          	$objPhraseList->SourceTable = $objSession->GetEditTable("Phrase");
          $Phrases = $_POST["name"];
          foreach($Phrases as $PhraseId =>$name)
          {
            if($PhraseId>0)
            {         
            		$objPhraseList->EditPhrase($PhraseId,$_POST["name"][$PhraseId],$_POST["LanguageId"],$_POST["translation"][$PhraseId],$_POST["phrasetype"][$PhraseId]);
            }
          }
          
          if(strlen($_POST["name"][0]) && strlen($_POST["translation"][0]) && $_POST['Action1'] == "new")
          {
            		$r = $objPhraseList->AddPhrase($_POST["name"][0],$_POST["LanguageId"],$_POST["translation"][0],$_POST["phrasetype"][0]);           
            		if ($r != "Error") {
 	           		$ado = GetADODBConnection();
 	           		$rs = $ado->Execute("SELECT MIN(PhraseId) as MinValue FROM ".$objPhraseList->SourceTable);
 	           		$NewId = $rs->fields["MinValue"]-1;
 	           		$sql = "UPDATE ".$objPhraseList->SourceTable." SET PhraseId=".$NewId." WHERE PhraseId=$PhraseId";
 	           		if($objSession->HasSystemPermission("DEBUG.LIST"))
 	               		echo $sql."<br>\n";
 	           		$ado->Execute($sql);    
            		}
            		else {
            			$add_error = "Language tag with the same name already exists!";
            		}
          }
          else if ($_POST['Action1'] == "new") {
          	$add_error = "Fields name and translation are required!";
          }
          unset($objPhraseList);
      break;
      case "m_config_missing_phrase":
         //phpinfo(INFO_VARIABLES);
         $LangId = $_POST["LangId"];
         $ThemeId = $_POST["ThemeId"];
         if(is_array($_POST["Phrase"]))
         {
             $objPhraseList = new clsPhraseList();
             $objPhraseList->SourceTable = $objSession->GetSessionKey()."_".$ThemeId."_labels";
 
             foreach($_POST["Phrase"] as $p => $value)
             {
                 if(strlen($value))
                 {           
                   $obj = $objPhraseList->GetItemByField("Phrase",$p,TRUE);
                   if(is_object($obj))
                   {                  
                       if($obj->Get("Phrase")==$p)
                       {
                           $obj->Set("Translation",$value);
                           $obj->Update();
                       }
                       else
                           $objPhraseList->AddPhrase($p,$LangId,$value,1);
                   }
                   else
                     $objPhraseList->AddPhrase($p,$LangId,$value,1);
                 }
             }
         }
      break;
      case "m_phrase_delete":
         $objPhraseList = new clsPhraseList();
         $objPhraseList->SourceTable = $objSession->GetEditTable("Phrase");
         if (isset($_POST["itemlist"]))
         {   
            foreach($_POST["itemlist"] as $id)
            {
              $objPhraseList->DeletePhrase($id);
            }
         }
         unset($objPhraseList);
      break;
      case "m_emailevent_disable":
         if($ro_perm) break;
         $objEvents = new clsEventList();
         if (isset($_POST["itemlist"]))
          {   
             foreach($_POST["itemlist"] as $id)
             {
               $m =& $objEvents->GetItem($id);
               $m->Set("Enabled",0);
               $m->Update();
             }
          }
          unset($objEvents);
      break;
      case "m_emailevent_enable":
          if($ro_perm) break;
          $objEvents = new clsEventList();
          if (isset($_POST["itemlist"]))
          {   
             foreach($_POST["itemlist"] as $id)
             {
               $m =& $objEvents->GetItem($id);
               $m->Set("Enabled",1);
               $m->Update();
             }
          }
          unset($objEvents);
      break;
      case "m_emailevent_frontonly":
         if($ro_perm) break;
         $objEvents = new clsEventList();
         if (isset($_POST["itemlist"]))
          {   
             foreach($_POST["itemlist"] as $id)
             {
               $m =& $objEvents->GetItem($id);
               $m->Set("Enabled",2);
               $m->Update();
             }
          }
          unset($objEvents);
      break;     
      case "m_dlid":
          echo $Action.":".$DownloadId;
          die();
      break;
      case "m_emailevent_user":
          if($ro_perm) break;
          $objEvents = new clsEventList();
          //phpinfo(INFO_VARIABLES);
          //$objEvents->SourceTable = $objSession->GetEditTable("Events");
          $ids = $_POST["EventId"];
 		 $ids = str_replace("[","",$ids);
 		 $ids = str_replace("]","",$ids);
 		 $ids = str_replace("\"","",$ids);
 		 $ids = str_replace("\\","",$ids);
 		 
          
          $idlist = explode(",",$ids);
          foreach($idlist as $EventId)
          {
          	$id = (int)stripslashes($EventId);
              $e =& $objEvents->GetItem((int)$EventId);
              $e->Set("FromUserId", $_POST["FromUserId"]);
              $e->Update();
          }
          $objEvents->Clear();
          unset($objEvents);
      break;
      case "m_emailevent_edit":         
          $Template = $_POST["headers"];
          if(strlen($Template))
          {
          	$Template .= "\n";
          }
 		 $Template = str_replace("\n\n","",$Template);                     
          $Template .= "Subject: ".$_POST["subject"]."\n\n";
          $Template .= $_POST["messageBody"];
          $objMessages = new clsEmailMessageList();
          $objMessages->SourceTable = $objSession->GetEditTable("EmailMessage");
          $m =& $objMessages->GetItem($_POST["MessageId"]);
          if(is_object($m))
          {
              if($_POST["sendhtml"]==1)
              {             
                $m->Set("MessageType","html");
              }
              else
                $m->Set("MessageType","text");
 
              $m->Set("Template",$Template);
              $m->Update();
          }
      break;
      case "m_config_edit":
      	 //phpinfo(INFO_VARIABLES);
          if($ro_perm) break;
          $objAdmin = new clsConfigAdmin();
          $objAdmin->module = $_POST["module"];
          $objAdmin->section = $_POST["section"];
          if($objAdmin->section=="in-portal:configure_users")
          {
          	if(strlen($_POST["RootPass"]) && strlen($_POST["RootPassVerify"]))
          	{
          	  if($_POST["RootPass"]==$_POST["RootPassVerify"])
          	  {
          	  	$_POST["RootPass"] = md5($_POST["RootPass"]);
          	  }	
          	}
          	else
          	{
          	  $_POST["RootPass"] = $objConfig->Get("RootPass");
          	  $_POST["RootPassVerify"] = $objConfig->Get("RootPassVerify");         	  
          	}
          }
          $objAdmin->LoadItems(FALSE);
          $objAdmin->SaveItems($_POST);
      break;
 
      case "m_mod_enable":
         if($ro_perm) break;
          if (isset($_POST["itemlist"]))
          {   
              foreach($_POST["itemlist"] as $id)
              {
                  $m =& $objModules->GetItemByField("Name",$id);
                  if(is_object($m))
                  {
                    $m->Set("Loaded",1);
                    $m->Update();                 
                  }                
              }
              $_GET["Refresh"] = 1;
          }
      break;
      case "m_mod_disable":
      	if($ro_perm) break;
          if (isset($_POST["itemlist"]))
          {   
              foreach($_POST["itemlist"] as $id)
              {
              	if($id != "In-Portal")
              	{
                    $m =& $objModules->GetItemByField("Name",$id);
                    if(is_object($m))
                    {
                      $m->Set("Loaded",0);
                      $m->Update();                 
                    }
              	}
              }
              $_GET["Refresh"] = 1;
          }
      break;
 
      case "m_img_add":
        $objImageList = new clsImageList();
 	   $objImageList->SourceTable = $objSession->GetEditTable("Images");
        $LocalImage=0;
        $LocalThumb=0;
        $DestDir = "kernel/images/";
        
        $UserThumbSource = (int)$_POST["imgLocalThumb"];
 	   $LocalThumb = $UserThumbSource;
        
 	   $thumb_url = !$LocalThumb? $_POST["imgThumbUrl"] : "";
               
        if($_POST["imgSameImages"])
        {
            	$LocalImage = $LocalThumb;
            	$full_url = $thumb_url;
        }
        else
        {
        		$LocalImage = (int)$_POST["imgLocalFull"];
          	$file = $_FILES["imgFullFile"];
          	$full_url = $LocalImage? "" : $_POST["imgFullUrl"];
        }
 
        if((!strlen($thumb_url) && !$LocalThumb) || (!strlen($full_url) && !$LocalImage))
        {
          break;
        }
        
        $ado = GetADODBConnection();
        $sql = "SELECT MIN(ImageId) as MinValue FROM ".$objImageList->SourceTable;
        $rs = $ado->Execute($sql);
        $NewId = ($rs->fields["MinValue"]<0)? $rs->fields["MinValue"]-1 : -1;
        
        $img = $objImageList->Add($_POST["imgName"], $_POST["imgAlt"], $_POST["ResourceId"], $LocalImage, $LocalThumb, $full_url, $thumb_url, (int)$_POST["imgEnabled"], 0, (int)$_POST["imgDefault"], 0,(int)$_POST["imgSameImages"], $NewId);
        $img->Set("ImageId", $NewId);
        
 //       $img->debuglevel=1;
        
        /*
        $sql = "UPDATE ".$objImageList->SourceTable." SET ImageId=".$NewId." WHERE ImageId=0";
        $ado->Execute($sql);
        
 //       $img->Update();
        */
 //       echo "SL: $sql $NewId<BR>";
        
 //       $img->debuglevel=1;
         
 	   $img->Pending=TRUE;	                                 
        if($LocalImage)
        {
            $file = $_FILES["imgFullFile"];
            if(is_array($file))
            {
              if($file["size"]>0)
              {
                $img->Set("LocalPath",$img->StoreUploadedImage($file,1, $DestDir,0));
                $uploaded=1;
              }
            }
        }
        
        if($LocalThumb)
        {
            $thumb = $_FILES["imgThumbFile"];
            if(is_array($thumb))
            {
              if($thumb["size"]>0)
              {
                $img->Set("ThumbPath",$img->StoreUploadedImage($thumb,1, $DestDir,1));
                $uploaded=1;
              }
            }
        }  
        if($uploaded==1)
           $img->Update();
        
      break;
      
      case "m_img_edit":
      
        	$objImageList = new clsImageList();
        	$objImageList->SourceTable = $objSession->GetEditTable("Images");
        
 //       $img->debuglevel=1;
        
        	$img = $objImageList->GetItem($_POST["ImageId"]);
 
 	    ## Get original values
        	$LocalImage = $img->Get("LocalImage");
        	$LocalThumb = $img->Get("LocalThumb");
        	$SameImages = $img->Get("SameImages");
        	$ThumbPath = $img->Get("ThumbPath");
        
        	## New values
        	$LocalThumbN = (int)$_POST["imgLocalThumb"];
        	$LocalImageN = (int)$_POST["imgLocalFull"];
        	
  		$FULLFile = $_FILES["imgFullFile"];
         $THFile = $_FILES["imgThumbFile"]; 
         
         $DestDir = "kernel/images/";
         $img->Pending = FALSE;
         
         $SameImagesN = 0;
         $uploaded = 0;
 
        	## Images were the same, but not any more
        	if ($SameImages && !$_POST["imgSameImages"])
        	{	
        		## TH was a local file
         	if ($LocalThumb)
         	{
         		## TH image
         		{	
         			## Try to Delete OLD FULL
 				   	$img->DeleteLocalImage(FALSE, TRUE);
 				   	
 				   	## FULL image select, but field EMPTY - make a copy of old TH as FULL 
         			if ($LocalImageN && !(int)$FULLFile["size"])
         			{   
 //        				echo $pathToPending = $img->GetImageDir();
         				if (!eregi("pending/$", $pathToPending))
 	        				$pathToPending.= "pending/"; 
         					
         				$LocalThumb_File = $img->GetFileName(1);
         				
 //        				echo "<b>CAN'T FIND FILE:</b> ".$pathToPending.$LocalThumb_File."<BR>";
         				
         				if (file_exists($pathToPending.$LocalThumb_File))
 						{							
 				   			$LocalThumb_FileN = eregi_replace("^th_", "", $LocalThumb_File);		   			
 							$LocalThumb_FullFileN = $pathToPending.$LocalThumb_FileN;						
 							@unlink($LocalThumb_FullFileN);
 							@copy($pathToPending.$LocalThumb_File, $LocalThumb_FullFileN);
 					
 			   				$uploaded = 1;
 			   				$copied = 1;
 //			   				echo "COPING: ".$DestDir."pending/".$LocalThumb_FileN." <BR>";
 						}
 						else
 						{
 //							echo "CAN'T FIND FILE: ".$pathToPending.$LocalThumb_File."<BR>";
         				}					
         			}
         			## Upload new FULL image
         			elseif ($LocalImageN && (int)$FULLFile['size'])
         			{
         				$FULL_FileToUpload = $FULLFile;
         				$FULL_URL = "";         
         				
 //        				echo "	Upload new FULL image";				
         			}
         			## Full is URL
         			elseif (!$LocalImageN)
         			{
         				$img->DeleteLocalImage(FALSE, TRUE);
         				$FULL_URL = $_POST['imgFullUrl'];  
         				$FULL_FileToUpload = "";      			
         			}
         			else
         			{
 //        				echo "	## Unknow condition";
         			}
         				
         			## Take care of Thumbnail here
         			if ($LocalThumbN)
         			{     			        			
         				## Delete old if NEW TH image selected
         				if ((int)$THFile['size'])
         				{
         					$img->DeleteLocalImage(TRUE, FALSE);
         					$TH_FileToUpload = $THFile;
         				}
         				else
         					$TH_FileToUpload = "";        			
         			}
         			else
         			{
         				$img->DeleteLocalImage(TRUE, FALSE);
         				$TH_FileToUpload = "";
         				$TH_URL = $_POST['imgThumbUrl'];     
         			}
         		}
         	}
         	## TH was URL
         	else
         	{
         		## Take care of FULL image here
         		if ($LocalImageN && (int)$FULLFile["size"])
         		{
         			$FULL_FileToUpload = $FULLFile; 
         			$FULL_URL = "";        				
         		}
         		## Full is URL (or image size 0)
         		else
         		{
         			$FULL_FileToUpload = "";
         			$FULL_URL = $_POST['imgFullUrl'];        	      		
         		}
         		
         		## Take care of Thumbnail here
         		if ($LocalThumbN)    
         		{ 			        			
         			$TH_FileToUpload = (int)$THFile['size']? $THFile : "";        			
         			$TH_URL = "";
         		}
         		else
         		{
         			$TH_FileToUpload = "";
         			$TH_URL = $_POST['imgThumbUrl'];     
         		}     		
         	}
        	}
       	## Images were the same, and still the same
        	elseif ($SameImages && $_POST['imgSameImages'])
        	{       		
        		## Take care of Thumbnail & FULL here
         	if ($LocalThumbN)
         	{	        			        		
         		if ((int)$THFile['size'])
         		{
         			$img->DeleteLocalImage(TRUE, FALSE);
         			$TH_FileToUpload = $THFile;
         		}
         		else 
         			$TH_FileToUpload = "";
         			
         		$FULL_URL = $TH_URL = "";      			
         	}
         	else
         	{
         		$TH_FileToUpload = $FULL_FileToUpload = "";
         		$FULL_URL = $TH_URL = $_POST['imgThumbUrl'];            		 
         	}
         	
         	## Delete old FULL image    		
        		$img->DeleteLocalImage(FALSE,TRUE);
         	
         	$SameImagesN = 1;        	
        	}
        	## Images were NOT the same, and selected as the same now
        	elseif (!$SameImages && $_POST["imgSameImages"])
        	{
        		## Take care of Thumbnail & FULL here
         	if ($LocalThumbN)
         	{	        			
         		if ((int)$THFile['size'])
         		{
         			$img->DeleteLocalImage(TRUE, FALSE);
         			$TH_FileToUpload = $THFile;
         		}
         		else 
         			$TH_FileToUpload = "";
         		
         		
         		$FULL_URL = $TH_URL = "";        			
         	}
         	else
         	{   
         		$img->DeleteLocalImage(TRUE, FALSE);
         		$TH_FileToUpload = $FULL_FileToUpload = "";
         		$FULL_URL = $TH_URL = $_POST['imgThumbUrl'];         		           		 
         	}
         	
         	## Clean up FULL image
         	$img->DeleteLocalImage(FALSE, TRUE);	
         	
         	$SameImagesN = 1;
        	}
        	## Images were NOT the same, and selected as NOT the same
        	elseif (!$SameImages && !$_POST["imgSameImages"])
        	{
        		## Take care of Thumbnail
         	if ($LocalThumbN)
         	{	        			
         		if ((int)$THFile['size'])
         		{
         			$img->DeleteLocalImage(TRUE, FALSE);
         			$TH_FileToUpload = $THFile;        			
         		}
         		else 
         			$TH_FileToUpload = "";       		
         		
         		$TH_URL = "";
         	}
         	else
         	{
         		$img->DeleteLocalImage(TRUE, FALSE);
         		$TH_FileToUpload = "";
         		$TH_URL = $_POST['imgThumbUrl'];            		 
         	}
         	
         	## Take care of FULL here
         	if ($LocalImageN)
         	{
         		if ((int)$FULLFile['size'])
         		{
         			$img->DeleteLocalImage(FALSE, TRUE);
         			$FULL_FileToUpload = $FULLFile;
         		}
         		else
         			$FULL_FileToUpload = "";       	        	
         		
         		$FULL_URL = "";
         	}
         	else
         	{        		
         		$img->DeleteLocalImage(FALSE, TRUE);        		
         		$FULL_FileToUpload = "";
         		$FULL_URL = $_POST['imgFullUrl'];
         	}        	
        	}
        	## Unknow condition	
        	else
        	{
        		;
        	}
      
 		$img = $objImageList->Edit($_POST["ImageId"],$_POST["imgName"], $_POST["imgAlt"], $_POST["ResourceId"], $LocalImageN, $LocalThumbN, $FULL_URL, $TH_URL, (int)$_POST["imgEnabled"], (int)$_POST["imgPriority"], (int)$_POST["imgDefault"], 0, $SameImagesN);
 		
 //		echo "<B>DATA:</B> <BR> LocalImageN: $LocalImageN, LocalThumbN: $LocalThumbN, FULL_URL: $FULL_URL, TH_URL: $TH_URL, SameImagesN: $SameImagesN <BR>";
        
 	   
 	   	$img->Pending = TRUE;
 	   	
 		if (!empty($FULL_FileToUpload))
 		{
 			$img->Set("LocalPath",$img->StoreUploadedImage($FULL_FileToUpload, 1, $DestDir, 0));
 			$uploaded = 1;
 		}
 		/*
 		elseif (!$LocalImageN)
 		{
 			$img->Set("LocalPath", "");
 			$uploaded = 1;
 		}
 		*/
 		
 		if (!empty($TH_FileToUpload))
 		{
 			$img->Set("ThumbPath", $img->StoreUploadedImage($TH_FileToUpload, 1, $DestDir, 1));
 			$uploaded = 1;
 		}
 		
 		if ($copied)
 		{
 			$img->Set("LocalPath", $DestDir."pending/".$LocalThumb_FileN);	
 			$uploaded = 1;
 		}
 		      
        if($uploaded==1)
           $img->Update();   
               
      break;
      case "m_img_move_up":
          if (isset($_POST["itemlist"]))
          {
              $objImageList = new clsImageList();
              $objImageList->SourceTable = $objSession->GetEditTable("Images");
              foreach($_POST["itemlist"] as $id)
              {
                  $img = $objImageList->GetItem($id);
                  $img->MoveUp();
              }
          }
      break;
      case "m_img_move_down":
          if (isset($_POST["itemlist"]))
          {
              $objImageList = new clsImageList();
              $objImageList->SourceTable = $objSession->GetEditTable("Images");
              $itemlist=array_reverse($_POST["itemlist"]);
              foreach($itemlist as $id)
              {
                  $img = $objImageList->GetItem($id);
                  $img->MoveDown();
              }
          }
      break;
 
      case "m_img_delete":
        if(isset($_POST["itemlist"]))
        {       
          $objImageList = new clsImageList();
          $objImageList->SourceTable = $objSession->GetEditTable("Images");
          foreach($_POST["itemlist"] as $id)
          {
              $img = $objImageList->GetItem($id);
              $img->Set("ResourceId", 0);
              $img->Update();
              //$img->Delete();
          }
        }
      break;
      case "m_restore_delete":
        $bdate = $_POST["backupdate"];
        if($bdate>0)
        {
        	 $BackupFile = $objConfig->Get("Backup_Path")."/dump".$bdate.".txt";
        	 if(file_exists($BackupFile))
        	 	unlink($BackupFile);
        }
      break;  
      case "m_taglib":
      	include($pathtoroot."kernel/include/tag-class.php");
      	ParseTagLibrary();
     break; 	
     case "m_sql_query":
 		$SqlQuery = $_POST["sql"];
 		$ado = GetADODBConnection();
 		if(strlen($sql))
 		{
 		  $SqlResult = $ado->Execute(stripslashes($SqlQuery));
   	  	  $SqlError = $ado->ErrorMsg();
 		  $SqlErrorNum = $ado->ErrorNo();
 		}
     break;
     case "m_session_delete":
 	 	 if($ro_perm) break;
 	 	 $ado = GetADODBConnection();       	
          if (count($_POST['itemlist']) > 0) {
 	 	 	foreach($_POST["itemlist"] as $id)
          	{
       			$sql = "DELETE FROM ".GetTablePrefix()."UserSession WHERE SessionKey='$id'";
       			$ado->Execute($sql);
          	}
          }
          else {
       		$sql = "DELETE FROM ".GetTablePrefix()."UserSession WHERE Status='0'";
       		$ado->Execute($sql);         	
          }
     break;
     case "m_add_rule":
     	$objEditItems = new clsBanRuleList();
     	$objEditItems->SourceTable = $objSession->GetEditTable("BanRules");
     	//$ItemType,$RuleType,$ItemField,$ItemVerb,$ItemValue,$Priority,$Status;
     	$objEditItems->AddRule($_POST["rule_itemtype"],$_POST["rule_type"],$_POST["rule_field"],
     				   $_POST["rule_verb"],$_POST["rule_value"],(int)$_POST["rule_priority"],
     				   (int)$_POST["rule_status"], $_POST['rule_error']);
     break;
     case "m_edit_rule":    	
     	$objEditItems = new clsBanRuleList();
     	$objEditItems->SourceTable = $objSession->GetEditTable("BanRules");
     	//$ItemType,$RuleType,$ItemField,$ItemVerb,$ItemValue,$Priority,$Status;
     	$objEditItems->EditRule($_POST["rule_id"],$_POST["rule_itemtype"],$_POST["rule_type"],$_POST["rule_field"],
     				   $_POST["rule_verb"],$_POST["rule_value"],(int)$_POST["rule_priority"],
     				   (int)$_POST["rule_status"], $_POST['rule_error']);
     break;    
     case "m_rule_move_up":
        if($ro_perm) break;
        if(isset($_POST["itemlist"]))
        {                
          foreach($_POST["itemlist"] as $id)
          {
              $i = $objBanList->GetItem($id);
              $i->Increment("Priority");
          }
        }	      
     break;
     case "m_rule_move_down":
        if($ro_perm) break;
        if(isset($_POST["itemlist"]))
        {                
          foreach($_POST["itemlist"] as $id)
          {
              $i = $objBanList->GetItem($id);
              $i->Decrement("Priority");
          }
        }	      
     break;
     
 	case "m_rule_delete":
        if($ro_perm) break;
        if(isset($_POST["itemlist"]))
        {                
          foreach($_POST["itemlist"] as $id)
          {
              $i = $objBanList->GetItem($id);
              $i->Delete();
          }
        }		
     break;    
     case "m_ban_user":
       if($ro_perm) break;
       if($_POST["UserEditStatus"]==1)
       {
         $UserId = $_POST["user_id"];
         $u = $objUsers->GetItem($UserId);
         if(is_object($u))
         {
         	if((int)$_POST["ban_login"])
         	{
         		if(strlen($_POST["user_login"]))
         			$objBanList->AddRule(6,0,"Login",3,$_POST["user_login"],0,1);
         	}
         	if((int)$_POST["ban_email"])
         	{
         		if(strlen($_POST["user_email"]))
         			$objBanList->AddRule(6,0,"Email",3,$_POST["user_email"],0,1);
         	}
         	if((int)$_POST["ban_ip"])
         	{
         		if(strlen($_POST["user_ip"]))
         			$objBanList->AddRule(6,0,"ip",3,$_POST["user_ip"],0,1);
         	}       
         	$u->Deny(); 	
         }
       }
     break;  
     }
 
 /* image upload management */
 if( isset($_POST['img']) && $_POST['img'] == 1 )
 {
     foreach($_FILES as $img => $FILE)
     {
         $name = $_POST["img_Name_$img"];
         $alt = $_POST["img_Alt_$img"];
         $url = $_POST["img_Url_$img"];
         $res_id = $_POST["img_Res_$img"];
         $relvalue = $_POST["img_Rel_$img"];
         $thumb = (int)$_POST["img_Thumb_$img"];
         $dest = AddSlash($_POST["img_DestDir_$img"]);
         if($_POST["img_Del_$img"]=="Delete")
         {
             $img = $objImageList->GetImageByResource($res_id,$relvalue);
             $img->Delete();
             unset($img);
             $objImageList->Clear();
         }
         else
         {
           if($FILE["size"]>0)
           {
             /* an image was uploaded */
             $objImageList->HandleImageUpload($FILE,$res_id,$relvalue,$dest, $name,$alt,$thumb);
           }
           else
           {    /* remote images handled here */
             if(strlen($url)>0)
             {                   
               if($relvalue>0)
               {                                            
                $img = $objImageList->GetImageByResource($res_id,$relvalue);
                $img->Set("Name",$name);
                $img->Set("AltName", $alt);
                $img->Set("IsThumbnail",$thumb);
                $img->Set("Url",$url);
                $img->Update();
               }
               else
               {
                $relvalue = $objImageList->GetNextRelateValue($res_id);
                $objImageList->NewRemoteImage($url,$res_id,$relvalue, $name, $alt, $thumb);
               }
             }
           }
         }
     }
 }
 
 // ALL Saving Stuff From Temp Tables Heppens Here
 
 //echo "==== BEGIN ==== <br>";
 $has_perm = $objSession->HasSystemPermission("SYSTEM_ACCESS.READONLY");
 //echo "PortalUserID: [".$objSession->Get("PortalUserId")."]<br>";
 //echo "PermSet: [".$has_perm."]<br>";
 
 if( !$has_perm )
 {
 
 	/* category Edit */
 	if( GetVar('CatEditStatus') == 1 )
 	{
 	    $adodbConnection = GetADODBConnection();
 	
 	//    $sql = "SELECT * FROM ".$objSession->GetEditTable("Category")." WHERE CategoryId=0";    
 	    $sql = "SELECT * FROM ".$objSession->GetEditTable("Category")." WHERE CategoryId=-1";
 	    $rs = $adodbConnection->Execute($sql);
 	    while ($rs && !$rs->EOF) 
 	    {
 	        if($rs->fields["ParentId"]>0)
 	            RunUp($rs->fields["ParentId"],"Increment_Count");
 	        $rs->MoveNext();
 	    }
 	    
 	    $objCatList->CopyFromEditTable("CategoryId");
 	    $objCustomDataList->CopyFromEditTable("CustomDataId");
 	    $objCatList->Clear();
 	    
 	    if($_REQUEST['CategoryId'] > 0) // not root category is updated
 	    {
 	    	$objImages = new clsImageList();
 	    	$objImages->CopyFromEditTable("ImageId");
 		}
 	}
 	
 	if( GetVar('CatEditStatus') == 2 )
 	{
 	    $objCatList->PurgeEditTable("CategoryId");
 	    $objCustomDataList->PurgeEditTable("CustomDataId");
 	  	if($_REQUEST['CategoryId'] > 0) // not root category is updated
 	    {
 	    	$objImages = new clsImageList();
 	    	$objImages->PurgeEditTable("ImageId");
 	    }
 	    $objCatList->Clear();
 	}
 	
 	/* User Edit */
 	if( GetVar('UserEditStatus') == 1 )
 	{
 	    $objUsers->CopyFromEditTable("PortalUserId");
 	    $objCustomDataList->CopyFromEditTable("CustomDataId");
 	    $objGroups->Clear();
 	    $objImages = new clsImageList();
 	    $objImages->CopyFromEditTable("ImageId");    
 	}
 	if( GetVar('UserEditStatus') == 2 )
 	{
 	    $objGroups->PurgeEditTable("PortalUserId");
 	    $objCustomDataList->PurgeEditTable("CustomDataId");
 	    $objGroups->Clear();
 	}
 	
 	/* Group Edit */
 	if( GetVar('GroupEditStatus') == 1 )
 	{
 	    $objGroups->CopyFromEditTable("GroupId");
 	    $objCustomDataList->CopyFromEditTable("CustomDataId");
 	    $objGroups->Clear();
 	}
 	if( GetVar('GroupEditStatus') == 2 )
 	{
 	    $objGroups->PurgeEditTable("GroupId");
 	    $objCustomDataList->PurgeEditTable("CustomDataId");
 	    $objGroups->Clear();
 	}
 	
 	/* Theme Edit */
 	if( GetVar('ThemeEditStatus') == 1 )
 	{    
 	    $objThemes->CopyFromEditTable();
 	    $objThemes->Clear();
 	}
 	
 	if( GetVar('ThemeEditStatus') == 2 )
 	{
 	    $objThemes->PurgeEditTable();
 	    $objThemes->Clear();
 	}
 	
 	/* Language Edit */
 	if( GetVar('LangEditStatus') == 1 )
 	{
 	    $Messages = new clsEmailMessageList();
 	    $Messages->CopyFromEditTable();
 	    $Messages->Clear();
 	    $objLanguages->CopyFromEditTable();
 	    $objLanguages->Clear();
 	
 	    $Phrases = new clsPhraseList();
 	    $Phrases->CopyFromEditTable();
 	    $Phrases->Clear();
 	    $Phrases->PurgeEditTable();
 	}          
 	if( GetVar('LangEditStatus') == 2 )
 	{
 	    $objLanguages->PurgeEditTable();
 	    $objLanguages->Clear();
 	    $Phrases = new clsPhraseList();
 	    $Phrases->PurgeEditTable();    
 	    $Messages = new clsEmailMessageList();
 	    $Messages->PurgeEditTable();
 	}
 	
 	if( GetVar('MissingLangEditStatus') == 1 )
 	{
 	   $objPhraseList = new clsPhraseList();
 	   $objPhraseList->SourceTable = $objSession->GetSessionKey()."_".$ThemeId."_labels";
 	   
 	   $objEditList = new clsPhraseList();
 	   $objEditList->SourceTable = $objSession->GetEditTable("Phrase");
 	
 	   $ado = GetADODBConnection();
 	   $rs = $ado->Execute("SELECT MIN(PhraseId) as MinValue FROM ".$objEditList->SourceTable);
 	   $NewId = $rs->fields["MinValue"]-1;
 	   
 	   $objPhraseList->Query_Item("SELECT * FROM ".$objPhraseList->SourceTable);
 	   foreach($objPhraseList->Items as $p)
 	   {
 	       if(strlen($p->Get("Translation"))>0)
 	       {       
 	         $p->tablename = $objEditList->SourceTable;
 	         $p->Dirty();
 	         $p->UnsetIDField();
 	         $p->Set("PhraseId",$NewId);
 	         $NewId--;
 	         $p->Create();
 	       }
 	   }
 	   $ado->Execute("DROP TABLE ".$objPhraseList->SourceTable);
 	}
 	
 	if( GetVar('MissingLangEditStatus') == 2 )
 	{
 	  $table = $objSession->GetSessionKey()."_".$ThemeId."_labels";
 	  $ado = GetADODBConnection();
 	  $ado->Execute("DROP TABLE ".$table);
 	}
 	
 	/* Ban Rule Edit */
 	if( GetVar('RuleEditStatus') == 1 )
 	{    
 	    $objBanList->CopyFromEditTable("RuleId");
 	    $objBanList->Clear();
 	}
 	if( GetVar('RuleEditStatus') == 2 )
 	{
 	    $objBanList->PurgeEditTable("RuleId");
 	    $objBanList->Clear();
 	}
 }
 elseif( defined('DEBUG_ACTIONS') )
 {
 	if( isset($_REQUEST['Action']) && $_REQUEST['Action'] )
 		echo "<b>USER HAS RO-ACCESS</b> on action [<b>".$_REQUEST['Action']."</b>]<br>";
 }
 
 //echo "==== END ==== <br>";
 
 ?>

Property changes on: trunk/kernel/action.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.21
\ No newline at end of property
+1.22
\ No newline at end of property
Index: trunk/kernel/include/usersession.php
===================================================================
--- trunk/kernel/include/usersession.php	(revision 268)
+++ trunk/kernel/include/usersession.php	(revision 269)
@@ -1,1128 +1,1129 @@
 <?php
 
 class clsUserSession
 {
     //Common DB operation class variables
     var $m_dirtyFieldsMap = array();    
     //Identity
     var $m_SessionKey;    
     var $m_CurrentTempKey;
     var $m_PrevTempKey;
     //Required attributes
     var $m_LastAccessed;
     var $m_PortalUserId;
     var $m_Language;
     var $m_Theme;
     var $m_GroupId;
     var $adodbConnection;
     var $m_Errors;
     var $m_GroupList;
     var $PermCache;
     var $SysPermCache;
     var $PermCacheGroups;
     var $CurrentUser;
 	var $UseTempKeys;	
 	
 	function clsUserSession($id=NULL, $TempKeys=FALSE)
     {
         global $objConfig, $objLanguages, $objThemes, $m_var_list;
 
         $this->m_Errors = new clsErrorManager();
         $this->adodbConnection = GetADODBConnection();
         
         $this->PermCache = array();        
         $this->PermCacheGroups ="";
         $this->UseTempKeys = $TempKeys;
        
        	if( GetVar('help_usage') == 'install' ) return;       	
        	
         if(!$this->UseTempKeys || strlen($id)==0)
         {
         	//echo "with cookies";
         	if( !isset($_SERVER['HTTP_REFERER']) ) $_SERVER['HTTP_REFERER'] = '';
-        	
+        	if(!isset($_GET['destform'])) $_GET['destform'] = null;
+        	if(!isset($_GET['continue_sess'])) $_GET['continue_sess'] = null;
         	if( strlen($id) && (strstr($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'].$objConfig->Get("Site_Path")) || $_GET['destform'] == 'popup' || $_GET['continue_sess'] == 1))
         	{
         		$this->Set("SessionKey",$id);
            		return $this->LoadFromDatabase($id);
         	}
         	else
         	{
             	$this->Set("PortalUserId", 0);
             	$this->Set("Language", $objLanguages->GetPrimary());
             	$ThemeId = $m_var_list["theme"];
             	$this->SetThemeName($ThemeId);
             	//$this->Set("Theme", $objConfig->Get("Default_Theme"));
 				$this->Set("GroupList",0);
             	$this->Set("SessionKey","");
             	$this->Set("GroupList",$objConfig->Get("User_GuestGroup"));
         	}
         }
         else
         {
         	//echo "without cookies";
         	return $this->LoadFromTempKey($id);	
         }
     }
     
     function CopyToNewSession()
     {
     	$OldKey = $this->GetSessionKey();
         $this->GetNewSession();
         if($OldKey != $this->GetSessionKey())
         {
        		$this->Set("PortalUserId",$this->Get("PortalUserId"));
     	  	$this->Set("GroupId",$this->Get("GroupId"));
     	  	$this->Set("GroupList",$this->Get("GroupList"));
     	  	$this->Set("Language",$this->Get("Language"));
     	  	$this->Set("tz",$this->Get("tz"));
     	  	$this->Set("LastAccessed",date("U"));
     	  	$this->Update();    	
         }
     }
 
 	function Get($name)
 	{	
 		$var = "m_" . $name;
 		return isset($this->$var) ? $this->$var : '';
 	}
 
 	function Set($name, $value)
 	{
 		if (is_array($name))
 		{
 			for ($i=0; $i<sizeof($name); $i++)
 			{	$var = "m_" . $name[$i];
 				$this->$var = $value[$i];
 				$this->m_dirtyFieldsMap[$name[$i]] = $value[$i];
 			}
 		}
 		else
 		{
 		$var = "m_" . $name;
 		$this->$var = $value;
 		$this->m_dirtyFieldsMap[$name] = $value;
 		//echo "Set: $var = $value <br>\n";
 		}
 	}
 
     function Validate()
     {
         $dataValid = true;
         if(!isset($this->m_LastAccessed))
         {
             $this->m_Errors->AddError("error.fieldIsRequired",'LastAccessed',"","",get_class($this),"Validate");
             $dataValid = false;
         }
 
         if(!isset($this->m_PortalUserId))
         {
             $this->m_Errors->AddError("error.fieldIsRequired",'PortalUserId',"","",get_class($this),"Validate");
             $dataValid = false;
         }
         
         if(!isset($this->m_Language))
         {
             $this->m_Errors->AddError("error.fieldIsRequired",'Language',"","",get_class($this),"Validate");
             $dataValid = false;
         }
 
         if(!isset($this->m_Theme))
         {
             $this->m_Errors->AddError("error.fieldIsRequired",'Theme',"","",get_class($this),"Validate");
             $dataValid = false;
         }
         
         return $dataValid;
     }
     
     function Delete()
     {
         if(!isset($this->m_SessionKey))
         {
             $this->m_Errors->AddError("error.AppError",NULL,'Internal error: Delete requires set id',"",get_class($this),"Delete");
             return false;
         }        
         //Delete associated adata first
         $sql = sprintf("DELETE FROM ".GetTablePrefix()."SessionData WHERE SessionKey = '%s'", $this->Get("SessionKey"));
         $this->adodbConnection->Execute($sql);	
 		$sql = sprintf("DROP TABLE %s%s_search",GetTablePrefix(), $this->Get("SessionKey"));
 		$this->adodbConnection->Execute($sql);
         $sql = sprintf("DELETE FROM ".GetTablePrefix()."UserSession WHERE SessionKey = '%s'", $this->Get("SessionKey"));
 		$this->adodbConnection->Execute($sql);
 		if ($this->adodbConnection->Execute($sql) === false)
         {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Delete");
             return false;
         }
 		$this->Set("SessionKey","");
 		$this->Set("SessionDataLoaded",false);
         return true;
     }
 
     function Update()
     {
     	global $objConfig;
     
         //$this->Set("LastAccessed",date("U"));
         $this->Set("IpAddress",$_SERVER["REMOTE_ADDR"]);
         if(!isset($this->m_SessionKey))
         {
             $this->m_Errors->AddError("error.AppError",NULL,'Internal error: Update requires set id',"",get_class($this),"Update");
             return false;
         }
         if(!is_numeric($this->Get("PortalUserId")))
         {
           $this->Set("PortalUserId",0);
         }
         if(!strlen($this->Get("GroupList")))
         {
         	$this->Set("GroupList",$objConfig->Get("User_GuestGroup"));
         }
         if(count($this->m_dirtyFieldsMap) == 0)
             return true;
         $sql = "UPDATE ".GetTablePrefix()."UserSession SET ";
         $first  = 1;
         foreach ($this->m_dirtyFieldsMap as $key => $value)
         {
             if($first)
             {
                 $sql = sprintf("%s %s=%s",$sql,$key,$this->adodbConnection->qstr($value));
                 $first = 0;
             }
             else
             {
                 $sql = sprintf("%s, %s=%s",$sql,$key,$this->adodbConnection->qstr($value));
             }
         }
         $sql = sprintf("%s  WHERE SessionKey = '%s'",$sql, $this->Get("SessionKey"));
 		//echo $sql;
         if ($this->adodbConnection->Execute($sql) === false)
         {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Update");
             return false;
         }
         return true;
     }
 
     function Create()
     {
     	global $objConfig;
     	
         $this->Set("LastAccessed", time());
         if(!is_numeric($this->Get("PortalUserId")))
         {
           $this->Set("PortalUserId",0);
         }
         if(!strlen($this->Get("GroupList")))
         {
         	$this->Set("GroupList",$objConfig->Get("User_GuestGroup"));
         }
         $sql = "INSERT INTO ".GetTablePrefix()."UserSession (";
         $first  = 1;
         foreach ($this->m_dirtyFieldsMap as $key => $value)
         {
             if($first)
             {
                 $sql = sprintf("%s %s",$sql,$key);
                 $first = 0;
             }
             else
             {
                 $sql = sprintf("%s, %s",$sql,$key);
             }
         }
         $sql = sprintf('%s ) VALUES (',$sql);
         $first = 1;
         foreach ($this->m_dirtyFieldsMap as $key => $value)
         {
             if($first)
             {
                 $sql = sprintf("%s %s",$sql,$this->adodbConnection->qstr($value));
                 $first = 0;
             }
             else
             {
                 $sql = sprintf("%s, %s",$sql,$this->adodbConnection->qstr($value));
             }
         }
         $sql = sprintf('%s)',$sql);
         //echo $sql."<br>\n";
         if ($this->adodbConnection->Execute($sql) === false)
         {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Create");
             return false;
         }
         return true;
     }
 
    function LoadFromTempKey($id=NULL)
    {
 		global $objLanguages, $objConfig,$m_var_list;
         $referer = $_SERVER["HTTP_REFERER"];
         //echo "Referer: $referer <br>\n";
         if(strlen($referer) && strpos($referer,"env="))
         {
         	$keystart = strpos($referer,"env=")+4;
         	$referer = substr($referer,$keystart);
         	$keyend = strpos($referer,"-");
         	$LastKey = substr($referer,0,$keyend);
         	if(strlen($LastKey))
         	{
         		$sql = "SELECT * FROM ".GetTablePrefix()."UserSession WHERE (CurrentTempKey = '$id' OR PrevTempKey='$id' OR CurrentTempKey='$LastKey' OR PrevTempKey='$LastKey') ";
         	}
         	else
         		$sql = "SELECT * FROM ".GetTablePrefix()."UserSession WHERE CurrentTempKey = '$id' AND PrevTempKey IS NULL";
         }
         else 
         	$sql = "SELECT * FROM ".GetTablePrefix()."UserSession WHERE CurrentTempKey = '$id' AND PrevTempKey IS NULL";
         	
 	    $result = $this->adodbConnection->Execute($sql);
         if ($result === false)
         {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
             return false;
         }
 		$data = $result->fields;
         if (is_array($data))
         {
           foreach($data as $field => $value)
           {
 			$mname = "m_" . $field;
 			$this->$mname = $data[$field];			
           }
           
           if($this->Get("CurrentTempKey")) {
           	$this->Set("PrevTempKey",$this->Get("CurrentTempKey"));
           	$this->UseTempKeys=TRUE;
           }
           
           if (!$this->Get("CurrentTempKey") || !strstr($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'].$objConfig->Get("Site_Path"))) {          	
           	//$this->Set("PrevTempKey",$this->Get("CurrentTempKey"));
           	//$this->Set("CurrentTempKey",$this->GetUniqueKey());
           	$this->UseTempKeys=FALSE;
             $this->Set("PortalUserId", 0);
             $this->Set("Language", $objLanguages->GetPrimary());
             $ThemeId = $m_var_list["theme"];
             $this->SetThemeName($ThemeId);
             //$this->Set("Theme", $objConfig->Get("Default_Theme"));
 			$this->Set("GroupList",0);
             $this->Set("SessionKey","");
            	$this->Set("GroupList",$objConfig->Get("User_GuestGroup"));
           }
           //$this->UseTempKeys=TRUE;
           $this->Update();
 		  return true;
         }
         else
         {
           $this->Set("PortalUserId", 0);
           $this->Set("Language", $objLanguages->GetPrimary());
           $ThemeId = $m_var_list["theme"];
           $this->SetThemeName($ThemeId);
           //$this->Set("Theme", $objConfig->Get("Default_Theme"));
 		  $this->Set("GroupList",0);
           $this->Set("SessionKey","");
           $this->Set("GroupList",$objConfig->Get("User_GuestGroup"));        	
           $this->Set("CurrentTempKey",$this->GetUniqueKey());                            
           return false;
         }
     } 
        
     function LoadFromDatabase($id)
     {
         if(!isset($id))
         {
             $this->m_Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase");
             return false;
         }
         $sql = sprintf("SELECT * FROM ".GetTablePrefix()."UserSession WHERE SessionKey = '%s'",$id);
 
 	    $result = $this->adodbConnection->Execute($sql);
         if ($result === false)
         {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
             return false;
         }
 		$data = $result->fields;
         if (is_array($data))
         {
           foreach($data as $field => $value)
           {
 			$mname = "m_" . $field;
 			$this->$mname = $data[$field];
           }
 		  return true;
         }
         else
         {
           return false;
         }
     }
 
     function Login($userLogin, $userPassword)
     {
 		global $expired, $objConfig;
 		
         if($userLogin == "root")
         {
             // logging in "root" (admin only)
             $rootpass = $objConfig->Get("RootPass");            
             if($rootpass!=$userPassword)
             {
                return FALSE;
             }
             else
             {                
                 if(!strlen($this->GetSessionKey()))                                 
                   $this->GetNewSession();
                 $this->Set("PortalUserId",-1);
                 $this->Update();
                 return TRUE;
             }
         }
         else
         {        		  
 		  // logging in any user (admin & front)
 		  $pre = GetTablePrefix();
           $sql = "SELECT *,MD5(".$pre."PortalUser.Password) as md5pw FROM ".$pre."PortalUser LEFT JOIN ".$pre."UserGroup USING (PortalUserId) "
         	   ."LEFT JOIN ".$pre."PortalGroup ON (".$pre."UserGroup.GroupId=".$pre."PortalGroup.GroupId)
        			WHERE
         			".$pre."PortalUser.Login='$userLogin' AND ".$pre."PortalUser.Status=1 
         			AND (".$pre."PortalUser.Password='$userPassword' OR MD5(".$pre."PortalUser.Password)='$userPassword' OR ".$pre."PortalUser.Password='".md5($userPassword)."')          
 				ORDER BY ".$pre."UserGroup.PrimaryGroup DESC, ".$pre."PortalGroup.Personal DESC";
 //echo $sql."<br>\n";
           $result = $this->adodbConnection->Execute($sql);
 
           if ($result === false)
           {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Login");
             return false;
           }
           if($result->EOF)
              return false;
         }
         if(!strlen($this->GetSessionKey()))
         {        
           $this->GetNewSession();
         }
         
         $this->Set("PortalUserId", $result->fields["PortalUserId"]);
         if(strlen($result->fields["tz"])>0)
             $this->Set("tz",$result->fields["tz"]);
 		$PrimaryGroup=0;
 		$PersonalGroup=0;
 		$GroupList = array();
 		while($result && !$result->EOF)
 		{
 		  $skipadd=0;
 		  $g = $result->fields["GroupId"];
 
 		  if($result->fields["PrimaryGroup"]==1)
 		  {
 		     $PrimaryGroup = $g;
 			 $skipadd=1;
           }
 		  if($result->fields["Personal"]==1)
 		  {
 		    $PersonalGroup=$g;
             $skipadd=0;
 		  }
           if(!$skipadd)
             $GroupList[] = $g;
 		  $result->MoveNext();
 		}
         $extra_groups = implode(",",$GroupList);
         if($PrimaryGroup)
           $extra_groups = $PrimaryGroup.",".$extra_groups;
         if($PersonalGroup)
 		{
 		  $this->Set("GroupId",$PersonalGroup);
           //$extra_groups .= ",".$PersonalGroup;
 		}
 		else
 		{
 		    $this->Set("GroupId",$PrimaryGroup);
 		}    
         
         $this->Set("GroupList", $extra_groups);
 		$this->Set("LastAccessed",date("U"));
 		$this_login = $this->GetPersistantVariable("ThisLogin");
 		$this->SetPersistantVariable("LastLogin", $this_login);
 		$this->SetPersistantVariable("ThisLogin", time());
         $this->ResetSysPermCache();
         $this->PermCache = array();
         $this->Update();
         
         if($userLogin != 'root')
         {
         	if( ! $this->HasSystemPermission('LOGIN') )
         	{ 
         		$this->Logout();
         		return false;
         	}
         }
         
         return true;
     }
 
 	function Logout()
     {
         global $objConfig;
 
        	$this->Set("PortalUserId", 0);
        	$this->Set("GroupId", $objConfig->Get("User_GuestGroup"));
 		#$this->SetPersistantVariable("LastLogin", time());       
         $this->Set("GroupList",$objConfig->Get("User_GuestGroup"));
         $this->Set("IpAddress",$_SERVER['REMOTE_ADDR']);
         $this->DeleteSessionData($this->GetSessionKey());
 		$this->Update();
         $this->Delete(); 
         $this->ResetSysPermCache();
         $this->PermCache = array();
 	}
 	
     function SetVariable( $variableName, $variableValue)
     {
 	  global $objConfig, $FrontEnd;
 
       $objConfig->Set($variableName,$variableValue,2);
       
       //if(!(int)$FrontEnd==1)
       //{      
           $sessionkey = $this->GetSessionKey();
           $sql = "SELECT * FROM ".GetTablePrefix()."SessionData WHERE VariableName='$variableName' AND SessionKey='$sessionkey'";
           $rs = $this->adodbConnection->Execute($sql);
           if($rs && !$rs->EOF)
           {
               $sql = "UPDATE ".GetTablePrefix()."SessionData SET VariableValue='$variableValue' WHERE VariableName='$variableName' AND SessionKey='$sessionkey'";
           }
           else
               $sql = "INSERT INTO ".GetTablePrefix()."SessionData (VariableName,VariableValue,SessionKey) VALUES ('$variableName','$variableValue','$sessionkey')";
             
           $this->adodbConnection->Execute($sql); 
 //			echo "<BR>UPDATE: $sql<BR>";	
       //}
     }
 
 	function SetPersistantVariable($variableName, $variableValue)
 	{
 	  global $objConfig, $objUsers;
 
 	  $userid = (int)$this->Get("PortalUserId");
 	        
       if($userid > 0)
       {       
             if(!is_object($this->CurrentUser))
                 $this->CurrentUser = $objUsers->GetItem($this->Get("PortalUserId"));
             if(!$this->CurrentUser->VarsLoaded)
                 $this->CurrentUser->LoadPersistantVars();
 			//echo "setting current user' $variableName, $variableValue<br>";
             $this->CurrentUser->SetPersistantVariable($variableName, $variableValue); 
             //$this->SetVariable($variableName,$variableValue);      
       }
       else
           $this->SetVariable($variableName,$variableValue);
 	}
 
 	function GetPersistantVariable($variableName)
 	{
           global $objConfig, $objUsers;
 
           if(is_numeric($this->Get("PortalUserId")))
           {
             if(!is_object($this->CurrentUser))
                 $this->CurrentUser = $objUsers->GetItem($this->Get("PortalUserId"));
             if(!$this->CurrentUser->VarsLoaded)
                 $this->CurrentUser->LoadPersistantVars();
             $val = $this->CurrentUser->GetPersistantVariable($variableName);
           }
           if(!strlen($val))
               $val =  $objConfig->Get($variableName);
           return $val;
 	}
 
     function GetVariable($variableName)
     {
           global $objConfig;
                     
           return $objConfig->Get($variableName);
     }
 
    function LoadSessionData()
    {
      global $objConfig, $objUsers;
 
      if(is_numeric($this->Get("PortalUserId")))
      {
        $sql = "SELECT VariableName, VariableValue FROM ".GetTablePrefix()."SessionData where SessionKey='" . $this->Get("SessionKey") . "'";
        //echo $sql."<br>\n";
        $result = $this->adodbConnection->Execute($sql);
        while ($result && !$result->EOF)
        {
          $data = $result->fields;
          //echo "<PRE>"; print_r($data); echo "</PRE>";
          $objConfig->Set($data["VariableName"],$data["VariableValue"],FALSE);
          $result->MoveNext();
        }
        
        if(!is_object($this->CurrentUser))
            $this->CurrentUser = $objUsers->GetItem($this->Get("PortalUserId"));
        if(!$this->CurrentUser->VarsLoaded)
            $this->CurrentUser->LoadPersistantVars();
      }
      if((int)$this->GetPersistantVariable("Language"))
          $this->Set("Language",$objConfig->Get("Language"));
      $this->DeleteExpiredSessions();
      return true;
    }
 
    function DeleteSessionData($key)
    {
        $sql = "DELETE FROM ".GetTablePrefix()."SessionData WHERE SessionKey='$key'";
        $this->adodbConnection->Execute($sql);
    }
 
    function SaveSessionData()
    {
      global $objConfig;
 
      //echo "Saving Session Data..<br>\n";
      if($this->SessionEnabled())
      {     
        $data = $objConfig->GetDirtySessionValues(2); //session data
        //echo "<PRE>"; print_r($data); echo "</PRE>";
        $sessionkey = $this->GetSessionKey();
        foreach($data as $field=>$value)
        {
          $sql = "UPDATE ".GetTablePrefix()."SessionData SET VariableValue='$value' WHERE VariableName='$field' AND SessionKey='$sessionkey'";
          $this->adodbConnection->Execute($sql);
          //echo $sql."<br>\n";
 
          if($this->adodbConnection->Affected_Rows()==0)
          {
            $sql = "INSERT INTO ".GetTablePrefix()."SessionData (VariableName,VariableValue,SessionKey) VALUES ('$field','$value','$sessionkey')";
 	       $this->adodbConnection->Execute($sql);
          }
         // echo $sql."<br>\n";
        }     
      }
    }       
 
    function DeleteEditTables()
    {
        $tables = $this->adodbConnection->MetaTables();
        $sql = "SHOW TABLES";
        //echo "<PRE>";print_r($tables); echo "</PRE>";
        for($i=0;$i<count($tables);$i++)
        {
          $t = strtoupper($tables[$i]);
          $p = strtoupper(GetTablePrefix()."ses_ad");
          $k = substr($t,0,strlen($p));
 
          if($k == $p && strpos($t,"FD_")>0)
          {
              $key = "AD".strtoupper(substr($t,strlen($p),strpos($t,"FD_")-strlen($p)))."FD";
              $sql = "SELECT * FROM ".GetTablePrefix()."UserSession WHERE SessionKey='$key'";
              //echo $sql."<br>\n";
              $rs = $this->adodbConnection->Execute($sql);
              if(!$rs || $rs->EOF)
              {
                  //echo "Dropping Table $tables[$i] <br>\n";
                  @$this->adodbConnection->Execute("DROP TABLE ".$tables[$i]);
              }
          }
        }
    }
   
 	function DeleteExpiredSessions()
 	{
         global $objConfig;
 
 		$cutoff = time()-$objConfig->Get("SessionTimeout");
 		$thiskey = $this->GetSessionKey();
 		$sql = "SELECT SessionKey from ".GetTablePrefix()."UserSession WHERE LastAccessed<$cutoff AND SessionKey != '$thiskey'";
 		$result = $this->adodbConnection->Execute($sql);
         $keys = array();
         while ($result && !$result->EOF)
         {        
 		  	$keys[] = "SessionKey='" . $result->fields["SessionKey"] . "'";
 		   	$result->MoveNext();
 		}
         if(count($keys)>0)
         {        
 		  $keywhere = implode(" OR ", $keys);
           $sql = "DELETE FROM ".GetTablePrefix()."SessionData WHERE $keywhere";
           //echo $sql;
 		  $this->adodbConnection->Execute($sql);	
 		  $this->adodbConnection->Execute("DELETE FROM ".GetTablePrefix()."UserSession WHERE LastAccessed<$cutoff");
 		  $this->DeleteEditTables();
 		}        
 	}
 
     function SetSysPermCache()
     {
         unset($this->SysPermCache);
         $GroupList = $this->Get("GroupList");
 
         if(strlen($GroupList) && $GroupList !="0")
         {            
           $this->SysPermCache = array();
           $sql = "SELECT * FROM ".GetTablePrefix()."Permissions WHERE Type=1 AND PermissionValue=1 AND GroupId IN (".$GroupList.")";          
           //echo $sql."<br>\n";
           $rs = $this->adodbConnection->Execute($sql);
 
           while($rs && !$rs->EOF)
           {
             $val = $rs->fields["PermissionValue"];
             if($val==1)
                 $this->SysPermCache[$rs->fields["Permission"]] = 1;
             $PermList[] = $rs->fields["Permission"];
             $rs->MoveNext();
           }
           if( isset($PermList) && count($PermList) > 0) // I think this is never issued (comment by Alex)
             $this->SetVariable("SysPerm",implode(",",$PermList));
         }
     }
 	
     function GetSysPermCache()
     {
         $perms = trim($this->GetVariable("SysPerm"));  
         if(!strlen($perms))
         {
             $this->SetSysPermCache();
         }
         else
         {
             $p = explode(",",$perms);
 
             $this->SysPermCache = array();
             for($i=0;$i<count($p);$i++)
             {            
                 $n = $p[$i];                  
                 $this->SysPermCache[$n]=1;
             }           
         }
     }
 
     function SysPermCacheLoaded()
     {
         return (isset($this->SysPermCache));
     }
 
     function ResetSysPermCache()
     {  
        // echo "Resetting Perm Cache<br>\n";
         $this->SetVariable("SysPerm","");
         unset($this->SysPermCache);
         //$this->SysPermCache=array();
     }
 
 	function HasSystemPermission($PermissionName)
     {
 	    global $objGroups;
 
         if($this->Get("PortalUserId")==-1 && ($PermissionName=="ADMIN" || $PermissionName=="LOGIN"))
             return TRUE;
         //echo "Looking up $PermissionName:".$this->Get("GroupList")."<br>\n";
         //echo $this->Get("GroupList")." - ".$this->PermCacheGroups;
         $GroupList = $this->Get("GroupList");        
         if(substr($GroupList,-1)==",")
         {       
            $GroupList = substr($GroupList,0,-1);
            $this->Set("GroupList",$GroupList);
         } 
         //print_pre(   $GroupList);    
         if($this->Get("GroupList")!=$this->PermCacheGroups)
             $this->ResetSysPermCache();
         if(!$this->SysPermCacheLoaded())
         {
             //echo "Loading Perm Cache<br>\n";
             $this->GetSysPermCache();
             $this->PermCacheGroups = $this->Get("GroupList");
         }
         //echo "SysPerm $PermissionName: [". $this->SysPermCache[$PermissionName]."]<br>\n";
         return isset($this->SysPermCache[$PermissionName]) ? $this->SysPermCache[$PermissionName] == 1 : false;
     }
 
     function HasCatPermission($PermissionName,$CatId=NULL)
     {
        global $objCatList, $objUsers;
        
        $PermSet =FALSE;
        $Value = 0;
        if($this->Get("PortalUserId")==-1)
            return TRUE;
        if(!strlen($PermissionName))
            return FALSE;
        $GroupList = $this->Get("GroupList");
        if(substr($GroupList,-1)==",")
        {       
            $GroupList = substr($GroupList,0,-1);
            $this->Set("GroupList",$GroupList);
        }
        if(!strlen($this->Get("SessionKey")))
            $this->Set("GroupId",0);
        if(strlen(trim($GroupList)))
        {
            if(strlen($this->Get("GroupId")))
            {           
              $GroupList = $this->Get("GroupId").",".$GroupList;
            }
        }
        else
        {
            $GroupList = $this->Get("GroupId");
        }
        
        if($CatId == NULL)
        {
            $CatId = $objCatList->CurrentCategoryID();
        }
        
        $Cat = &$objCatList->GetCategory($CatId);
        
        $Value="";
        for($p=0;$p<count($this->PermCache);$p++)
        {
            $pItem = $this->PermCache[$p];
            if($pItem["perm"]==$PermissionName && $pItem["cat"]==$CatId)
            {           
                $Value=$pItem["value"];
                break;
            }
        }
        if(is_object($Cat) && !is_numeric($Value))
        {       
          $Value = 0;
          $CatList = $Cat->Get("ParentPath");
          $CatList = substr($CatList,1,-1);
          $CatList = str_replace("|",",",$CatList);
          if(strlen($CatList))
          {         
            $CatList ="0,".$CatList;
          }
          else
              $CatList = "0";
          $sql = "SELECT * FROM ".GetTablePrefix()."Permissions WHERE Permission LIKE '$PermissionName' AND CatId IN ($CatList) AND GroupId IN ($GroupList)";
 //         echo $sql."<br>\n";
          $rs = $this->adodbConnection->Execute($sql);
          $PermValue = array();
          while($rs && !$rs->EOF)
          {
             $index = $rs->fields["CatId"];
             if(!is_numeric($PermValue[$index]))
                 $PermValue[$index] = $rs->fields["PermissionValue"];
             $rs->MoveNext();
          }
          $cats = array_reverse(explode(",",$CatList));
          for($c=0;$c<count($cats);$c++)
          {
              $index = $cats[$c];
              if(is_numeric($PermValue[$index]))
              {             
                  $Value = $PermValue[$index];
                  break;
              }
          }
          $perm = array();
          $perm["perm"] = $PermissionName;
          $perm["cat"] = $CatId;
          $perm["value"] = $Value;
          array_push($this->PermCache, $perm);
        }       
        //echo  $GroupList." Has Permission $PermissionName = $Value<br>\n";
        return $Value;
     }
 
     function HasCatPermInList($PermList,$CatId=NULL, $System=FALSE)
     {
         $value = 0;
         if(strlen($PermList))
         {
             $plist = explode(",",$PermList);
             $value=0;
             for($p=0;$p<count($plist);$p++)
             {
                 if($this->HasCatPermission($plist[$p]))
                 {
                     $value = 1;
                     break;
                 }
                 else
                 {
                     if($System)
                     {
                         if($this->HasSystemPermission($plist[$p]))
                         {
                             $value = 1;
                             break;
                         }
                     }
                 }
             }
         }
         return $value;
     }
 
     function GetACLClause()
     {
         $GroupList = $this->Get("GroupList");
         if(strlen($GroupList))   
             $Groups = explode(",",$GroupList);
         $acl_where = "";
         if(@count($Groups)>0 && is_array($Groups))
         {   
             $acl_where = array();
             for($i=0;$i<count($Groups);$i++)
             {
                 $g = $Groups[$i];
                 if(strlen($g)>0)
                   $acl_where[] = "(FIND_IN_SET($g,acl) OR ((NOT FIND_IN_SET($g,dacl)) AND acl='')) ";
             }
             if(count($acl_where))
             {
                 $acl_where = "(".implode(" OR ",$acl_where).")";
             }
             else
                 $acl_where = "(FIND_IN_SET(0,acl))";
         }
         else
             $acl_where = "(FIND_IN_SET(0,acl))";
         return $acl_where;
     }
 
     function GetEditTable($base_table)
     {
         $prefix = GetTablePrefix();
         if(strlen($prefix))
         {
             if(substr($base_table,0,strlen($prefix))!=$prefix)
                 $base_table = $prefix.$base_table;
         }
         $table = $prefix."ses_".$this->GetSessionKey()."_edit_".$base_table;
         //echo "Table: $table <br>\n";
         return $table;
     }
     
     function GetSessionTable($base_table,$name)
     {
         $prefix = GetTablePrefix();
         if(strlen($prefix))
         {
             if(substr($base_table,0,strlen($prefix))!=$prefix)
                 $base_table = $prefix.$base_table;
         }
         $table = $prefix."ses_".$this->GetSessionKey()."_".$name.$base_table;
         //echo "Table: $table <br>\n";
         return $table;    	
     }
 
     function GetSearchTable($base_table="")
     {
         $prefix = GetTablePrefix();
         if(strlen($base_table))
         {
           if(strlen($prefix))
           {
             if(substr($base_table,0,strlen($prefix))!=$prefix)
                 $base_table = $prefix.$base_table;
           }
           $table = $prefix."ses_".$this->GetSessionKey()."_search_".$base_table;
         }
         else
           $table = $this->GetSessionTable('Search',''); //$prefix."ses_".$this->GetSessionKey()."_search";
         return $table;
     }
 
 	function GetTotalSessions()
 	{
        # $time = time() - 900;
 		$sql = "SELECT count(*) as SesCount FROM ".GetTablePrefix()."UserSession";
 		$result = $this->adodbConnection->Execute($sql);
         if ($result === false)
         {
             $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"GetTotalSessions");
             return false;
         }
 		return $result->fields["SesCount"];
 	}
 
 	function Query_UserSession($whereClause,$orderByClause)
 	{
 	    $resultSet = array();
 	    $sql = "SELECT ".GetTablePrefix()."* FROM ".GetTablePrefix()."UserSession ";   
     	if(isset($whereClause))
         	$sql = sprintf('%s WHERE %s',$sql,$whereClause);    
     	if(isset($orderByClause))
         	$sql = sprintf('%s ORDER BY %s',$sql,$orderByClause);
     	$result = $this->adodbConnection->Execute($sql);   
     	if ($result === false)
 	    {
     	    $this->m_Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Query_UserSession");
         	return false;
 	    }    
     	while (!$result->EOF)
 	    {
     	    $item = new clsUserSession(NULL);
         	$item->Set("SessionKey",$result->fields["SessionKey"]);
 	        $item->Set("LastAccessed", $result->fields["LastAccessed"]);
 	        $item->Set("PortalUserId", $result->fields["PortalUserId"]);
 	        $item->Set("Language", $result->fields["Language"]);
 		    $item->Set("Theme" , $result->fields["Theme"]);        
         	array_push($resultSet,$item);
 	        $result->MoveNext();
 		}
     	return $resultSet;
 	}
 
 	function GetUniqueKey()
 	{
 		while(true)
 		{
 			/* create the new session key here */
 			mt_srand(100000000*(double)microtime());
 			$sessionId=strtoupper(sprintf("AD%xFD",mt_rand(100000000,999999999))); //9 digit hex session id
 			$query = "select SessionKey from ".GetTablePrefix()."UserSession ";
 			$query .= "where SessionKey='$sessionId' OR CurrentTempKey='$sessionId' OR PrevTempKey='$sessionId'";
 			$rs = $this->adodbConnection->Execute($query);
 			if($rs->EOF)
 				break;
 			if($i>100)
 			{					
 				return "";
 			}
 			$i++;
 		}	
 		//echo "Getting Unique Key: $sessionId<br>";
 		return $sessionId;
 	}	
 
 	function GetNewSession()
 	{
     	global $sessionId, $objConfig, $objLanguages, $m_var_list;
 
 			$i=0;
            
             if($this->Get("PortalUserId")>0 || $objConfig->Get("GuestSessions")==1)
             {
               //echo "Creating Session<br>\n";
 			  $sessionId = $this->GetUniqueKey();
 			  $this->Set("SessionKey", $sessionId);    
 			  $this->Set("CurrentTempKey",$sessionId);
               if($m_var_list["lang"])
               {              
                 $this->Set("Language",$m_var_list["lang"]);
               }
               else
 			    $this->Set("Language", $objLanguages->GetPrimary());
               $this->SetThemeName();
 			  //$this->Set("Theme", $objConfig->Get("Default_Theme"));  
               $this->UpdateAccessTime();
               $this->Set("IpAddress", $_SERVER['REMOTE_ADDR'] );
               $this->Create();
             }
             else
                 $this->Set("SessionKey","");
 	}
 
     function SessionEnabled()
     {
        $res = FALSE;
        $key = $this->GetSessionKey(); 
        if(strlen($key)>0)
             $res = TRUE;
        return $res;
     }
 
 	function GetSessionKey()
     {
        return $this->Get("SessionKey");
     }
 
     function SetThemeName($id=0)
     {
         global $objThemes;
 
         if($id==0)
             $id = $objThemes->GetPrimaryTheme();
 
         $Theme = $objThemes->GetItem($id);
         $name = $Theme->Get("Name");
         $this->Set("Theme",$name);
         //$this->Update();
     }
 
     function ValidSession($SessionKey=NULL)
 	{
         global $objConfig;
         
         $a = $this->Get("LastAccessed");
         $cutoff = time()-$objConfig->Get("SessionTimeout");
         //echo $a." ".$cutoff."<br>";
         //$ip = ($_SERVER['REMOTE_ADDR'] == $this->Get("IpAddress"));
         //echo $this->Get("IpAddress");
         //$ip = TRUE;
         if ($a < $cutoff) {
         	//$this->UpdateAccessTime();
         }
         return ($a >= $cutoff);
         
 
     }
 
     function UpdateAccessTime()
     {
         $now = time();
         $this->Set("LastAccessed",$now);
     }
 
     function InSpamControl($ResourceId,$DataType=NULL)
     {
         static $ClearStat;
 
         if(!$ClearStat)
             $this->PurgeSpamControl();
         $ClearStat=1;
         if(strlen($DataType))
             $DataType="'".$DataType."'";
         $sql = "SELECT count(*) as SpamCount FROM ".GetTablePrefix()."SpamControl WHERE ItemResourceId=$ResourceId AND DataType=$DataType";
         if($this->Get("PortalUserId")==0)
         {
             $sql .= " AND PortalUserId=0 AND IPaddress='".$_SERVER["REMOTE_ADDR"]."'";
         }
         else
         {
             $sql .= " AND PortalUserId=".$this->Get("PortalUserId");
         }
         $rs = $this->adodbConnection->Execute($sql);
         $value = (int)$rs->fields["SpamCount"];
         if($value>0)
         {
             return TRUE;
         }
         else
             return FALSE;
     }
 
     function AddToSpamControl($ResourceId,$secstoexpire,$DataType=NULL)
     {
         $expire = adodb_date("U") + $secstoexpire;
         if(strlen($DataType))
             $DataType = "'".$DataType."'";
         $sql = "INSERT INTO ".GetTablePrefix()."SpamControl (ItemResourceId,IPaddress,Expire,PortalUserId,DataType) VALUES (";
         $sql .= $ResourceId.",'".$_SERVER["REMOTE_ADDR"]."',$expire,".$this->Get("PortalUserId").",$DataType)";
         //echo $sql;
         $this->adodbConnection->Execute($sql);
     }
 
     function PurgeSpamControl()
     {
         $sql = "DELETE FROM ".GetTablePrefix()."SpamControl WHERE Expire<".adodb_date("U");
 
         $this->adodbConnection->Execute($sql);
     }
 
 }/* clsUserSession */
 	
 ?>

Property changes on: trunk/kernel/include/usersession.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.8
\ No newline at end of property
+1.9
\ No newline at end of property
Index: trunk/admin/include/style.css
===================================================================
--- trunk/admin/include/style.css	(revision 268)
+++ trunk/admin/include/style.css	(revision 269)
@@ -1,461 +1,469 @@
 .CURRENT_PAGE {font-size:12px; background-color: #C4C4C4; font-family: verdana; font-weight:bold; padding-left:1px; padding-right:1px}
 .NAV_URL {font-size:12px; color: #1F569A; font-family: verdana; font-weight:bold; }
 .NAV_ARROW {font-size:12px; color: #1F569A; font-family: verdana; font-weight:normal; padding-left:3px; padding-right:3px}
 .NAV_CURRENT_ITEM {font-size:12px; color:#666666; font-family: verdana; font-weight:normal; font-weight:bold; }
 .priority {color: #ff0000; padding-left:1px; padding-right:1px; font-size:11px; }
 
 .validation_error {
     FONT-WEIGHT: bold; 
 	FONT-SIZE: 12px;
 	FONT-FAMILY: verdana, arial;
 	TEXT-DECORATION: none;
 	color: red;
 }
 
 .checksection {
    BORDER-RIGHT: 1px; BORDER-TOP: 1px; LEFT: 0px; VISIBILITY: hidden; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px; POSITION: absolute; TOP: 0px; BACKGROUND-COLOR: #acacac
 }
 .text {
    FONT-WEIGHT: normal; FONT-SIZE: 12px; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .small {
    FONT-SIZE: 9px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
 }
 .tab {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: verdana, arial, helvetica; TEXT-DECORATION: none
 }
 .tab2 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ffffff; FONT-FAMILY: verdana, arial, helvetica; TEXT-DECORATION: none
 }
 .tab2:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: verdana, arial, helvetica; TEXT-DECORATION: none
 }
 .tab:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: verdana, arial, helvetica; TEXT-DECORATION: none
 }
 .tab_border {
    BORDER-RIGHT: #000000 0px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 0px solid; BORDER-BOTTOM: #000000 0px solid
 }
 .table_tab {
    FONT-WEIGHT: bold; FONT-SIZE: 20px; COLOR: #ffffff; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #666666; TEXT-DECORATION: none
 }
 .button {
    FONT-WEIGHT: normal; FONT-SIZE: 12px; BACKGROUND: url(../images/button_back.gif) #f9eeae repeat-x; COLOR: black; FONT-FAMILY: arial, verdana; TEXT-DECORATION: none
 }
 .button1 {
    FONT-SIZE: 9px; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #a3d799
 }
 .button2 {
    FONT-SIZE: 9px; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #fe8b7e
 }
 .button3 {
    FONT-SIZE: 9px; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #999999
 }
 .buttonsmall {
    FONT-SIZE: 9px; CURSOR: hand; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #f9eeae
 }
 .toolbar {
    BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; FONT-SIZE: 10pt; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #f0f1eb
 }
 .actionborder_full {
    BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; FONT-SIZE: 10pt; BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: #999999 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 .actiontitle {
    FONT-SIZE: 8pt; COLOR: #ffffff; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #999999
 }
 .action_link {
    FONT-SIZE: 10px; COLOR: black; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
 }
 .action_link:hover {
    FONT-SIZE: 10px; COLOR: #009ff0; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
 }
 .pagenav {
    BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; FONT-SIZE: 10pt; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #e0e0da
 }
 .navbar {
    FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #006699; FONT-FAMILY: verdana, arial, sans-serif; TEXT-DECORATION: none
 }
 .navbar:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #009ff0; FONT-FAMILY: verdana, arial, sans-serif; TEXT-DECORATION: none
 }
 .navbar_selected {
    FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #ffffff; FONT-FAMILY: verdana, arial, sans-serif; BACKGROUND-COLOR: #006699; TEXT-DECORATION: none
 }
 .tablenav {
    FONT-WEIGHT: bold; 
    FONT-SIZE: 14px; 
    COLOR: white; 
    FONT-FAMILY: verdana, arial; 
    BACKGROUND-COLOR: #73c4f5; 
    TEXT-DECORATION: none;
 }
 .tablenav_link {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: white; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .tablenav_link:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #ffcc00; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .selection {
    BACKGROUND-COLOR: #c6d6ef
 }
 .error {
    FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #ff0000; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 .error2 {
    FONT-WEIGHT: bold; FONT-SIZE: 7pt; COLOR: #ff0000; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 .disabled_text {
    FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #CCCCCC; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 
 .marg {
    MARGIN: 5px
 }
 .table_header_text {
    MARGIN-BOTTOM: 2px; MARGIN-LEFT: 5px
 }
 .table_text {
    PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; PADDING-TOP: 8px
 }
 .divider {
    BACKGROUND-COLOR: #999999
 }
 .divider_tab {
    BACKGROUND-COLOR: #999999
 }
 .admintitle, .admintitle-white {
    FONT-WEIGHT: bold; FONT-SIZE: 20px; COLOR: #009ff0; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .admintitle-white {
 	color: #fff
 }
 .tabletitle {
    FONT-WEIGHT: bold; FONT-SIZE: 17px; COLOR: white; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #73c4f5; TEXT-DECORATION: none
 }
 .subsectiontitle {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: white; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #999999; TEXT-DECORATION: none; height: 24px
 }
 .subsectiontitle:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #ffcc00; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #999999; TEXT-DECORATION: none
 }
 .columntitle {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: white; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #999999; TEXT-DECORATION: none
 }
 .columntitle:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #ffcc00; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #999999; TEXT-DECORATION: none
 }
 .columntitle_small {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: white; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #999999; TEXT-DECORATION: none
 }
 .columntitle_small:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ffcc00; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #999999; TEXT-DECORATION: none
 }
 .permissions1 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #bb0000; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions1:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #bb0000; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions2 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #c8601a; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions2:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #c8601a; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions3 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ea8c00; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions3:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ea8c00; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions4 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #e6b800; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions4:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #e6b800; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions5 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #92bc2e; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions5:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #92bc2e; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions6 {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #339900; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions6:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #339900; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .permissions1_cell {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #bb0000; TEXT-DECORATION: none
 }
 .permissions2_cell {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #c8601a; TEXT-DECORATION: none
 }
 .permissions3_cell {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #ea8c00; TEXT-DECORATION: none
 }
 .permissions4_cell {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #e6b800; TEXT-DECORATION: none
 }
 .permissions5_cell {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #92bc2e; TEXT-DECORATION: none
 }
 .permissions6_cell {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #339900; TEXT-DECORATION: none
 }
 .table_color1 {
    FONT-WEIGHT: normal; FONT-SIZE: 14px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #f6f6f6; TEXT-DECORATION: none
 }
 .table_color2 {
    FONT-WEIGHT: normal; FONT-SIZE: 14px; COLOR: black; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #ebebeb; TEXT-DECORATION: none
 }
 .head_version {
    PADDING-RIGHT: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: white; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .form_note {
    FONT-WEIGHT: normal; FONT-SIZE: 10px; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .tree_head {
    FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: white; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none
 }
 .tree_head_credits { 
    FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: white; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none 
 } 
 .tree_head_credits:hover { 
    FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: white; FONT-FAMILY: verdana, arial; TEXT-DECORATION: none 
 }
 H1.selector {
    FONT-WEIGHT: bold; FONT-SIZE: 18pt; FONT-FAMILY: Arial
 }
 BODY {
    SCROLLBAR-FACE-COLOR: #009ffd; FONT-SIZE: 12px; SCROLLBAR-HIGHLIGHT-COLOR: #009ffd; SCROLLBAR-SHADOW-COLOR: #009ffd; COLOR: #000000; SCROLLBAR-3DLIGHT-COLOR: #333333; SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #88d2f8; FONT-FAMILY: Verdana, Arial, Helvetica, Sans-serif; SCROLLBAR-DARKSHADOW-COLOR: #333333;
    OVERFLOW-X: auto; OVERFLOW-Y: auto;
 }
 TD {
    FONT-SIZE: 10pt; FONT-FAMILY: verdana,helvetica; TEXT-DECORATION: none
 }
 .tableborder {
    BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; FONT-SIZE: 10pt; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 .tableborder_full {
    BORDER-RIGHT: #000000 1px solid; 
    BORDER-TOP: #000000 1px solid; 
    FONT-SIZE: 10pt; 
    BORDER-LEFT: #000000 1px solid; 
    BORDER-BOTTOM: #000000 1px solid; 
    FONT-FAMILY: Arial, Helvetica, sans-serif;
    background-image: url(../images/tab_middle.gif);
    background-repeat: repeat-x;
 }
 
 .header_left_bg {
 	background-image: url(../images/tabnav_left.jpg);
     background-repeat: no-repeat;
 }
 
 .tableborder_full_a {
    BORDER-RIGHT: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 
 
 A {
    COLOR: #006699; TEXT-DECORATION: none
 }
 A:hover {
    COLOR: #009ff0; TEXT-DECORATION: none
 }
 .control_link {font-size:12px; color: #1F569A; font-family: verdana; font-weight:bold; }
 
 .control_link:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #009ff0; FONT-FAMILY: verdana, arial
 }
 .header_link {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #003399; FONT-FAMILY: verdana, arial
 }
 .header_link:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #009ff0; FONT-FAMILY: verdana, arial
 }
 .tree {
    FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: helvetica, arial, verdana, helvetica; TEXT-DECORATION: none
 }
 .cat {
    FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #003399; FONT-FAMILY: arial, helvetica, sans-serif
 }
 .cat:hover {
    FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #009ff0; FONT-FAMILY: arial, helvetica, sans-serif
 }
 .catsub {
    FONT-SIZE: 8pt; COLOR: #000090; FONT-FAMILY: arial, helvetica, sans-serif
 }
 .catsub:hover {
    FONT-SIZE: 8pt; COLOR: #9d9ddc; FONT-FAMILY: arial, helvetica, sans-serif
 }
 .cat_no {
    FONT-SIZE: 10px; COLOR: #707070; FONT-FAMILY: arial, verdana, sans-serif
 }
 .cat_desc {
    FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: arial,verdana,sans-serif
 }
 .cat_new {
    FONT-SIZE: 12px; VERTICAL-ALIGN: super; COLOR: blue; FONT-FAMILY: arial, verdana, sans-serif
 }
 .cat_pick {
    FONT-SIZE: 12px; VERTICAL-ALIGN: super; COLOR: #009900; FONT-FAMILY: arial, helvetica, sans-serif
 }
 .cats_stats {
    FONT-SIZE: 11px; COLOR: #707070; FONT-FAMILY: arial,verdana,sans-serif;
 } 
 
 .cat_detail {
    FONT-SIZE: 8pt; COLOR: #707070; FONT-FAMILY: arial,verdana,sans-serif
 }
 .cat_fullpath {
    FONT-SIZE: 8pt; COLOR: #707070; FONT-FAMILY: arial,verdana,sans-serif
 }
 
 .action1 {
    FONT-SIZE: 12px; COLOR: #006600; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action1:link {
    FONT-SIZE: 12px; COLOR: #006600; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action1:unknown {
    FONT-SIZE: 12px; COLOR: #006600; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action1:unknown {
    FONT-SIZE: 12px; COLOR: #006600; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action1:hover {
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action2 {
    FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #990000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action2:link {
    FONT-SIZE: 12px; COLOR: #990000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action2:unknown {
    FONT-SIZE: 12px; COLOR: #990000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action2:unknown {
    FONT-SIZE: 12px; COLOR: #990000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action2:hover {
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action3 {
    FONT-SIZE: 12px; COLOR: #a27900; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action3:link {
    FONT-SIZE: 12px; COLOR: #a27900; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action3:unknown {
    FONT-SIZE: 12px; COLOR: #a27900; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action3:unknown {
    FONT-SIZE: 12px; COLOR: #a27900; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action3:hover {
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action4 {
    FONT-SIZE: 12px; COLOR: #800080; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action4:link {
    FONT-SIZE: 12px; COLOR: #800080; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action4:unknown {
    FONT-SIZE: 12px; COLOR: #800080; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action4:unknown {
    FONT-SIZE: 12px; COLOR: #800080; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action4:hover {
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action5 {
    FONT-SIZE: 12px; COLOR: #0079a2; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action5:link {
    FONT-SIZE: 12px; COLOR: #0079a2; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action5:unknown {
    FONT-SIZE: 12px; COLOR: #0079a2; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action5:unknown {
    FONT-SIZE: 12px; COLOR: #0079a2; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .action5:hover {
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none
 }
 .hint {
    FONT-SIZE: 12px; COLOR: #666666; FONT-STYLE: normal; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 
 .hint_red {
    FONT-SIZE: 10px; COLOR: #FF0000; FONT-STYLE: normal; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 
 .tabTable {
    background-color: #d7d7d7; 
    border-width: 1px;
    border-style: solid;
    border-color: black;
 }
 .navbar_link {
    FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #006699; FONT-FAMILY: verdana, arial, sans-serif; TEXT-DECORATION: underline;
 }
 form{
    display : inline;
 }
 
 .admintitle-white {
 	color: #fff
 }
 
 .tableborder {
    BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; FONT-SIZE: 10pt; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 .tableborder_full {
    BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 10pt; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 .tableborder_full_a {
    BORDER-RIGHT: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
 }
 
 .link
 {
 	cursor: hand;
 }
 
 .cat_link { 
 	font-family: arial, helvetica, sans-serif; 
 	font-size: 10pt; 
 	color: #006699; 
 }
 
 .help_box
 {
 	padding: 5px 10px 5px 10px;
 
 }
 
 /* debug output styles */
 
 .debug_table {
 	border: 1px solid green;
 	border-width: 0 0 1 1;
 }
 
 .debug_table TD, .debug_text {
 	color: #000000;
 	font-family: Arial, Helvetica;
 	font-size: 13px;
 }
 
 .debug_table TD {
 	border: 1px solid green;
 	border-width: 1 1 0 0;
 	
+}
+
+.debug_layer {
+	position: relative;
+	overflow: auto; 
+	
+	height: 300px; 
+	width: 600px;
 }
\ No newline at end of file

Property changes on: trunk/admin/include/style.css
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.7
\ No newline at end of property
+1.8
\ No newline at end of property