1 |
<?php |
2 |
/********************************************************** |
3 |
Function: newResPageHeader |
4 |
Author: Paul Bramscher |
5 |
Last Modified: 06.25.2003 |
6 |
*********************************************************** |
7 |
Draws the HTML header of the enter new resource page at the |
8 |
point of checking for possible matches. The header is |
9 |
pulled out separately here, since we may not always want |
10 |
it to display. In the event of no fuzzy (or exact) |
11 |
matches we redirect the user to formResource and, hence, |
12 |
cannot output this header. |
13 |
**********************************************************/ |
14 |
function newResPageHeader() { |
15 |
|
16 |
// Load globals |
17 |
include ("global_vars.php"); |
18 |
|
19 |
// HTML header |
20 |
printf("<HTML>\n"); |
21 |
printf("<HEAD>\n"); |
22 |
printf("<title>LibData: Enter a New Resource</title>\n"); |
23 |
printf("<link rel=\"stylesheet\" href=\"%s\" type=\"text/css\">\n", $GLOBAL_ADMIN_CSS); |
24 |
printf("</HEAD>\n"); |
25 |
|
26 |
// Page header |
27 |
include($GLOBAL_ADMIN_HEADER); |
28 |
printf("<center>\n"); |
29 |
printf("<h3>Adding New Resource..</h3>\n"); |
30 |
|
31 |
} |
32 |
|
33 |
|
34 |
/********************************************************** |
35 |
Function: resTitlePat |
36 |
Original Author: Paul Bramscher <brams006@tc.umn.edu> |
37 |
Last Modified: 03.19.2003 |
38 |
*********************************************************** |
39 |
Comments: |
40 |
This function takes $string as input and builds eight |
41 |
permutations of it into an SQL query against resource |
42 |
titles. These permutations are meant as possible matches. |
43 |
This is not an exact science, and this algorithm could |
44 |
certainly be further tweaked. |
45 |
|
46 |
Pass definitions: |
47 |
|
48 |
pass1 = left 50% of string, remainder wildcarded |
49 |
pass2 = middle 80%, both ends wildcarded |
50 |
pass3 = compacted without spaces |
51 |
pass4 = a/and/the articles removed |
52 |
pass5 = every other starting with 0 position |
53 |
pass6 = every other starting with 1 position |
54 |
pass7 = replacing 'ies' with 'y' |
55 |
pass8 = replacing 'y' with 'ies' |
56 |
**********************************************************/ |
57 |
function resTitlePat($con, $string) { |
58 |
|
59 |
// Save this for display purposes |
60 |
$title = $string; |
61 |
$title = stripslashes($string); |
62 |
|
63 |
// Clean up the string -- we must remove single quotes and slashes |
64 |
$string = ereg_replace("'","",$string); |
65 |
$string = stripslashes($string); |
66 |
|
67 |
// Initialize |
68 |
$pass1 = ""; |
69 |
$pass2 = ""; |
70 |
$pass3 = ""; |
71 |
$pass4 = ""; |
72 |
$pass5 = ""; |
73 |
$pass6 = ""; |
74 |
$pass7 = ""; |
75 |
$pass8 = ""; |
76 |
|
77 |
// String sizes. |
78 |
$length = strlen($string); |
79 |
$max_length = ceil($length * 2); |
80 |
|
81 |
// Permute #1: Match left 50% |
82 |
$left50_pos = floor($length * .5); |
83 |
$pass1 = substr($string, 0, $left50_pos); |
84 |
|
85 |
// Permute #2: Cut-out and float match middle 80% substring |
86 |
$left20_pos = floor($length * .2); |
87 |
$pass2 = substr($string, $left20_pos, $length - ($left20_pos * 2)); |
88 |
|
89 |
// Permute #3: Compacting, remove all whitespaces. |
90 |
$pass3 = $string; |
91 |
$pass3 = ereg_replace(" ","",$pass3); |
92 |
|
93 |
// Permute #4: Pulling out a/an/the articles |
94 |
$pass4 = $string; |
95 |
$pass4 = ereg_replace("the ","",$pass4); |
96 |
$pass4 = ereg_replace("a ","",$pass4); |
97 |
$pass4 = ereg_replace("an ","",$pass4); |
98 |
|
99 |
// Permute #5: Wildcard every other position, starting with 0 |
100 |
$pass5 = $string; |
101 |
for ($x = 0; $x < strlen($pass5); $x++) { |
102 |
|
103 |
if ($x % 2 == 0) $pass5[$x] = "_"; |
104 |
|
105 |
} |
106 |
|
107 |
// Permute #6: Wildcard every other position, starting with 1 |
108 |
$pass6 = $string; |
109 |
for ($x = 0; $x < strlen($pass6); $x++) { |
110 |
|
111 |
if ($x % 2 == 1) $pass6[$x] = "_"; |
112 |
|
113 |
} |
114 |
|
115 |
// Permute #7: Replacing 'ies' with 'y' |
116 |
$pass7 = $string; |
117 |
$pass7 = ereg_replace("ies","y", $pass7); |
118 |
|
119 |
// Permute #8: Replacing 'y' with 'ies' |
120 |
$pass8 = $string; |
121 |
$pass8 = ereg_replace("y","ies", $pass8); |
122 |
|
123 |
// Assemble the SQL |
124 |
$sql = "SELECT resource_id, title FROM resource WHERE (title LIKE '" |
125 |
. $pass1 |
126 |
. "%' OR title LIKE '%" |
127 |
. $pass2 |
128 |
. "%' OR title LIKE '%" |
129 |
. $pass3 |
130 |
. "%' OR title LIKE '%" |
131 |
. $pass4 |
132 |
. "%' OR title LIKE '%" |
133 |
. $pass5 |
134 |
. "%' OR title LIKE '%" |
135 |
. $pass6 |
136 |
. "%' OR title LIKE '%" |
137 |
. $pass7 |
138 |
. "%' OR title LIKE '%" |
139 |
. $pass8 |
140 |
. "%') AND (LENGTH(title) >= " |
141 |
. $left50_pos |
142 |
. " AND LENGTH(title) <= " |
143 |
. $max_length |
144 |
. ")"; |
145 |
|
146 |
// Debugging |
147 |
// printf("sql was: %s", $sql); |
148 |
|
149 |
$rs = mysql_query($sql, $con); |
150 |
$hits = mysql_num_rows($rs); |
151 |
if ($hits > 0) { |
152 |
|
153 |
// Draw page header |
154 |
newResPageHeader(); |
155 |
|
156 |
// Table |
157 |
printf("<table width = \"60%%\" border = \"3\" cellpadding =\"4\" class=\"backLight\">\n"); |
158 |
printf("<tr><td><br>\n"); |
159 |
printf("<strong>Messages:</strong><br>\n"); |
160 |
|
161 |
printf ("Possible duplicate resource titles found with title '%s'. Are you sure you want to continue?<br><br>\n", $title); |
162 |
while ($row = mysql_fetch_array ($rs)) { |
163 |
$title = $row["title"]; |
164 |
$resource_id = $row["resource_id"]; |
165 |
|
166 |
printf("<b>Resource ID:</b> %d ", $resource_id); |
167 |
printf("<b>Title:</b> %s<BR>", $title); |
168 |
|
169 |
} // this result set |
170 |
|
171 |
// Close things |
172 |
printf("<br><br>\n"); |
173 |
printf("</td></tr></table>\n"); |
174 |
printf("</center>\n"); |
175 |
|
176 |
} |
177 |
|
178 |
|
179 |
return $hits; |
180 |
|
181 |
} // end of php function |
182 |
?> |