⌈⌋ branch:  freshcode


Hex Artifact Content

Artifact 52c237856d38d73d352d14e0fba8ae6ca8771f65:

  • File page_search.php — part of check-in [5bda659526] at 2015-03-24 20:07:22 on branch trunk — Fix spacing to header block. Correct nowrap issue for title/version/datetime in .project headers (Firefox). (user: mario size: 2845)

0000: 3c 3f 70 68 70 0a 2f 2a 2a 0a 20 2a 20 74 79 70  <?php./**. * typ
0010: 65 3a 20 70 61 67 65 0a 20 2a 20 74 69 74 6c 65  e: page. * title
0020: 3a 20 53 65 61 72 63 68 20 66 75 6e 63 74 69 6f  : Search functio
0030: 6e 0a 20 2a 20 64 65 73 63 72 69 70 74 69 6f 6e  n. * description
0040: 3a 20 53 63 61 6e 73 20 70 61 63 6b 61 67 65 73  : Scans packages
0050: 20 66 6f 72 20 64 65 73 63 72 69 70 74 69 6f 6e   for description
0060: 2c 20 74 61 67 73 2c 20 6c 69 63 65 6e 73 65 2c  , tags, license,
0070: 20 75 73 65 72 20 6e 61 6d 65 73 0a 20 2a 20 6c   user names. * l
0080: 69 63 65 6e 73 65 3a 20 41 47 50 4c 0a 20 2a 20  icense: AGPL. * 
0090: 76 65 72 73 69 6f 6e 20 30 2e 32 2e 32 0a 20 2a  version 0.2.2. *
00a0: 20 0a 20 2a 20 42 75 69 6c 64 73 20 61 20 73 65   . * Builds a se
00b0: 61 72 63 68 20 71 75 65 72 79 20 66 72 6f 6d 20  arch query from 
00c0: 6d 75 6c 74 69 70 6c 65 20 69 6e 70 75 74 20 70  multiple input p
00d0: 61 72 61 6d 73 3a 0a 20 2a 20 20 20 e2 86 92 20  arams:. *   ... 
00e0: 3f 75 73 65 72 3d 0a 20 2a 20 20 20 e2 86 92 20  ?user=. *   ... 
00f0: 3f 74 61 67 73 5b 5d 3d 20 6f 72 20 3f 74 61 67  ?tags[]= or ?tag
0100: 3d 0a 20 2a 20 20 20 e2 86 92 20 3f 74 72 6f 76  =. *   ... ?trov
0110: 65 5b 5d 3d 20 66 6f 72 20 41 4e 44 65 64 20 74  e[]= for ANDed t
0120: 61 67 73 0a 20 2a 20 20 20 e2 86 92 20 3f 6c 69  ags. *   ... ?li
0130: 63 65 6e 73 65 3d 0a 20 2a 20 20 20 e2 86 92 20  cense=. *   ... 
0140: 3f 71 3d 20 66 6f 72 20 61 63 74 75 61 6c 20 74  ?q= for actual t
0150: 65 78 74 20 73 65 61 72 63 68 0a 20 2a 0a 20 2a  ext search. *. *
0160: 2f 0a 0a 0a 0a 24 68 65 61 64 65 72 5f 61 64 64  /....$header_add
0170: 20 3d 20 27 3c 6d 65 74 61 20 72 6f 62 6f 74 73   = '<meta robots
0180: 3d 6e 6f 69 6e 64 65 78 2c 6e 6f 66 6f 6c 6c 6f  =noindex,nofollo
0190: 77 3e 27 3b 0a 69 6e 63 6c 75 64 65 28 22 74 65  w>';.include("te
01a0: 6d 70 6c 61 74 65 2f 68 65 61 64 65 72 2e 70 68  mplate/header.ph
01b0: 70 22 29 3b 0a 3f 3e 20 3c 73 65 63 74 69 6f 6e  p");.?> <section
01c0: 20 69 64 3d 6d 61 69 6e 20 63 6c 61 73 73 3d 63   id=main class=c
01d0: 6f 6e 74 61 69 6e 65 72 2d 77 69 64 74 68 3e 3c  ontainer-width><
01e0: 64 69 76 20 73 74 79 6c 65 3d 22 77 69 64 74 68  div style="width
01f0: 3a 20 37 30 25 3b 20 6d 61 72 67 69 6e 2d 74 6f  : 70%; margin-to
0200: 70 3a 33 30 70 74 3b 22 3e 20 3c 3f 70 68 70 0a  p:30pt;"> <?php.
0210: 0a 0a 2f 2f 20 44 69 73 70 6c 61 79 20 66 6f 72  ..// Display for
0220: 6d 0a 69 66 20 28 24 5f 47 45 54 2d 3e 6e 6f 28  m.if ($_GET->no(
0230: 22 74 61 67 2c 74 61 67 73 2c 74 72 6f 76 65 2c  "tag,tags,trove,
0240: 75 73 65 72 2c 6c 69 63 65 6e 73 65 2c 71 22 29  user,license,q")
0250: 29 20 7b 0a 0a 20 20 20 20 69 6e 63 6c 75 64 65  ) {..    include
0260: 28 22 74 65 6d 70 6c 61 74 65 2f 73 65 61 72 63  ("template/searc
0270: 68 5f 66 6f 72 6d 2e 70 68 70 22 29 3b 0a 0a 7d  h_form.php");..}
0280: 0a 0a 2f 2f 20 41 63 74 75 61 6c 20 73 65 61 72  ..// Actual sear
0290: 63 68 20 72 65 71 75 65 73 74 0a 65 6c 73 65 20  ch request.else 
02a0: 7b 0a 0a 20 20 20 20 2f 2f 20 57 72 61 70 20 73  {..    // Wrap s
02b0: 65 61 72 63 68 20 70 61 72 61 6d 73 20 69 6e 74  earch params int
02c0: 6f 20 61 72 72 61 79 73 0a 20 20 20 20 24 74 61  o arrays.    $ta
02d0: 67 73 20 3d 20 61 72 72 61 79 5f 66 69 6c 74 65  gs = array_filte
02e0: 72 28 61 72 72 61 79 5f 6d 65 72 67 65 28 24 5f  r(array_merge($_
02f0: 47 45 54 2d 3e 61 72 72 61 79 2d 3e 77 6f 72 64  GET->array->word
0300: 73 5b 22 74 61 67 73 22 5d 2c 20 24 5f 47 45 54  s["tags"], $_GET
0310: 2d 3e 77 6f 72 64 73 2d 3e 70 5f 63 73 76 5b 22  ->words->p_csv["
0320: 74 61 67 22 5d 29 29 3b 0a 20 20 20 20 24 74 72  tag"]));.    $tr
0330: 6f 76 65 20 3d 20 24 5f 47 45 54 2d 3e 61 72 72  ove = $_GET->arr
0340: 61 79 2d 3e 77 6f 72 64 73 5b 22 74 72 6f 76 65  ay->words["trove
0350: 22 5d 20 61 6e 64 20 24 74 72 6f 76 65 20 3d 20  "] and $trove = 
0360: 5b 24 74 72 6f 76 65 2c 20 63 6f 75 6e 74 28 24  [$trove, count($
0370: 74 72 6f 76 65 29 5d 3b 0a 20 20 20 20 24 75 73  trove)];.    $us
0380: 65 72 20 3d 20 24 5f 47 45 54 2d 3e 77 6f 72 64  er = $_GET->word
0390: 73 5b 22 75 73 65 72 22 5d 20 61 6e 64 20 24 75  s["user"] and $u
03a0: 73 65 72 20 3d 20 5b 22 24 75 73 65 72 25 22 5d  ser = ["$user%"]
03b0: 3b 0a 20 20 20 20 24 6c 69 63 65 6e 73 65 20 3d  ;.    $license =
03c0: 20 24 5f 47 45 54 2d 3e 61 72 72 61 79 2d 3e 77   $_GET->array->w
03d0: 6f 72 64 73 5b 22 6c 69 63 65 6e 73 65 22 5d 20  ords["license"] 
03e0: 61 6e 64 20 24 6c 69 63 65 6e 73 65 20 3d 20 61  and $license = a
03f0: 72 72 61 79 5f 66 69 6c 74 65 72 28 24 6c 69 63  rray_filter($lic
0400: 65 6e 73 65 29 3b 0a 20 20 20 20 24 73 65 61 72  ense);.    $sear
0410: 63 68 20 3d 20 24 5f 47 45 54 2d 3e 74 65 78 74  ch = $_GET->text
0420: 5b 22 71 22 5d 20 61 6e 64 20 24 73 65 61 72 63  ["q"] and $searc
0430: 68 20 3d 20 5b 22 25 24 73 65 61 72 63 68 25 22  h = ["%$search%"
0440: 5d 3b 0a 20 20 20 20 2f 2f 20 70 72 69 6d 61 72  ];.    // primar
0450: 79 20 73 65 61 72 63 68 20 74 65 72 6d 20 28 66  y search term (f
0460: 6f 72 20 65 78 61 63 74 20 6d 61 74 63 68 65 73  or exact matches
0470: 29 0a 20 20 20 20 24 70 72 69 6d 61 72 79 20 3d  ).    $primary =
0480: 20 28 63 6f 75 6e 74 28 24 74 61 67 73 29 20 3d   (count($tags) =
0490: 3d 20 31 29 20 3f 20 63 75 72 72 65 6e 74 28 24  = 1) ? current($
04a0: 74 61 67 73 29 20 3a 20 28 24 73 65 61 72 63 68  tags) : ($search
04b0: 20 3f 20 24 5f 47 45 54 2d 3e 74 65 78 74 5b 22   ? $_GET->text["
04c0: 71 22 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 0a 20 20  q"] : NULL);..  
04d0: 20 20 2f 2f 20 52 75 6e 20 53 51 4c 0a 23 20 20    // Run SQL.#  
04e0: 20 64 62 28 29 2d 3e 74 65 73 74 20 3d 20 31 3b   db()->test = 1;
04f0: 0a 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 64  .    $result = d
0500: 62 28 22 0a 20 20 20 20 20 20 20 20 53 45 4c 45  b(".        SELE
0510: 43 54 20 72 65 6c 65 61 73 65 2e 6e 61 6d 65 20  CT release.name 
0520: 41 53 20 6e 61 6d 65 2c 20 74 69 74 6c 65 2c 20  AS name, title, 
0530: 53 55 42 53 54 52 28 64 65 73 63 72 69 70 74 69  SUBSTR(descripti
0540: 6f 6e 2c 31 2c 35 30 30 29 20 41 53 20 64 65 73  on,1,500) AS des
0550: 63 72 69 70 74 69 6f 6e 2c 0a 20 20 20 20 20 20  cription,.      
0560: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
0570: 2c 20 69 6d 61 67 65 2c 20 68 6f 6d 65 70 61 67  , image, homepag
0580: 65 2c 20 64 6f 77 6e 6c 6f 61 64 2c 20 73 75 62  e, download, sub
0590: 6d 69 74 74 65 72 2c 20 73 75 62 6d 69 74 74 65  mitter, submitte
05a0: 72 5f 69 6d 61 67 65 2c 0a 20 20 20 20 20 20 20  r_image,.       
05b0: 20 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 2e          release.
05c0: 74 61 67 73 20 41 53 20 74 61 67 73 2c 20 73 63  tags AS tags, sc
05d0: 6f 70 65 2c 20 63 68 61 6e 67 65 73 2c 0a 20 20  ope, changes,.  
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 63               lic
05f0: 65 6e 73 65 2c 20 73 74 61 74 65 2c 20 74 5f 70  ense, state, t_p
0600: 75 62 6c 69 73 68 65 64 2c 20 66 6c 61 67 2c 20  ublished, flag, 
0610: 68 69 64 64 65 6e 2c 20 64 65 6c 65 74 65 64 2c  hidden, deleted,
0620: 20 4d 41 58 28 74 5f 63 68 61 6e 67 65 64 29 0a   MAX(t_changed).
0630: 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 72            FROM r
0640: 65 6c 65 61 73 65 0a 20 20 20 20 20 20 20 20 20  elease.         
0650: 57 48 45 52 45 20 4e 4f 54 20 64 65 6c 65 74 65  WHERE NOT delete
0660: 64 20 41 4e 44 20 66 6c 61 67 20 3c 20 35 0a 20  d AND flag < 5. 
0670: 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 72 65       GROUP BY re
0680: 6c 65 61 73 65 2e 6e 61 6d 65 0a 20 20 20 20 20  lease.name.     
0690: 20 20 20 48 41 56 49 4e 47 20 31 3d 31 0a 20 20     HAVING 1=1.  
06a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 2a 20               :* 
06b0: 3a 2a 20 20 3a 2a 20 20 3a 2a 20 20 3a 2a 20 20  :*  :*  :*  :*  
06c0: 3a 2a 20 20 3a 2a 0a 20 20 20 20 20 20 4f 52 44  :*  :*.      ORD
06d0: 45 52 20 42 59 20 74 5f 70 75 62 6c 69 73 68 65  ER BY t_publishe
06e0: 64 20 44 45 53 43 2c 20 74 5f 63 68 61 6e 67 65  d DESC, t_change
06f0: 64 20 44 45 53 43 0a 20 20 20 20 20 20 20 20 20  d DESC.         
0700: 4c 49 4d 49 54 20 31 30 30 20 22 2c 0a 20 20 20  LIMIT 100 ",.   
0710: 20 20 20 20 20 20 20 20 20 2f 2f 20 65 78 70 72           // expr
0720: 20 3a 2a 20 70 6c 61 63 65 68 6f 6c 64 65 72 73   :* placeholders
0730: 20 6f 6e 6c 79 20 69 6e 74 65 72 70 6f 6c 61 74   only interpolat
0740: 65 20 77 68 65 6e 20 69 6e 6e 65 72 20 61 72 72  e when inner arr
0750: 61 79 20 63 6f 6e 74 61 69 6e 73 20 70 61 72 61  ay contains para
0760: 6d 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ms.            [
0770: 22 20 41 4e 44 20 64 65 73 63 72 69 70 74 69 6f  " AND descriptio
0780: 6e 20 4c 49 4b 45 20 3f 20 22 2c 20 20 24 73 65  n LIKE ? ",  $se
0790: 61 72 63 68 5d 2c 0a 20 20 20 20 20 20 20 20 20  arch],.         
07a0: 20 20 20 5b 22 20 41 4e 44 20 73 75 62 6d 69 74     [" AND submit
07b0: 74 65 72 20 4c 49 4b 45 20 3f 20 22 2c 20 24 75  ter LIKE ? ", $u
07c0: 73 65 72 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ser],.          
07d0: 20 20 5b 22 20 41 4e 44 20 6c 69 63 65 6e 73 65    [" AND license
07e0: 20 49 4e 20 28 3f 3f 29 20 22 2c 20 20 20 24 6c   IN (??) ",   $l
07f0: 69 63 65 6e 73 65 5d 2c 0a 20 20 20 20 20 20 20  icense],.       
0800: 20 20 20 20 20 5b 22 20 41 4e 44 20 6e 61 6d 65       [" AND name
0810: 20 49 4e 20 28 53 45 4c 45 43 54 20 6e 61 6d 65   IN (SELECT name
0820: 20 46 52 4f 4d 20 74 61 67 73 20 57 48 45 52 45   FROM tags WHERE
0830: 20 74 61 67 20 49 4e 20 28 3f 3f 29 29 20 22 2c   tag IN (??)) ",
0840: 20 24 74 61 67 73 5d 2c 0a 20 20 20 20 20 20 20   $tags],.       
0850: 20 20 20 20 20 5b 22 20 41 4e 44 20 6e 61 6d 65       [" AND name
0860: 20 49 4e 20 28 53 45 4c 45 43 54 20 6e 61 6d 65   IN (SELECT name
0870: 20 46 52 4f 4d 20 74 61 67 73 20 57 48 45 52 45   FROM tags WHERE
0880: 20 74 61 67 20 49 4e 20 28 3f 3f 29 0a 20 20 20   tag IN (??).   
0890: 20 20 20 20 20 20 20 20 20 20 20 20 47 52 4f 55              GROU
08a0: 50 20 42 59 20 6e 61 6d 65 20 48 41 56 49 4e 47  P BY name HAVING
08b0: 20 43 4f 55 4e 54 28 74 61 67 29 20 3d 20 31 2a   COUNT(tag) = 1*
08c0: 3f 29 20 22 2c 20 24 74 72 6f 76 65 5d 2c 0a 20  ?) ", $trove],. 
08d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 70 72             // pr
08e0: 6f 6a 65 63 74 20 6e 61 6d 65 20 3d 3d 20 74 61  oject name == ta
08f0: 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  gs.            [
0900: 22 20 4f 52 20 6e 61 6d 65 20 4c 49 4b 45 20 3f  " OR name LIKE ?
0910: 20 22 2c 20 20 24 73 65 61 72 63 68 5d 2c 0a 20   ",  $search],. 
0920: 20 20 20 20 20 20 20 20 20 20 20 5b 22 20 4f 52             [" OR
0930: 20 6e 61 6d 65 20 49 4e 20 28 3f 3f 29 22 2c 20   name IN (??)", 
0940: 24 74 61 67 73 5d 0a 20 20 20 20 29 3b 0a 0a 0a  $tags].    );...
0950: 0a 20 20 20 20 2f 2f 20 53 68 6f 77 20 73 69 64  .    // Show sid
0960: 65 62 61 72 20 2b 20 6c 6f 6e 67 20 70 72 6f 6a  ebar + long proj
0970: 65 63 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a  ect description.
0980: 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 72 65      foreach ($re
0990: 73 75 6c 74 20 61 73 20 24 65 6e 74 72 79 29 20  sult as $entry) 
09a0: 7b 0a 20 20 20 20 20 20 20 20 70 72 65 70 61 72  {.        prepar
09b0: 65 5f 6f 75 74 70 75 74 28 24 65 6e 74 72 79 29  e_output($entry)
09c0: 3b 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20  ;.        .     
09d0: 20 20 20 2f 2f 20 73 68 6f 77 20 70 72 6f 6a 65     // show proje
09e0: 63 74 20 6c 69 73 74 69 6e 67 20 66 6f 72 20 65  ct listing for e
09f0: 78 61 63 74 20 6d 61 74 63 68 20 6f 72 20 73 65  xact match or se
0a00: 61 72 63 68 20 65 6e 74 72 79 0a 20 20 20 20 20  arch entry.     
0a10: 20 20 20 69 66 20 28 24 65 6e 74 72 79 5b 22 6e     if ($entry["n
0a20: 61 6d 65 22 5d 20 3d 3d 20 24 70 72 69 6d 61 72  ame"] == $primar
0a30: 79 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  y) {.           
0a40: 20 69 6e 63 6c 75 64 65 28 22 74 65 6d 70 6c 61   include("templa
0a50: 74 65 2f 69 6e 64 65 78 5f 70 72 6f 6a 65 63 74  te/index_project
0a60: 2e 70 68 70 22 29 3b 0a 20 20 20 20 20 20 20 20  .php");.        
0a70: 20 20 20 20 70 72 69 6e 74 20 22 3c 62 72 3e 22      print "<br>"
0a80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0a90: 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 20      else {.     
0aa0: 20 20 20 20 20 20 20 69 6e 63 6c 75 64 65 28 22         include("
0ab0: 74 65 6d 70 6c 61 74 65 2f 73 65 61 72 63 68 5f  template/search_
0ac0: 65 6e 74 72 79 2e 70 68 70 22 29 3b 0a 20 20 20  entry.php");.   
0ad0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 7d 0a       }.    }..}.
0ae0: 0a 0a 3f 3e 3c 2f 64 69 76 3e 3c 2f 73 65 63 74  ..?></div></sect
0af0: 69 6f 6e 3e 3c 3f 70 68 70 0a 69 6e 63 6c 75 64  ion><?php.includ
0b00: 65 28 22 74 65 6d 70 6c 61 74 65 2f 62 6f 74 74  e("template/bott
0b10: 6f 6d 2e 70 68 70 22 29 3b 0a 0a 3f 3e           om.php");..?>