PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/usuarioinfo.php

https://github.com/fredd-for/emaus_tesoreria
PHP | 627 lines | 424 code | 106 blank | 97 comment | 61 complexity | 21ab79d86315a7e2ba43461b242fac97 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. // PHPMaker 6 configuration for Table usuario
  3. $usuario = NULL; // Initialize table object
  4. // Define table class
  5. class cusuario {
  6. // Define table level constants
  7. var $TableVar;
  8. var $TableName;
  9. var $SelectLimit = FALSE;
  10. var $idUsuario;
  11. var $idRol;
  12. var $nombre;
  13. var $paterno;
  14. var $materno;
  15. var $ci;
  16. var $cargo;
  17. var $zlogin;
  18. var $password;
  19. var $fields = array();
  20. var $UseTokenInUrl = EW_USE_TOKEN_IN_URL;
  21. var $Export; // Export
  22. var $ExportOriginalValue = EW_EXPORT_ORIGINAL_VALUE;
  23. var $ExportAll = EW_EXPORT_ALL;
  24. var $SendEmail; // Send Email
  25. var $TableCustomInnerHtml; // Custom Inner Html
  26. function cusuario() {
  27. $this->TableVar = "usuario";
  28. $this->TableName = "usuario";
  29. $this->SelectLimit = TRUE;
  30. $this->idUsuario = new cField('usuario', 'x_idUsuario', 'idUsuario', "`idUsuario`", 3, -1, FALSE);
  31. $this->fields['idUsuario'] =& $this->idUsuario;
  32. $this->idRol = new cField('usuario', 'x_idRol', 'idRol', "`idRol`", 3, -1, FALSE);
  33. $this->fields['idRol'] =& $this->idRol;
  34. $this->nombre = new cField('usuario', 'x_nombre', 'nombre', "`nombre`", 200, -1, FALSE);
  35. $this->fields['nombre'] =& $this->nombre;
  36. $this->paterno = new cField('usuario', 'x_paterno', 'paterno', "`paterno`", 200, -1, FALSE);
  37. $this->fields['paterno'] =& $this->paterno;
  38. $this->materno = new cField('usuario', 'x_materno', 'materno', "`materno`", 200, -1, FALSE);
  39. $this->fields['materno'] =& $this->materno;
  40. $this->ci = new cField('usuario', 'x_ci', 'ci', "`ci`", 3, -1, FALSE);
  41. $this->fields['ci'] =& $this->ci;
  42. $this->cargo = new cField('usuario', 'x_cargo', 'cargo', "`cargo`", 200, -1, FALSE);
  43. $this->fields['cargo'] =& $this->cargo;
  44. $this->zlogin = new cField('usuario', 'x_zlogin', 'login', "`login`", 200, -1, FALSE);
  45. $this->fields['login'] =& $this->zlogin;
  46. $this->password = new cField('usuario', 'x_password', 'password', "`password`", 200, -1, FALSE);
  47. $this->fields['password'] =& $this->password;
  48. }
  49. // Records per page
  50. function getRecordsPerPage() {
  51. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_REC_PER_PAGE];
  52. }
  53. function setRecordsPerPage($v) {
  54. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_REC_PER_PAGE] = $v;
  55. }
  56. // Start record number
  57. function getStartRecordNumber() {
  58. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_START_REC];
  59. }
  60. function setStartRecordNumber($v) {
  61. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_START_REC] = $v;
  62. }
  63. // Search Highlight Name
  64. function HighlightName() {
  65. return "usuario_Highlight";
  66. }
  67. // Advanced search
  68. function getAdvancedSearch($fld) {
  69. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ADVANCED_SEARCH . "_" . $fld];
  70. }
  71. function setAdvancedSearch($fld, $v) {
  72. if (@$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ADVANCED_SEARCH . "_" . $fld] <> $v) {
  73. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ADVANCED_SEARCH . "_" . $fld] = $v;
  74. }
  75. }
  76. // Basic search Keyword
  77. function getBasicSearchKeyword() {
  78. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH];
  79. }
  80. function setBasicSearchKeyword($v) {
  81. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH] = $v;
  82. }
  83. // Basic Search Type
  84. function getBasicSearchType() {
  85. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH_TYPE];
  86. }
  87. function setBasicSearchType($v) {
  88. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH_TYPE] = $v;
  89. }
  90. // Search where clause
  91. function getSearchWhere() {
  92. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_SEARCH_WHERE];
  93. }
  94. function setSearchWhere($v) {
  95. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_SEARCH_WHERE] = $v;
  96. }
  97. // Single column sort
  98. function UpdateSort(&$ofld) {
  99. if ($this->CurrentOrder == $ofld->FldName) {
  100. $sSortField = $ofld->FldExpression;
  101. $sLastSort = $ofld->getSort();
  102. if ($this->CurrentOrderType == "ASC" || $this->CurrentOrderType == "DESC") {
  103. $sThisSort = $this->CurrentOrderType;
  104. } else {
  105. $sThisSort = ($sLastSort == "ASC") ? "DESC" : "ASC";
  106. }
  107. $ofld->setSort($sThisSort);
  108. $this->setSessionOrderBy($sSortField . " " . $sThisSort); // Save to Session
  109. } else {
  110. $ofld->setSort("");
  111. }
  112. }
  113. // Session WHERE Clause
  114. function getSessionWhere() {
  115. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_WHERE];
  116. }
  117. function setSessionWhere($v) {
  118. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_WHERE] = $v;
  119. }
  120. // Session ORDER BY
  121. function getSessionOrderBy() {
  122. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ORDER_BY];
  123. }
  124. function setSessionOrderBy($v) {
  125. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ORDER_BY] = $v;
  126. }
  127. // Session Key
  128. function getKey($fld) {
  129. return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_KEY . "_" . $fld];
  130. }
  131. function setKey($fld, $v) {
  132. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_KEY . "_" . $fld] = $v;
  133. }
  134. // Table level SQL
  135. function SqlSelect() { // Select
  136. return "SELECT * FROM `usuario`";
  137. }
  138. function SqlWhere() { // Where
  139. return " estado = 1 ";
  140. }
  141. function SqlGroupBy() { // Group By
  142. return "";
  143. }
  144. function SqlHaving() { // Having
  145. return "";
  146. }
  147. function SqlOrderBy() { // Order By
  148. return "";
  149. }
  150. // SQL variables
  151. var $CurrentFilter; // Current filter
  152. var $CurrentOrder; // Current order
  153. var $CurrentOrderType; // Current order type
  154. // Get SQL
  155. function GetSQL($where, $orderby) {
  156. return ew_BuildSelectSql($this->SqlSelect(), $this->SqlWhere(),
  157. $this->SqlGroupBy(), $this->SqlHaving(), $this->SqlOrderBy(),
  158. $where, $orderby);
  159. }
  160. // Table SQL
  161. function SQL() {
  162. $sFilter = $this->CurrentFilter;
  163. $sSort = $this->getSessionOrderBy();
  164. return ew_BuildSelectSql($this->SqlSelect(), $this->SqlWhere(),
  165. $this->SqlGroupBy(), $this->SqlHaving(), $this->SqlOrderBy(),
  166. $sFilter, $sSort);
  167. }
  168. // Return table sql with list page filter
  169. function SelectSQL() {
  170. $sFilter = $this->getSessionWhere();
  171. if ($this->CurrentFilter <> "") {
  172. if ($sFilter <> "") $sFilter = "($sFilter) AND ";
  173. $sFilter .= "(" . $this->CurrentFilter . ")";
  174. }
  175. $sSort = $this->getSessionOrderBy();
  176. return ew_BuildSelectSql($this->SqlSelect(), $this->SqlWhere(),
  177. $this->SqlGroupBy(), $this->SqlHaving(), $this->SqlOrderBy(),
  178. $sFilter, $sSort);
  179. }
  180. // Return record count
  181. function SelectRecordCount() {
  182. global $conn;
  183. $cnt = -1;
  184. $sFilter = $this->CurrentFilter;
  185. $this->Recordset_Selecting($this->CurrentFilter);
  186. if ($this->SelectLimit) {
  187. $sSelect = $this->SelectSQL();
  188. if (strtoupper(substr($sSelect, 0, 13)) == "SELECT * FROM") {
  189. $sSelect = "SELECT COUNT(*) FROM" . substr($sSelect, 13);
  190. if ($rs = $conn->Execute($sSelect)) {
  191. if (!$rs->EOF)
  192. $cnt = $rs->fields[0];
  193. $rs->Close();
  194. }
  195. }
  196. }
  197. if ($cnt == -1) {
  198. if ($rs = $conn->Execute($this->SelectSQL())) {
  199. $cnt = $rs->RecordCount();
  200. $rs->Close();
  201. }
  202. }
  203. $this->CurrentFilter = $sFilter;
  204. return intval($cnt);
  205. }
  206. // INSERT statement
  207. function InsertSQL(&$rs) {
  208. $names = "";
  209. $values = "";
  210. foreach ($rs as $name => $value) {
  211. if (EW_MD5_PASSWORD && $name == 'password') {
  212. $value = (EW_CASE_SENSITIVE_PASSWORD) ? md5($value) : md5(strtolower($value));
  213. }
  214. $names .= $this->fields[$name]->FldExpression . ",";
  215. $values .= (is_null($value) ? "NULL" : ew_QuotedValue($value, $this->fields[$name]->FldDataType)) . ",";
  216. }
  217. if (substr($names, -1) == ",") $names = substr($names, 0, strlen($names)-1);
  218. if (substr($values, -1) == ",") $values = substr($values, 0, strlen($values)-1);
  219. return "INSERT INTO `usuario` ($names,estado) VALUES ($values,'1')";
  220. }
  221. // UPDATE statement
  222. function UpdateSQL(&$rs) {
  223. $SQL = "UPDATE `usuario` SET ";
  224. foreach ($rs as $name => $value) {
  225. if (EW_MD5_PASSWORD && $name == 'password') {
  226. $value = (EW_CASE_SENSITIVE_PASSWORD) ? md5($value) : md5(strtolower($value));
  227. }
  228. $SQL .= $this->fields[$name]->FldExpression . "=" .
  229. (is_null($value) ? "NULL" : ew_QuotedValue($value, $this->fields[$name]->FldDataType)) . ",";
  230. }
  231. if (substr($SQL, -1) == ",") $SQL = substr($SQL, 0, strlen($SQL)-1);
  232. if ($this->CurrentFilter <> "") $SQL .= " WHERE " . $this->CurrentFilter;
  233. return $SQL;
  234. }
  235. // DELETE statement
  236. function DeleteSQL(&$rs) {
  237. $SQL = "UPDATE usuario SET estado=0 where idUsuario = ".ew_QuotedValue($rs['idUsuario'], $this->idCuenta->FldDataType) ;
  238. // $SQL = "DELETE FROM `usuario` WHERE ";
  239. // $SQL .= EW_DB_QUOTE_START . 'idUsuario' . EW_DB_QUOTE_END . '=' . ew_QuotedValue($rs['idUsuario'], $this->idUsuario->FldDataType) . ' AND ';
  240. // if (substr($SQL, -5) == " AND ") $SQL = substr($SQL, 0, strlen($SQL)-5);
  241. // if ($this->CurrentFilter <> "") $SQL .= " AND " . $this->CurrentFilter;
  242. return $SQL;
  243. }
  244. // Key filter for table
  245. function SqlKeyFilter() {
  246. return "`idUsuario` = @idUsuario@";
  247. }
  248. // Return Key filter for table
  249. function KeyFilter() {
  250. $sKeyFilter = $this->SqlKeyFilter();
  251. if (!is_numeric($this->idUsuario->CurrentValue))
  252. $sKeyFilter = "0=1"; // Invalid key
  253. $sKeyFilter = str_replace("@idUsuario@", ew_AdjustSql($this->idUsuario->CurrentValue), $sKeyFilter); // Replace key value
  254. return $sKeyFilter;
  255. }
  256. // Return url
  257. function getReturnUrl() {
  258. // Get referer URL automatically
  259. if (ew_ServerVar("HTTP_REFERER") <> "" && ew_ReferPage() <> ew_CurrentPage() && ew_ReferPage() <> "login.php") // Referer not same page or login page
  260. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_RETURN_URL] = ew_ServerVar("HTTP_REFERER"); // Save to Session
  261. if (@$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_RETURN_URL] <> "") {
  262. return $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_RETURN_URL];
  263. } else {
  264. return "usuariolist.php";
  265. }
  266. }
  267. function setReturnUrl($v) {
  268. $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_RETURN_URL] = $v;
  269. }
  270. // View url
  271. function ViewUrl() {
  272. return $this->KeyUrl("usuarioview.php", $this->UrlParm());
  273. }
  274. // Add url
  275. function AddUrl() {
  276. $AddUrl = "usuarioadd.php";
  277. $sUrlParm = $this->UrlParm();
  278. if ($sUrlParm <> "")
  279. $AddUrl .= "?" . $sUrlParm;
  280. return $AddUrl;
  281. }
  282. // Edit url
  283. function EditUrl() {
  284. return $this->KeyUrl("usuarioedit.php", $this->UrlParm());
  285. }
  286. // Inline edit url
  287. function InlineEditUrl() {
  288. return $this->KeyUrl(ew_CurrentPage(), $this->UrlParm("a=edit"));
  289. }
  290. // Copy url
  291. function CopyUrl() {
  292. return $this->KeyUrl("usuarioadd.php", $this->UrlParm());
  293. }
  294. // Inline copy url
  295. function InlineCopyUrl() {
  296. return $this->KeyUrl(ew_CurrentPage(), $this->UrlParm("a=copy"));
  297. }
  298. // Delete url
  299. function DeleteUrl() {
  300. return $this->KeyUrl("usuariodelete.php", $this->UrlParm());
  301. }
  302. // Key url
  303. function KeyUrl($url, $parm = "") {
  304. $sUrl = $url . "?";
  305. if ($parm <> "") $sUrl .= $parm . "&";
  306. if (!is_null($this->idUsuario->CurrentValue)) {
  307. $sUrl .= "idUsuario=" . urlencode($this->idUsuario->CurrentValue);
  308. } else {
  309. return "javascript:alert('Llave incorrecta es nula');";
  310. }
  311. return $sUrl;
  312. }
  313. // Sort Url
  314. function SortUrl(&$fld) {
  315. if ($this->CurrentAction <> "" || $this->Export <> "" ||
  316. ($fld->FldType == 205)) { // Unsortable data type
  317. return "";
  318. } else {
  319. $sUrlParm = $this->UrlParm("order=" . urlencode($fld->FldName) . "&ordertype=" . $fld->ReverseSort());
  320. return ew_CurrentPage() . "?" . $sUrlParm;
  321. }
  322. }
  323. // URL parm
  324. function UrlParm($parm = "") {
  325. $UrlParm = ($this->UseTokenInUrl) ? "t=usuario" : "";
  326. if ($parm <> "") {
  327. if ($UrlParm <> "")
  328. $UrlParm .= "&";
  329. $UrlParm .= $parm;
  330. }
  331. return $UrlParm;
  332. }
  333. // Function LoadRs
  334. // - Load rows based on filter
  335. function LoadRs($sFilter) {
  336. global $conn;
  337. // Set up filter (Sql Where Clause) and get Return Sql
  338. $this->CurrentFilter = $sFilter;
  339. $sSql = $this->SQL();
  340. return $conn->Execute($sSql);
  341. }
  342. // Load row values from recordset
  343. function LoadListRowValues(&$rs) {
  344. $this->idUsuario->setDbValue($rs->fields('idUsuario'));
  345. $this->idRol->setDbValue($rs->fields('idRol'));
  346. $this->nombre->setDbValue($rs->fields('nombre'));
  347. $this->paterno->setDbValue($rs->fields('paterno'));
  348. $this->materno->setDbValue($rs->fields('materno'));
  349. $this->ci->setDbValue($rs->fields('ci'));
  350. $this->cargo->setDbValue($rs->fields('cargo'));
  351. $this->zlogin->setDbValue($rs->fields('login'));
  352. $this->password->setDbValue($rs->fields('password'));
  353. }
  354. // Render list row values
  355. function RenderListRow() {
  356. global $conn, $Security;
  357. // Call Row Rendering event
  358. $this->Row_Rendering();
  359. // idUsuario
  360. $this->idUsuario->ViewValue = $this->idUsuario->CurrentValue;
  361. $this->idUsuario->CssStyle = "";
  362. $this->idUsuario->CssClass = "";
  363. $this->idUsuario->ViewCustomAttributes = "";
  364. // idRol
  365. if ($Security->CanAdmin()) { // System admin
  366. if (strval($this->idRol->CurrentValue) <> "") {
  367. $sSqlWrk = "SELECT `nombre` FROM `rol` WHERE `idRol` = " . ew_AdjustSql($this->idRol->CurrentValue) . "";
  368. $sSqlWrk .= " ORDER BY `nombre` Asc";
  369. $rswrk = $conn->Execute($sSqlWrk);
  370. if ($rswrk && !$rswrk->EOF) { // Lookup value(s) found
  371. $this->idRol->ViewValue = $rswrk->fields('nombre');
  372. $rswrk->Close();
  373. } else {
  374. $this->idRol->ViewValue = $this->idRol->CurrentValue;
  375. }
  376. } else {
  377. $this->idRol->ViewValue = NULL;
  378. }
  379. } else {
  380. $this->idRol->ViewValue = "********";
  381. }
  382. $this->idRol->CssStyle = "";
  383. $this->idRol->CssClass = "";
  384. $this->idRol->ViewCustomAttributes = "";
  385. // nombre
  386. $this->nombre->ViewValue = $this->nombre->CurrentValue;
  387. $this->nombre->CssStyle = "";
  388. $this->nombre->CssClass = "";
  389. $this->nombre->ViewCustomAttributes = "";
  390. // paterno
  391. $this->paterno->ViewValue = $this->paterno->CurrentValue;
  392. $this->paterno->CssStyle = "";
  393. $this->paterno->CssClass = "";
  394. $this->paterno->ViewCustomAttributes = "";
  395. // materno
  396. $this->materno->ViewValue = $this->materno->CurrentValue;
  397. $this->materno->CssStyle = "";
  398. $this->materno->CssClass = "";
  399. $this->materno->ViewCustomAttributes = "";
  400. // ci
  401. $this->ci->ViewValue = $this->ci->CurrentValue;
  402. $this->ci->CssStyle = "";
  403. $this->ci->CssClass = "";
  404. $this->ci->ViewCustomAttributes = "";
  405. // cargo
  406. $this->cargo->ViewValue = $this->cargo->CurrentValue;
  407. $this->cargo->CssStyle = "";
  408. $this->cargo->CssClass = "";
  409. $this->cargo->ViewCustomAttributes = "";
  410. // idUsuario
  411. $this->idUsuario->HrefValue = "";
  412. // idRol
  413. $this->idRol->HrefValue = "";
  414. // nombre
  415. $this->nombre->HrefValue = "";
  416. // paterno
  417. $this->paterno->HrefValue = "";
  418. // materno
  419. $this->materno->HrefValue = "";
  420. // ci
  421. $this->ci->HrefValue = "";
  422. // cargo
  423. $this->cargo->HrefValue = "";
  424. // Call Row Rendered event
  425. $this->Row_Rendered();
  426. }
  427. var $CurrentAction; // Current action
  428. var $EventName; // Event name
  429. var $EventCancelled; // Event cancelled
  430. var $CancelMessage; // Cancel message
  431. var $RowType; // Row Type
  432. var $CssClass; // Css class
  433. var $CssStyle; // Css style
  434. var $RowClientEvents; // Row client events
  435. // Row Attribute
  436. function RowAttributes() {
  437. $sAtt = "";
  438. if (trim($this->CssStyle) <> "") {
  439. $sAtt .= " style=\"" . trim($this->CssStyle) . "\"";
  440. }
  441. if (trim($this->CssClass) <> "") {
  442. $sAtt .= " class=\"" . trim($this->CssClass) . "\"";
  443. }
  444. if ($this->Export == "") {
  445. if (trim($this->RowClientEvents) <> "") {
  446. $sAtt .= " " . trim($this->RowClientEvents);
  447. }
  448. }
  449. return $sAtt;
  450. }
  451. // Field objects
  452. function fields($fldname) {
  453. return $this->fields[$fldname];
  454. }
  455. // Table level events
  456. // Recordset Selecting event
  457. function Recordset_Selecting(&$filter) {
  458. // Enter your code here
  459. }
  460. // Recordset Selected event
  461. function Recordset_Selected(&$rs) {
  462. //echo "Recordset Selected";
  463. }
  464. // Recordset Searching event
  465. function Recordset_Searching(&$filter) {
  466. // Enter your code here
  467. }
  468. // Row_Selecting event
  469. function Row_Selecting(&$filter) {
  470. // Enter your code here
  471. }
  472. // Row Selected event
  473. function Row_Selected(&$rs) {
  474. //echo "Row Selected";
  475. }
  476. // Row Rendering event
  477. function Row_Rendering() {
  478. // Enter your code here
  479. }
  480. // Row Rendered event
  481. function Row_Rendered() {
  482. // To view properties of field class, use:
  483. //var_dump($this-><FieldName>);
  484. }
  485. // Row Inserting event
  486. function Row_Inserting(&$rs) {
  487. // Enter your code here
  488. // To cancel, set return value to FALSE
  489. return TRUE;
  490. }
  491. // Row Inserted event
  492. function Row_Inserted(&$rs) {
  493. //echo "Row Inserted"
  494. }
  495. // Row Updating event
  496. function Row_Updating(&$rsold, &$rsnew) {
  497. // Enter your code here
  498. // To cancel, set return value to FALSE
  499. return TRUE;
  500. }
  501. // Row Updated event
  502. function Row_Updated(&$rsold, &$rsnew) {
  503. //echo "Row Updated";
  504. }
  505. // Row Deleting event
  506. function Row_Deleting(&$rs) {
  507. // Enter your code here
  508. // To cancel, set return value to False
  509. return TRUE;
  510. }
  511. // Row Deleted event
  512. function Row_Deleted(&$rs) {
  513. //echo "Row Deleted";
  514. }
  515. // Email Sending event
  516. function Email_Sending(&$Email, &$Args) {
  517. //var_dump($Email); var_dump($Args); exit();
  518. return TRUE;
  519. }
  520. }
  521. ?>