CRM-20304 - Add option to alphabetize option values
authoryashodha <yashodha.chaku@webaccessglobal.com>
Mon, 20 Mar 2017 04:09:13 +0000 (09:39 +0530)
committerColeman Watts <coleman@civicrm.org>
Mon, 9 Oct 2017 03:32:13 +0000 (23:32 -0400)
CRM/Custom/Page/Option.php
templates/CRM/Custom/Page/Option.tpl

index 8fe3a8841a6ec481bc48ad73ef3915bf17415aa8..0befb9988e284cbfd5175678e41c357b0286a406 100644 (file)
@@ -108,6 +108,47 @@ class CRM_Custom_Page_Option extends CRM_Core_Page {
     return self::$_actionLinks;
   }
 
+  /**
+   * Alphabetize multiple option values
+   *
+   * @return void
+   */
+  public function alphabetize() {
+    $optionGroupID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField',
+      $this->_fid,
+      'option_group_id'
+    );
+    $query = "
+SELECT id, label
+FROM   civicrm_option_value
+WHERE  option_group_id = %1";
+    $params = array(
+      1 => array($optionGroupID, 'Integer'),
+    );
+    $dao = CRM_Core_DAO::executeQuery($query, $params);
+    $optionValue = array();
+    while ($dao->fetch()) {
+      $optionValue[$dao->id] = $dao->label;
+    }
+    asort($optionValue, SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL);
+
+    $i = 1;
+    foreach ($optionValue as $key => $_) {
+      $clause[] = "WHEN $key THEN $i";
+      $i++;
+    }
+
+    $when = implode(' ', $clause);
+    $sql = "
+UPDATE civicrm_option_value
+SET weight = CASE id
+$when
+END
+WHERE option_group_id = %1";
+
+    $dao = CRM_Core_DAO::executeQuery($sql, $params);
+  }
+
   /**
    * Browse all custom group fields.
    *
@@ -232,6 +273,9 @@ WHERE  option_group_id = %1";
       // no browse for edit/update/view
       $this->edit($action);
     }
+    else if ($action & CRM_Core_Action::MAP) {
+      $this->alphabetize();
+    }
     else {
       $this->browse();
     }
index 7cd373f67dc09d3196c944eff3258746ee4055bd..68463ef816c5bb49a4c9d4fc394bfc071ddc2b04 100644 (file)
       {/literal}
 
       <div class="action-link">
+          {crmButton q="reset=1&action=map&fid=$fid&gid=$gid" class="action-item" icon="sort-alpha-asc"}{ts}Alphabetize Options{/ts}{/crmButton}
           {crmButton q="reset=1&action=add&fid=$fid&gid=$gid" class="action-item" icon="plus-circle"}{ts}Add Option{/ts}{/crmButton}
           {crmButton p="civicrm/admin/custom/group/field" q="reset=1&action=browse&gid=$gid" class="action-item cancel" icon="times"}{ts}Done{/ts}{/crmButton}
       </div>