Browse Source

Work on website module

Laurent Destailleur 9 years ago
parent
commit
bcb4b2b607

+ 4 - 2
htdocs/adherents/cotisations.php

@@ -128,7 +128,9 @@ if ($result)
     if (! empty($date_select)) $title.=' ('.$langs->trans("Year").' '.$date_select.')';
 
     $param='';
-    $param.="&statut=$statut&date_select=$date_select";
+    if ($statut != '')    $param.="&statut=".$statut;
+    if ($date_select)     $param.="&date_select=".$date_select;
+    if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
     if ($search_lastname) $param.="&search_lastname=".$search_lastname;
 	if ($search_login)    $param.="&search_login=".$search_login;
 	if ($search_acount)   $param.="&search_account=".$search_account;
@@ -214,7 +216,7 @@ if ($result)
 
     $var=true;
     $total=0;
-    while ($i < $num && $i < $conf->liste_limit)
+    while ($i < min($num, $limit))
     {
         $objp = $db->fetch_object($result);
         $total+=$objp->cotisation;

+ 1 - 1
htdocs/admin/menus/index.php

@@ -262,7 +262,7 @@ print '</form>';
 
 print '<br>';
 
-print '<table class="border" width="100%">';
+print '<table class="noborder centpercent">';
 
 print '<tr class="liste_titre">';
 print '<td>'.$langs->trans("TreeMenuPersonalized").'</td>';

+ 4 - 3
htdocs/core/class/html.form.class.php

@@ -4205,7 +4205,7 @@ class Form
             $code_country="'".$societe_vendeuse->country_code."'";
         }
         else
-       {
+        {
             $code_country="'".$mysoc->country_code."'";   // Pour compatibilite ascendente
         }
         if (! empty($conf->global->SERVICE_ARE_ECOMMERCE_200238EC))    // If option to have vat for end customer for services is on
@@ -4243,8 +4243,9 @@ class Form
         	// Definition du taux a pre-selectionner (si defaulttx non force et donc vaut -1 ou '')
         	if ($defaulttx < 0 || dol_strlen($defaulttx) == 0)
         	{
-        		$defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$idprod);
-        		$defaultnpr=get_default_npr($societe_vendeuse,$societe_acheteuse,$idprod);
+        	    $tmpthirdparty=new Societe($this->db);
+        		$defaulttx=get_default_tva($societe_vendeuse, (is_object($societe_acheteuse)?$societe_acheteuse:$tmpthirdparty), $idprod);
+        		$defaultnpr=get_default_npr($societe_vendeuse, (is_object($societe_acheteuse)?$societe_acheteuse:$tmpthirdparty), $idprod);
         		if (empty($defaulttx)) $defaultnpr=0;
         	}
 

+ 1 - 1
htdocs/install/mysql/tables/llx_website_pages.sql

