Allow searching in notes. 2018-09-03
authorIain Patterson <me@iain.cx>
Mon, 3 Sep 2018 09:40:14 +0000 (05:40 -0400)
committerIain Patterson <me@iain.cx>
Mon, 3 Sep 2018 09:40:14 +0000 (05:40 -0400)
lib/contact.php

index 00096d9..e9c7f4b 100644 (file)
     }
   }
   else if ($_POST['search_contact']) {
-    header(sprintf("Location: http%s://%s/%s/search/%s%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, $_POST['search_by_phone'] ? "phone/" : "", urlencode($_POST['search_contact'])));
+    $search_options = array();
+    if ($_POST['search_by_notes']) array_push($search_options, 'notes');
+    if ($_POST['search_by_phone']) array_push($search_options, 'phone');
+    if (count($search_options)) $search_param = sprintf("%s/", implode('+', $search_options));
+    else $search_param = '';
+    header(sprintf("Location: http%s://%s/%s/search/%s%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, $search_param, urlencode($_POST['search_contact'])));
     exit;
   }
   else if ($_POST['show_in_area']) {
     else echo " none";
   }
 
-  function search_contacts($search, $phone = false) {
+  function search_contacts($search, $notes = false, $phone = false) {
     list($first_page, $per_page) = pagination();
     $q = new ContactQuery;
     if ($phone) $q->filterByTelephone1("%$search%")->_or()->filterByTelephone2("%$search%");
     else $q->filterByDisplayname("%$search%");
+    if ($notes) $q->_or()->filterByNotes("%$search%");
     $contacts = $q->orderByForename()->orderBySurname()->orderById('desc')->paginate($first_page, $per_page);
-    echo "<p>Contacts matching " . ($phone ? "telephone " : "") . "'" . htmlspecialchars($search) . "':";
+    echo "<p>Contacts matching " . ($notes ? "notes " : "") . ($phone ? "telephone " : "") . "'" . htmlspecialchars($search) . "':";
     if (count($contacts)) {
       foreach ($contacts as $contact) show_contact_summary($contact);
       show_pagination($contacts);
     input("search_contact");
     echo "<input type=\"checkbox\" id=\"search_by_phone\" name=\"search_by_phone\">";
     echo "<label for=\"search_by_phone\">by telephone</label>\n";
+    echo "<input type=\"checkbox\" id=\"search_by_notes\" name=\"search_by_notes\">";
+    echo "<label for=\"search_by_notes\">by notes</label>\n";
     echo "<input type=\"submit\" value=\"Search\">\n";
     echo "</p>\n";
   }
       }
     }
     else if ($parameters[0] == "search") {
-      if ($parameters[1] == "phone") search_contacts(urldecode($parameters[2]), true);
+      $available_search_options = array('notes', 'phone');
+      $search_options = explode('+', $parameters[1]);
+      if (count(array_intersect($available_search_options, $search_options)) == count($search_options)) {
+        $notes = in_array("notes", $search_options);
+        $phone = in_array("phone", $search_options);
+        search_contacts(urldecode($parameters[2]), $notes, $phone);
+      }
       else search_contacts(urldecode($parameters[1]));
     }
   }