Merge remote-tracking branch 'upstream/4.4' into 4.4-4.5-2014-09-08-20-42-29
[civicrm-core.git] / tests / phpunit / CRM / Group / Page / AjaxTest.php
index 50ae334f1eaf93440cd6d9689ffa469d94b36d5b..257afdec4dcfb492aa785d26ec9cedd7507dcd25 100644 (file)
@@ -1,5 +1,9 @@
 <?php
 require_once 'CiviTest/CiviUnitTestCase.php';
+
+/**
+ * Class CRM_Group_Page_AjaxTest
+ */
 class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   /**
    * Permissioned group is used both as an active group the contact can see and as a group that allows
@@ -15,6 +19,11 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
 
   protected $hookClass;
 
+  protected $_params = array();
+
+  /**
+   * @return array
+   */
   function get_info() {
     return array(
       'name' => 'Contact BAOs',
@@ -51,12 +60,31 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   }
 
   /**
-   * retrieve groups as 'view all contacts'
+   * @param $permission
    */
-  function testGroupListViewAllContacts() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
+  function setPermissionAndRequest($permission) {
+    CRM_Core_Config::singleton()->userPermissionClass->permissions = array($permission);
+    CRM_Contact_BAO_Group::getPermissionClause(TRUE);
+    global $_REQUEST;
+    $_REQUEST = $this->_params;
+  }
+
+  /**
+   * @param $permission
+   * @param $hook
+   */
+  function setHookAndRequest($permission, $hook) {
+    CRM_Core_Config::singleton()->userPermissionClass->permissions = array($permission);
+    $this->hookClass->setHook('civicrm_aclGroup', array($this, $hook));
+    CRM_Contact_BAO_Group::getPermissionClause(TRUE);
     global $_REQUEST;
     $_REQUEST = $this->_params;
+  }
+  /**
+   * retrieve groups as 'view all contacts'
+   */
+  function testGroupListViewAllContacts() {
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, $total);
     $this->assertEquals('pick-me-active', $groups[2]['group_name']);
@@ -69,10 +97,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * (if you do set default it is enabled only)
    */
   function testGroupListViewAllContactsFoundTitle() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'p';
+    $this->_params['title'] = 'p';
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, $total);
     $this->assertEquals('pick-me-active', $groups[2]['group_name']);
@@ -83,10 +109,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListViewAllContactsNotFoundTitle() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'z';
+    $this->_params['title'] = 'z';
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, $total);
   }
@@ -94,9 +118,7 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'edit all contacts'
    */
   function testGroupListEditAllContacts() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
+    $this->setPermissionAndRequest('edit all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, $total);
     $this->assertEquals('pick-me-active', $groups[2]['group_name']);
@@ -107,10 +129,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListViewAllContactsEnabled() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 1;
+    $this->_params['status'] = 1;
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, $total);
     $this->assertEquals('pick-me-active', $groups[2]['group_name']);
@@ -121,10 +141,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListViewAllContactsDisabled() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
+    $this->_params['status'] = 2;
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, $total);
     $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
@@ -135,11 +153,9 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListViewAllContactsDisabledNotFoundTitle() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
-    $_REQUEST['title'] = 'n';
+    $this->_params['status'] = 2;
+    $this->_params['title'] = 'n';
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, $total);
     $this->assertEquals('not-me-disabled', $groups[3]['group_name']);
@@ -149,11 +165,9 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListViewAllContactsDisabledFoundTitle() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
-    $_REQUEST['title'] = 'p';
+    $this->_params['status'] = 2;
+    $this->_params['title'] = 'p';
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, $total);
     $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
@@ -163,10 +177,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListViewAllContactsAll() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 3;
+    $this->_params['status'] = 3;
+    $this->setPermissionAndRequest('view all contacts');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(4, $total);
     $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
@@ -180,9 +192,9 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListAccessCiviCRM() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
+    $this->setPermissionAndRequest('access CiviCRM');
+    $permissionClause = CRM_Contact_BAO_Group::getPermissionClause(TRUE);
+    $this->assertEquals('1 = 0', $permissionClause);
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups));
     $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
@@ -191,10 +203,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListAccessCiviCRMEnabled() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 1;
+    $this->_params['status'] = 1;
+    $this->setPermissionAndRequest('access CiviCRM');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups));
     $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