@@ -20,7 +20,7 @@
 CREATE TABLE llx_website_page
 (
 	rowid         integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
-	fk_website    integer,
+	fk_website    integer NOT NULL,
 	pageurl       varchar(16) NOT NULL,
 	title         varchar(255),						
 	description   varchar(255),						

+ 2 - 2
htdocs/product/admin/product_tools.php

@@ -275,7 +275,7 @@ else
 	print '<tr '.$bc[$var].'>'."\n";
 	print '<td>'.$langs->trans("OldVATRates").'</td>'."\n";
 	print '<td width="60" align="right">'."\n";
-	print $form->load_tva('oldvatrate', $oldvatrate);
+	print $form->load_tva('oldvatrate', $oldvatrate, $mysoc);
 	print '</td>'."\n";
 	print '</tr>'."\n";
 
@@ -283,7 +283,7 @@ else
 	print '<tr '.$bc[$var].'>'."\n";
 	print '<td>'.$langs->trans("NewVATRates").'</td>'."\n";
 	print '<td width="60" align="right">'."\n";
-	print $form->load_tva('newvatrate', $newvatrate);
+	print $form->load_tva('newvatrate', $newvatrate, $mysoc);
 	print '</td>'."\n";
 	print '</tr>'."\n";
 

+ 0 - 3
htdocs/websites/class/website.class.php

@@ -187,7 +187,6 @@ class Website extends CommonObject
 
 		$sql = 'SELECT';
 		$sql .= ' t.rowid,';
-		
 		$sql .= " t.entity,";
 		$sql .= " t.ref,";
 		$sql .= " t.description,";
@@ -195,8 +194,6 @@ class Website extends CommonObject
 		$sql .= " t.date_creation,";
 		$sql .= " t.date_modification,";
 		$sql .= " t.tms";
-
-		
 		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
 		if (null !== $ref) {
 			$sql .= ' WHERE t.ref = ' . '\'' . $ref . '\'';

+ 44 - 48
htdocs/websites/class/websitepage.class.php

@@ -86,9 +86,9 @@ class WebsitePage extends CommonObject
 		dol_syslog(__METHOD__, LOG_DEBUG);
 
 		$error = 0;
-
+        $now=dol_now();
+        
 		// Clean parameters
-		
 		if (isset($this->fk_website)) {
 			 $this->fk_website = trim($this->fk_website);
 		}
@@ -110,15 +110,18 @@ class WebsitePage extends CommonObject
 		if (isset($this->status)) {
 			 $this->status = trim($this->status);
 		}
-
-		
+		if (isset($this->date_creation)) {
+			 $this->date_creation = $now;
+		}
+		if (isset($this->date_modification)) {
+			 $this->date_modification = $now;
+		}
 
 		// Check parameters
 		// Put here code to add control on parameters values
 
 		// Insert request
 		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
-		
 		$sql.= 'fk_website,';
 		$sql.= 'pageurl,';
 		$sql.= 'title,';
@@ -128,10 +131,7 @@ class WebsitePage extends CommonObject
 		$sql.= 'status,';
 		$sql.= 'date_creation,';
 		$sql.= 'date_modification';
-
-		
 		$sql .= ') VALUES (';
-		
 		$sql .= ' '.(! isset($this->fk_website)?'NULL':$this->fk_website).',';
 		$sql .= ' '.(! isset($this->pageurl)?'NULL':"'".$this->db->escape($this->pageurl)."'").',';
 		$sql .= ' '.(! isset($this->title)?'NULL':"'".$this->db->escape($this->title)."'").',';
@@ -141,20 +141,18 @@ class WebsitePage extends CommonObject
 		$sql .= ' '.(! isset($this->status)?'NULL':$this->status).',';
 		$sql .= ' '.(! isset($this->date_creation) || dol_strlen($this->date_creation)==0?'NULL':"'".$this->db->idate($this->date_creation)."'").',';
 		$sql .= ' '.(! isset($this->date_modification) || dol_strlen($this->date_modification)==0?'NULL':"'".$this->db->idate($this->date_modification)."'");
-
-		
 		$sql .= ')';
 
 		$this->db->begin();
 
 		$resql = $this->db->query($sql);
-		if (!$resql) {
-			$error ++;
+		if (! $resql) {
+			$error++;
 			$this->errors[] = 'Error ' . $this->db->lasterror();
 			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
 		}
 
-		if (!$error) {
+		if (! $error) {
 			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
 
 			if (!$notrigger) {
@@ -169,7 +167,8 @@ class WebsitePage extends CommonObject
 		}
 
 		// Commit or rollback
-		if ($error) {
+		if ($error) 
+		{
 			$this->db->rollback();
 
 			return - 1 * $error;
@@ -254,22 +253,23 @@ class WebsitePage extends CommonObject
 	/**
 	 * Load object in memory from the database
 	 *
-	 * @param string $sortorder Sort Order
-	 * @param string $sortfield Sort field
-	 * @param int    $limit     offset limit
-	 * @param int    $offset    offset limit
-	 * @param array  $filter    filter array
-	 * @param string $filtermode filter mode (AND or OR)
+	 * @param string $sortorder    Sort Order
+	 * @param string $sortfield    Sort field
+	 * @param int    $limit        limit
+	 * @param int    $offset       Offset
+	 * @param array  $filter       Filter array
+	 * @param string $filtermode   Filter mode (AND or OR)
 	 *
-	 * @return int <0 if KO, >0 if OK
+	 * @return array|int           int <0 if KO, array of pages if OK
 	 */
-	public function fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, array $filter = array(), $filtermode='AND')
+	public function fetchAll($website_id, $sortorder='', $sortfield='', $limit=0, $offset=0, array $filter = array(), $filtermode='AND')
 	{
 		dol_syslog(__METHOD__, LOG_DEBUG);
 
+		$records=array();
+		
 		$sql = 'SELECT';
 		$sql .= ' t.rowid,';
-		
 		$sql .= " t.fk_website,";
 		$sql .= " t.pageurl,";
 		$sql .= " t.title,";
@@ -280,10 +280,8 @@ class WebsitePage extends CommonObject
 		$sql .= " t.date_creation,";
 		$sql .= " t.date_modification,";
 		$sql .= " t.tms";
-
-		
 		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t';
-
+        $sql .= ' WHERE t.fk_website = '.$website_id;
 		// Manage filter
 		$sqlwhere = array();
 		if (count($filter) > 0) {
@@ -292,7 +290,7 @@ class WebsitePage extends CommonObject
 			}
 		}
 		if (count($sqlwhere) > 0) {
-			$sql .= ' WHERE ' . implode(' '.$filtermode.' ', $sqlwhere);
+			$sql .= ' AND ' . implode(' '.$filtermode.' ', $sqlwhere);
 		}
 		
 		if (!empty($sortfield)) {
@@ -307,34 +305,32 @@ class WebsitePage extends CommonObject
 		if ($resql) {
 			$num = $this->db->num_rows($resql);
 
-			while ($obj = $this->db->fetch_object($resql)) {
-				$line = new WebsitepageLine();
-
-				$line->id = $obj->rowid;
-				
-				$line->fk_website = $obj->fk_website;
-				$line->pageurl = $obj->pageurl;
-				$line->title = $obj->title;
-				$line->description = $obj->description;
-				$line->keywords = $obj->keywords;
-				$line->content = $obj->content;
-				$line->status = $obj->status;
-				$line->date_creation = $this->db->jdate($obj->date_creation);
-				$line->date_modification = $this->db->jdate($obj->date_modification);
-				$line->tms = $this->db->jdate($obj->tms);
-
-				
-
-				$this->lines[$line->id] = $line;
+			while ($obj = $this->db->fetch_object($resql)) 
+			{
+				$record = new Websitepage($this->db);
+
+				$record->id = $obj->rowid;
+				$record->fk_website = $obj->fk_website;
+				$record->pageurl = $obj->pageurl;
+				$record->title = $obj->title;
+				$record->description = $obj->description;
+				$record->keywords = $obj->keywords;
+				$record->content = $obj->content;
+				$record->status = $obj->status;
+				$record->date_creation = $this->db->jdate($obj->date_creation);
+				$record->date_modification = $this->db->jdate($obj->date_modification);
+				$record->tms = $this->db->jdate($obj->tms);
+
+				$records[$record->id] = $record;
 			}
 			$this->db->free($resql);
 
-			return $num;
+			return $records;
 		} else {
 			$this->errors[] = 'Error ' . $this->db->lasterror();
 			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
 
-			return - 1;
+			return -1;
 		}
 	}
 

+ 171 - 47
htdocs/websites/index.php

@@ -77,30 +77,79 @@ $conf->dol_hide_leftmenu = 1;
 $error=0;
 $website=GETPOST('website', 'alpha');
 $page=GETPOST('page', 'alpha');
-$action = GETPOST('action','alpha');
+$pageid=GETPOST('pageid', 'alpha');
+$action=GETPOST('action','alpha');
 
 if (GETPOST('preview')) $action='preview';
-if (GETPOST('editmeta')) { $action='editmeta'; }
+if (GETPOST('create')) { $action='create'; }
 if (GETPOST('editmenu')) { $action='editmenu'; }
+if (GETPOST('editmeta')) { $action='editmeta'; }
 if (GETPOST('editcontent')) { $action='editcontent'; }
 
 if (empty($action)) $action='preview';
 
-
 $object=new Website($db);
 $objectpage=new WebsitePage($db);
 
+if ($website)
+{
+    $res = $object->fetch(0, $website);
+}
+if ($pageid)
+{
+    $res = $objectpage->fetch($pageid);
+}
+
 
 /*
  * Actions
  */
 
-// Action mise a jour ou ajout d'une constante
+// Add page
+if ($action == 'add')
+{
+    $db->begin();
+    
+    $objectpage->fk_website = $object->id;
+    
+    $objectpage->title = GETPOST('WEBSITE_TITLE');
+    $objectpage->pageurl = GETPOST('WEBSITE_PAGENAME');
+    $objectpage->description = GETPOST('WEBSITE_DESCRIPTION');
+    $objectpage->keyword = GETPOST('WEBSITE_KEYWORD');
+    
+    if (empty($objectpage->title))
+    {
+        setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("WEBSITE_PAGENAME")), null, 'errors');
+        $error++;
+    }
+    
+    if (! $error)
+    {
+        $res = $objectpage->create($user);
+        if ($res <= 0)
+        {
+            $error++;
+            setEventMessages($objectpage->error, $objectpage->errors, 'errors');
+        }
+    }
+	if (! $error)
+	{
+		$db->commit();
+	    setEventMessages($langs->trans("PageAdded"), null, 'mesgs');
+	    $action='';
+	}
+	else
+	{
+		$db->rollback();
+	}
+}
+
+// Update page
 if ($action == 'update')
 {
     $db->begin();
     
-    $object->fetch(0, $website);
+    $res = $object->fetch(0, $website);
     
     $objectpage->fk_website = $object->id;
     $objectpage->pageurl = GETPOST('WEBSITE_PAGENAME');
@@ -137,6 +186,45 @@ if ($action == 'update')
     }
 }
 
+// Update page
+if ($action == 'updatecontent')
+{
+    $db->begin();
+    
+    $object->fetch(0, $website);
+    
+    $objectpage->fk_website = $object->id;
+    $objectpage->pageurl = GETPOST('WEBSITE_PAGENAME');
+    
+    $res = $objectpage->fetch(0, $object->fk_website, $objectpage->pageurl);
+    
+    if ($res > 0)
+    {
+        $objectpage->content = GETPOST('PAGE_CONTENT');
+        
+        $res = $objectpage->update($user);
+        if (! $res > 0)
+        {
+            $error++;
+            setEventMessages($objectpage->error, $objectpage->errors, 'errors');
+        }
+        
+    	if (! $error)
+    	{
+    		$db->commit();
+    	    setEventMessages($langs->trans("Saved"), null, 'mesgs');
+    	    $action='';
+    	}
+    	else
+    	{
+    		$db->rollback();
+    	}
+    }
+    else
+    {
+        dol_print_error($db);
+    }
+}
 
 
 
@@ -150,15 +238,27 @@ $help_url='';
 
 llxHeader('', $langs->trans("WebsiteSetup"), $help_url);
 
-    print "\n".'<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
-    print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+print "\n".'<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
+print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+if ($action == 'create')
+{
+    print '<input type="hidden" name="action" value="add">';
+}
+if ($action == 'editcontent')
+{
+    print '<input type="hidden" name="action" value="updatecontent">';
+}
+if ($action == 'edit')
+{
     print '<input type="hidden" name="action" value="update">';
-    print '<input type="hidden" name="website" value="'.dol_escape_htmltag($website).'">';
-    print '<input type="hidden" name="page" value="'.dol_escape_htmltag($page).'">';
+}
+if ($website) print '<input type="hidden" name="website" value="'.dol_escape_htmltag($website).'">';
 
 
+// Add a margin under toolbar ?
 $style='';
-if ($action != 'preview') $style=' margin-bottom: 5px;';
+if ($action != 'preview' && $action != 'editcontent') $style=' margin-bottom: 5px;';
+
 
 print '<div class="centpercent websitebar">';
 
@@ -172,15 +272,15 @@ if (count($object->records) > 0)
     print '<div class="websiteselection">';
     // Loop on each sites
     $i=0;
-    foreach($object->records as $key => $websitearray)
+    foreach($object->records as $key => $valwebsite)
     {
-        if (empty($website)) $website=$websitearray->ref;
-        
+        if (empty($website)) $website=$valwebsite->ref;
+
         if ($i) print ' - ';
-        print '<a href="'.$_SERVER["PHP_SELF"].'?website='.urlencode($websitearray->ref).'">';
-        if ($websitearray->ref == $website) print '<strong>';
-        print $websitearray->ref;
-        if ($websitearray->ref == $website) print '</strong>';
+        print '<a href="'.$_SERVER["PHP_SELF"].'?website='.urlencode($valwebsite->ref).'">';
+        if ($valwebsite->ref == $website) print '<strong>';
+        print $valwebsite->ref;
+        if ($valwebsite->ref == $website) print '</strong>';
         print '</a>';
         
         $i++;    
@@ -196,25 +296,43 @@ if (count($object->records) > 0)
         if (empty($user->rights->websites->create)) $disabled=' disabled="disabled"';
 
         print '<input type="submit" class="button"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditMenu")).'" name="editmenu">';
+        print '<input type="submit"'.$disabled.' class="button" value="'.dol_escape_htmltag($langs->trans("AddPage")).'" name="create">';
     }
     //else print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" name="preview">';
-    if (preg_match('/^edit/',$action)) print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Save")).'" name="update">';
-
+    
     print '</div>';
     
+    
+    // Part for pages
     if ($website)
     {
         print '</div>';
+
+        $array=$objectpage->fetchAll($object->id);
+        
         print '<div class="centpercent websitebar"'.($style?' style="'.$style.'"':'').'">';
         print '<div class="websiteselection">';
         print $langs->trans("Page").': ';
         print '</div>';
         print '<div class="websiteselection">';
-        $array=$objectpage->fetchAll();
-        print $form->selectarray('page', $array);
+        $out='';
+        $out.='<select name="pageid">';
+        foreach($array as $key => $valpage)
+        {
+            if (empty($pageid) && $action != 'create') $pageid=$valpage->id;
+            
+            $out.='<option value="'.$key.'"';
+            if ($pageid > 0 && $pageid == $key) $out.=' selected';		// To preselect a value
+            $out.='>';
+            $out.=$valpage->title;
+            $out.='</option>';
+        }
+        $out.='</select>';
+        print $out;
+        print '<input type="submit" class="button" name="refresh" value="'.$langs->trans("Refresh").'">';
+        //print $form->selectarray('page', $array);
         print '</div>';
         print '<div class="websiteselection">';
-        print '<a class="buttonAddPage"'.$disabled.' href="'.$_SERVER["PHP_SELF"].'?action=addpage&website='.urlencode($website).'">'.dol_escape_htmltag($langs->trans("AddPage")).'</a>';
         print '</div>';
         
         print '<div class="websitetools">';
@@ -224,14 +342,15 @@ if (count($object->records) > 0)
             $disabled='';
             if (empty($user->rights->websites->create)) $disabled=' disabled="disabled"';
         
-            if ($page)
+            if ($pageid > 0)
             {
                 print '<input type="submit" class="button"'.$disabled.'  value="'.dol_escape_htmltag($langs->trans("EditPageMeta")).'" name="editmeta">';
                 print '<input type="submit" class="button"'.$disabled.'  value="'.dol_escape_htmltag($langs->trans("EditPageContent")).'" name="editcontent">';
             }
         }
         else print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" name="preview">';
-        if (preg_match('/^addpage/',$action)) print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Save")).'" name="update">';
+        if (preg_match('/^create/',$action)) print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Save")).'" name="update">';
+        if (preg_match('/^edit/',$action)) print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Save")).'" name="update">';
         
         print '</div>';
         
@@ -256,13 +375,13 @@ $head = array();
  * Edit mode
  */
 
-if ($action == 'editmeta' || $action == 'addpage')
+if ($action == 'editmeta' || $action == 'create')
 {
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre">';
-    print '<td>'.$langs->trans("Description").'</td>';
-    print '<td>'.$langs->trans("Value").'</td>';
-    print "</tr>\n";
+    print '<div class="fiche">';
+    
+    dol_fiche_head();
+    
+    print '<table class="border" width="100%">';
     
     print '<tr><td>';
     print $langs->trans('WEBSITE_PAGENAME');
@@ -270,12 +389,12 @@ if ($action == 'editmeta' || $action == 'addpage')
     print '<input type="text" class="flat" size="96" name="WEBSITE_PAGENAME" value="'.dol_escape_htmltag($page).'">';
     print '</td></tr>';
     
-    if ($action != 'addpage')
+    if ($action != 'create')
     {
         print '<tr><td>';
         print $langs->trans('WEBSITE_URL');
         print '</td><td>';
-        print '/public/websites/'.$website.'/index.php?page='.urlencode($page);
+        print '/public/websites/'.$website.'/index.php?pageid='.urlencode($pageid);
         print '</td></tr>';
     }
     
@@ -299,6 +418,10 @@ if ($action == 'editmeta' || $action == 'addpage')
     
     print '</table>';
     
+    dol_fiche_end();
+    
+    print '</div>';
+    
     print '<br>';
 }
 
@@ -309,22 +432,11 @@ if ($action == 'editmenu')
 
 if ($action == 'editcontent')
 {
-/*
+    /*
      * Editing global variables not related to a specific theme
      */
-    
-    print load_fiche_titre($langs->trans("Other"),'','');
-    
     require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
-    $doleditor=new DolEditor('WEBSITE_HEADER',$obj->value,'',160,'dolibarr_notes','',false,false,$conf->fckeditor->enabled,5,60);
-    $doleditor->Create();
-    
-    require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
-    $doleditor=new DolEditor('WEBSITE_CONTENT',$obj->value,'',160,'dolibarr_notes','',false,false,$conf->fckeditor->enabled,5,60);
-    $doleditor->Create();
-    
-    require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
-    $doleditor=new DolEditor('WEBSITE_FOOTER',$obj->value,'',160,'dolibarr_notes','',false,false,$conf->fckeditor->enabled,5,60);
+    $doleditor=new DolEditor('PAGE_CONTENT',$obj->value,'',160,'dolibarr_notes','',false,false,$conf->fckeditor->enabled,5,60);
     $doleditor->Create();
 }
 
@@ -334,8 +446,20 @@ print '</form>';
 
 if ($action == 'preview')
 {
-    print '<br><br><div class="center">'.$langs->trans("PreviewOfSiteNotYetAvailable", $website).'</center><br><br><br>';
-    print '<div class="center"><div class="logo_setup"></div></div>';
+    if ($pageid > 0)
+    {
+        $objectpage->fetch($pageid);
+        
+        print '<!-- Page content -->'."\n";
+        print '<div class="websitecontent">';
+        print $objectpage->content;
+        print '</div>';
+    }
+    else
+    {
+        print '<br><br><div class="center">'.$langs->trans("PreviewOfSiteNotYetAvailable", $website).'</center><br><br><br>';
+        print '<div class="center"><div class="logo_setup"></div></div>';
+    }
 }