Code Duplication    Length = 47-47 lines in 2 locations

app/Controller/AdvancedSearchController.php 2 locations

@@ 525-571 (lines=47) @@
522
				$table = $parts[1] == 'HUSB' ? 'f_n' : 'm_n';
523
				// NAME:*
524
				switch ($parts[3]) {
525
				case 'GIVN':
526
					switch ($parts[4]) {
527
					case 'EXACT':
528
						$sql .= " AND {$table}.n_givn=?";
529
						$bind[] = $value;
530
						break;
531
					case 'BEGINS':
532
						$sql .= " AND {$table}.n_givn LIKE CONCAT(?, '%')";
533
						$bind[] = $value;
534
						break;
535
					case 'CONTAINS':
536
						$sql .= " AND {$table}.n_givn LIKE CONCAT('%', ?, '%')";
537
						$bind[] = $value;
538
						break;
539
					case 'SDX_STD':
540
						$sdx = Soundex::russell($value);
541
						if ($sdx !== null) {
542
							$sdx = explode(':', $sdx);
543
							foreach ($sdx as $k => $v) {
544
								$sdx[$k] = "{$table}.n_soundex_givn_std LIKE CONCAT('%', ?, '%')";
545
								$bind[]  = $v;
546
							}
547
							$sql .= ' AND (' . implode(' OR ', $sdx) . ')';
548
						} else {
549
							// No phonetic content? Use a substring match
550
							$sql .= " AND {$table}.n_givn = LIKE CONCAT('%', ?, '%')";
551
							$bind[] = $value;
552
						}
553
						break;
554
					case 'SDX': // SDX uses DM by default.
555
					case 'SDX_DM':
556
						$sdx = Soundex::daitchMokotoff($value);
557
						if ($sdx !== null) {
558
							$sdx = explode(':', $sdx);
559
							foreach ($sdx as $k => $v) {
560
								$sdx[$k] = "{$table}.n_soundex_givn_dm LIKE CONCAT('%', ?, '%')";
561
								$bind[]  = $v;
562
							}
563
							$sql .= ' AND (' . implode(' OR ', $sdx) . ')';
564
							break;
565
						} else {
566
							// No phonetic content? Use a substring match
567
							$sql .= " AND {$table}.n_givn = LIKE CONCAT('%', ?, '%')";
568
							$bind[] = $value;
569
						}
570
					}
571
					break;
572
				case 'SURN':
573
					switch ($parts[4]) {
574
					case 'EXACT':
@@ 572-618 (lines=47) @@
569
						}
570
					}
571
					break;
572
				case 'SURN':
573
					switch ($parts[4]) {
574
					case 'EXACT':
575
						$sql .= " AND {$table}.n_surname=?";
576
						$bind[] = $value;
577
						break;
578
					case 'BEGINS':
579
						$sql .= " AND {$table}.n_surname LIKE CONCAT(?, '%')";
580
						$bind[] = $value;
581
						break;
582
					case 'CONTAINS':
583
						$sql .= " AND {$table}.n_surname LIKE CONCAT('%', ?, '%')";
584
						$bind[] = $value;
585
						break;
586
					case 'SDX_STD':
587
						$sdx = Soundex::russell($value);
588
						if ($sdx !== null) {
589
							$sdx = explode(':', $sdx);
590
							foreach ($sdx as $k => $v) {
591
								$sdx[$k] = "{$table}.n_soundex_surn_std LIKE CONCAT('%', ?, '%')";
592
								$bind[]  = $v;
593
							}
594
							$sql .= ' AND (' . implode(' OR ', $sdx) . ')';
595
						} else {
596
							// No phonetic content? Use a substring match
597
							$sql .= " AND {$table}.n_surn = LIKE CONCAT('%', ?, '%')";
598
							$bind[] = $value;
599
						}
600
						break;
601
					case 'SDX': // SDX uses DM by default.
602
					case 'SDX_DM':
603
						$sdx = Soundex::daitchMokotoff($value);
604
						if ($sdx !== null) {
605
							$sdx = explode(':', $sdx);
606
							foreach ($sdx as $k => $v) {
607
								$sdx[$k] = "{$table}.n_soundex_surn_dm LIKE CONCAT('%', ?, '%')";
608
								$bind[]  = $v;
609
							}
610
							$sql .= ' AND (' . implode(' OR ', $sdx) . ')';
611
						} else {
612
							// No phonetic content? Use a substring match
613
							$sql .= " AND {$table}.n_surn = LIKE CONCAT('%', ?, '%')";
614
							$bind[] = $value;
615
						}
616
						break;
617
					}
618
					break;
619
				}
620
			} elseif ($parts[0] === 'FAMS') {
621
				// e.g. searches for occupation, religion, note, etc.