@@ -203,10 +213,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListAccessCiviCRMDisabled() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
+    $this->_params['status'] = 2;
+    $this->setPermissionAndRequest('access CiviCRM');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups));
     $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
@@ -216,10 +224,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListAccessCiviCRMAll() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
+    $this->_params['status'] = 2;
+    $this->setPermissionAndRequest('access CiviCRM');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups));
     $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
@@ -229,10 +235,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListAccessCiviCRMFound() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'p';
+    $this->_params['title'] = 'p';
+    $this->setPermissionAndRequest('access CiviCRM');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups));
     $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
@@ -242,10 +246,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * retrieve groups as 'view all contacts'
    */
   function testGroupListAccessCiviCRMNotFound() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'z';
+    $this->_params['title'] = 'z';
+    $this->setPermissionAndRequest('access CiviCRM');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups));
     $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
@@ -253,8 +255,6 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
 
   function testTraditionalACL () {
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -262,20 +262,16 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   }
 
   function testTraditionalACLNotFoundTitle () {
+    $this->_params['title'] = 'n';
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'n';
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(0, $total, 'Total needs to be set correctly');
   }
 
   function testTraditionalACLFoundTitle () {
+    $this->_params['title'] = 'p';
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'p';
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(2, $total, 'Total needs to be set correctly');
@@ -284,10 +280,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   }
 
   function testTraditionalACLDisabled () {
+    $this->_params['status'] = 2;
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -295,11 +289,9 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   }
 
   function testTraditionalACLDisabledFoundTitle () {
+    $this->_params['status'] = 2;
+    $this->_params['title'] = 'p';
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
-    $_REQUEST['title'] = 'p';
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -307,21 +299,17 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   }
 
   function testTraditionalACLDisabledNotFoundTitle () {
+    $this->_params['status'] = 2;
+    $this->_params['title'] = 'n';
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
-    $_REQUEST['title'] = 'n';
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(0, $total, 'Total needs to be set correctly');
   }
 
   function testTraditionalACLEnabled () {
+    $this->_params['status'] = 1;
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 1;
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -329,10 +317,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   }
 
   function testTraditionalACLAll () {
+    $this->_params['status'] = 3;
     $this->setupACL();
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 3;
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(2, $total, 'Total needs to be set correctly');
@@ -344,11 +330,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookDisabled() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
+    $this->_params['status'] = 2;
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -359,12 +342,9 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookDisabledFound() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
-    $_REQUEST['title'] = 'p';
+    $this->_params['status'] = 2;
+    $this->_params['title'] = 'p';
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -375,12 +355,9 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookDisabledNotFound() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 2;
-    $_REQUEST['title'] = 'n';
+    $this->_params['status'] = 2;
+    $this->_params['title'] = 'n';
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(0, $total, 'Total needs to be set correctly');
@@ -391,10 +368,7 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHook() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -405,11 +379,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookTitleNotFound() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'n';
+    $this->_params['title'] = 'n';
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(0, $total, 'Total needs to be set correctly');
     $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
@@ -419,11 +390,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookTitleFound() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['title'] = 'p';
+    $this->_params['title'] = 'p';
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(2, $total, 'Total needs to be set correctly');
@@ -435,11 +403,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookAll() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 3;
+    $this->_params['status'] = 3;
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(2, $total, 'Total needs to be set correctly');
@@ -451,11 +416,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
    * ACL Group hook
    */
   function testGroupListAclGroupHookEnabled() {
-    CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM');
-    $this->hookClass->setHook('civicrm_aclGroup', array($this, 'hook_civicrm_aclGroup'));
-    global $_REQUEST;
-    $_REQUEST = $this->_params;
-    $_REQUEST['status'] = 1;
+    $this->_params['status'] = 1;
+    $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
     list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
     $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
     $this->assertEquals(1, $total, 'Total needs to be set correctly');
@@ -472,7 +434,7 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
   * @param array $currentGroups
   */
   function hook_civicrm_aclGroup($type, $contactID, $tableName, &$allGroups, &$currentGroups) {
-    //dont use api - you will get a loop
+    //don't use api - you will get a loop
     $sql = " SELECT * FROM civicrm_group WHERE name LIKE '%pick%'";
     $groups = array();
     $dao = CRM_Core_DAO::executeQuery($sql);