diff options
author | Andreas Unterkircher <unki@netshadow.at> | 2007-07-14 12:06:42 +0000 |
---|---|---|
committer | Andreas Unterkircher <unki@netshadow.at> | 2007-07-14 12:06:42 +0000 |
commit | 4a0b6f6114f19cebd796b3b1c6e5253edc3267c3 (patch) | |
tree | 6a42f880704f41d632c473c8d48545680a77bd58 | |
parent | 856af471b7a6025f1438f09ff0d701dd78fd99ea (diff) |
issue24, first trial of date search is now included
git-svn-id: file:///var/lib/svn/phpfspot/trunk@198 fa6a889d-dae6-447d-9e79-4ba9a3039384
-rw-r--r-- | phpfspot.class.php | 163 | ||||
-rw-r--r-- | phpfspot.js | 71 | ||||
-rw-r--r-- | rpc.php | 13 | ||||
-rw-r--r-- | stylesheet.css | 28 | ||||
-rw-r--r-- | templates/calendar.tpl | 28 | ||||
-rw-r--r-- | templates/index.tpl | 2 | ||||
-rw-r--r-- | templates/search.tpl | 7 |
7 files changed, 271 insertions, 41 deletions
diff --git a/phpfspot.class.php b/phpfspot.class.php index 8fe0f77..31a3952 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -54,8 +54,8 @@ class PHPFSPOT { $this->tmpl->assign('searchfor', $_SESSION['searchfor']); $this->tmpl->assign('page_title', $this->cfg->page_title); $this->tmpl->assign('current_condition', $_SESSION['tag_condition']); - $this->tmpl->assign('from_date', $this->get_calendar()); - $this->tmpl->assign('to_date', $this->get_calendar()); + $this->tmpl->assign('from_date', $this->get_calendar('from')); + $this->tmpl->assign('to_date', $this->get_calendar('to')); switch($_GET['mode']) { case 'showpi': @@ -339,25 +339,37 @@ class PHPFSPOT { public function resetTags() { - unset($_SESSION['selected_tags']); + if(isset($_SESSION['selected_tags'])) + unset($_SESSION['selected_tags']); } // resetTags() public function resetPhotoView() { - unset($_SESSION['current_photo']); + if(isset($_SESSION['current_photo'])) + unset($_SESSION['current_photo']); } // resetPhotoView(); public function resetTagSearch() { - unset($_SESSION['searchfor']); + if(isset($_SESSION['searchfor'])) + unset($_SESSION['searchfor']); } // resetTagSearch() + public function resetDateSearch() + { + if(isset($_SESSION['from_date'])) + unset($_SESSION['from_date']); + if(isset($_SESSION['to_date'])) + unset($_SESSION['to_date']); + + } // resetDateSearch(); + public function getPhotoSelection() { - $tagged_photos = Array(); + $matched_photos = Array(); /* return a search result */ if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') { @@ -372,9 +384,9 @@ class PHPFSPOT { ORDER BY p.time ASC "); while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); + array_push($matched_photos, $row['photo_id']); } - return $tagged_photos; + return $matched_photos; } /* return according the selected tags */ @@ -432,11 +444,31 @@ class PHPFSPOT { } while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); + array_push($matched_photos, $row['photo_id']); } - return $tagged_photos; + return $matched_photos; } + if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) { + $from_date = strtotime($_SESSION['from_date']); + $to_date = strtotime($_SESSION['to_date']); + $result = $this->db->db_query(" + SELECT DISTINCT photo_id + FROM photo_tags pt + INNER JOIN photos p + ON p.id=pt.photo_id + WHERE + time>='". $from_date ."' + AND + time<='". $to_date ."' + ORDER BY p.time ASC + "); + while($row = $this->db->db_fetch_object($result)) { + array_push($matched_photos, $row['photo_id']); + } + return $matched_photos; + } + /* return all available photos */ $result = $this->db->db_query(" SELECT DISTINCT photo_id @@ -446,9 +478,9 @@ class PHPFSPOT { ORDER BY p.time ASC "); while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); + array_push($matched_photos, $row['photo_id']); } - return $tagged_photos; + return $matched_photos; } // getPhotoSelection() @@ -908,8 +940,16 @@ class PHPFSPOT { array_push($_SESSION['selected_tags'], $tag); } + $this->resetDateSearch(); + } // startTagSearch() + public function startDateSearch($from, $to) + { + $_SESSION['from_date'] = $from; + $_SESSION['to_date'] = $to; + } + private function rotateImage($img, $degrees) { if(function_exists("imagerotate")) @@ -1082,37 +1122,90 @@ class PHPFSPOT { } // _warning() - private function get_calendar() + private function get_calendar($mode) { -// require_once CALENDAR_ROOT.'Year.php'; -// require_once CALENDAR_ROOT.'Month.php'; -// require_once CALENDAR_ROOT.'Day.php'; + $output = "<input type=\"text\" size=\"3\" id=\"". $mode ."year\" value=\"". date("Y") ."\" />\n"; + $output.= "<input type=\"text\" size=\"1\" id=\"". $mode ."month\" value=\"". date("m") ."\" />\n"; + $output.= "<input type=\"text\" size=\"1\" id=\"". $mode ."day\" value=\"". date("d") ."\" />\n"; + return $output; -// $Year = new Calendar_Year(); -// $Month = new Calendar_Month(); -// $Day = new Calendar_Day(); + } // get_calendar() - $output = "<select name=\"year\">\n"; - for($year = 1990; $year <= date("Y"); $year++) { - $output.= "<option value=\"". $year ."\">". $year ."</option>\n"; - } - $output.= "</select>\n"; + public function get_calendar_matrix($year = 0, $month = 0, $day = 0) + { + if (!isset($year)) $year = date('Y'); + if (!isset($month)) $month = date('m'); + if (!isset($day)) $day = date('d'); + $rows = 1; + $cols = 1; + $matrix = Array(); + + require_once CALENDAR_ROOT.'Month/Weekdays.php'; + require_once CALENDAR_ROOT.'Day.php'; - $output.= "<select name=\"month\">\n"; - for($month = 1; $month <= 12; $month++) { - $output.= "<option value=\"". $month ."\">". $month ."</option>\n"; - } - $output.= "</select>\n"; - $output.= "<select name=\"day\">\n"; - for($day = 1; $day <= 31; $day++) { - $output.= "<option value=\"". $day ."\">". $day ."</option>\n"; + // Build the month + $month = new Calendar_Month_Weekdays($year,$month); + + // Create links + $prevStamp = $month->prevMonth(true); + $prev = "javascript:setMonth(". date('Y',$prevStamp) .", ". date('n',$prevStamp) .", ". date('j',$prevStamp) .");"; + $nextStamp = $month->nextMonth(true); + $next = "javascript:setMonth(". date('Y',$nextStamp) .", ". date('n',$nextStamp) .", ". date('j',$nextStamp) .");"; + + $selectedDays = array ( + new Calendar_Day($year,$month,$day), + new Calendar_Day($year,12,25), + ); + + // Build the days in the month + $month->build($selectedDays); + + $this->tmpl->assign('current_month', date('F Y',$month->getTimeStamp())); + $this->tmpl->assign('prev_month', $prev); + $this->tmpl->assign('next_month', $next); + + while ( $day = $month->fetch() ) { + + if(!isset($matrix[$rows])) + $matrix[$rows] = Array(); + + $string = ""; + + $dayStamp = $day->thisDay(true); + $link = "javascript:setCalendarDate(". date('Y',$dayStamp) .", ". date('n',$dayStamp).", ". date('j',$dayStamp) .");"; + + // isFirst() to find start of week + if ( $day->isFirst() ) + $string.= "<tr>\n"; + + if ( $day->isSelected() ) { + $string.= "<td class=\"selected\">".$day->thisDay()."</td>\n"; + } else if ( $day->isEmpty() ) { + $string.= "<td> </td>\n"; + } else { + $string.= "<td><a class=\"calendar\" href=\"".$link."\">".$day->thisDay()."</a></td>\n"; + } + + // isLast() to find end of week + if ( $day->isLast() ) + $string.= "</tr>\n"; + + $matrix[$rows][$cols] = $string; + + $cols++; + + if($cols > 7) { + $cols = 1; + $rows++; + } } - $output.= "</select>\n"; - return $output; + $this->tmpl->assign('matrix', $matrix); + $this->tmpl->assign('rows', $rows); + $this->tmpl->show("calendar.tpl"); - } // get_calendar() + } // get_calendar_matrix() public function getExport($mode) { diff --git a/phpfspot.js b/phpfspot.js index be15455..40d6761 100644 --- a/phpfspot.js +++ b/phpfspot.js @@ -20,10 +20,6 @@ function Tags(mode, id) // del the tag from users session HTML_AJAX.grab(encodeURI('rpc.php?action=deltag&id=' + id)); } - else if(mode == "reset") { - HTML_AJAX.grab(encodeURI('rpc.php?action=reset')); - clearSearch(); - } else if(mode == "condition") { setCheckedValue(id, id.value); HTML_AJAX.grab(encodeURI('rpc.php?action=tagcondition&mode=' + id.value)); @@ -107,7 +103,25 @@ function startTagSearch(searchfor) refreshAvailableTags(); refreshSelectedTags(); showPhotoIndex(); +} + +function startDateSearch() +{ + from_year = document.getElementById('fromyear').value; + from_month = document.getElementById('frommonth').value; + from_day = document.getElementById('fromday').value; + from = from_year +"-"+ from_month +"-"+ from_day; + to_year = document.getElementById('toyear').value; + to_month = document.getElementById('tomonth').value; + to_day = document.getElementById('today').value; + to = to_year +"-"+ to_month +"-"+ to_day; + HTML_AJAX.grab(encodeURI('rpc.php?action=date_search&from='+ from +'&to='+ to)); + + refreshAvailableTags(); + refreshSelectedTags(); + refreshPhotoIndex(); + refreshPhotoIndex(); } function setViewMode(mode) @@ -159,7 +173,54 @@ function getPhotoToShow() return photo_to_show; } +function showCalendar(date_box, click_obj) +{ + var calendar = document.getElementById('calendar'); + if(date_box == 'from') { + var xpos = document.getElementById('frompic').offsetLeft; + var ypos = document.getElementById('frompic').offsetTop; + calendar_mode = 'from'; + } + if(date_box == 'to') { + var xpos = document.getElementById('topic').offsetLeft; + var ypos = document.getElementById('topic').offsetTop; + calendar_mode = 'to'; + } + calendar.style.left = xpos + 60 + 'px'; + calendar.style.top = ypos + 80 + 'px'; + + if(calendar.style.visibility == "" || calendar.style.visibility == 'hidden') { + calendar.style.visibility = 'visible'; + calendar.innerHTML = "Loading..."; + calendar.innerHTML = HTML_AJAX.grab(encodeURI('rpc.php?action=get_calendar_matrix')); + calendar_shown = 1; + } + else { + calendar.style.visibility = 'hidden'; + calendar_shown = 0; + } +} +function setMonth(year, month, day) +{ + var calendar = document.getElementById('calendar'); + calendar.innerHTML = "Loading..."; + calendar.innerHTML = HTML_AJAX.grab(encodeURI('rpc.php?action=get_calendar_matrix&year='+ year +'&month='+ month +'&day='+ day)); +} -var startup = 1; +function setCalendarDate(year, month, day) +{ + document.getElementById(calendar_mode+'year').value = year; + document.getElementById(calendar_mode+'month').value = month; + document.getElementById(calendar_mode+'day').value = day; +} + +function resetAll() +{ + HTML_AJAX.grab(encodeURI('rpc.php?action=reset')); + clearSearch(); +} +var startup = 1; +var calendar_shown = 0; +var calendar_mode = ''; @@ -70,6 +70,7 @@ class PHPFSPOT_RPC { $fspot->resetTagSearch(); $fspot->resetTags(); + $fspot->resetDateSearch(); $fspot->resetPhotoView(); break; @@ -91,9 +92,17 @@ class PHPFSPOT_RPC { case 'tag_search': + $fspot->resetDateSearch(); $fspot->startTagSearch($_GET['for']); break; + case 'date_search': + + $fspot->resetTagSearch(); + $fspot->resetTags(); + $fspot->startDateSearch($_GET['from'], $_GET['to']); + break; + case 'get_export': $fspot->getExport($_GET['mode']); @@ -103,6 +112,10 @@ class PHPFSPOT_RPC { $fspot->getCurrentPhoto(); break; + case 'get_calendar_matrix': + $fspot->get_calendar_matrix($_GET['year'], $_GET['month'], $_GET['day']); + break; + } } // process_ajax_request(); diff --git a/stylesheet.css b/stylesheet.css index 8d12b95..20c1974 100644 --- a/stylesheet.css +++ b/stylesheet.css @@ -95,6 +95,10 @@ a.thumblink { font-size: 12px;
}
+a.calendar {
+ font-size: 10px;
+}
+
a.thumblink:hover {
color: #4761ab;
}
@@ -134,3 +138,27 @@ td.thumb { clip: auto;
overflow: auto;
}
+
+table.calendar tr td {
+ border: solid 1px #ffffff;
+ padding: 1px;
+ text-align: center;
+ font-size: 10px;
+}
+
+.prevMonth {
+ font-size: 10px;
+ text-align: left;
+}
+.nextMonth {
+ font-size: 10px;
+ text-align: right;
+}
+#calendar {
+ position: absolute;
+ width: 140px;
+ height: 200px;
+ background-color: #000000;
+ visibility: hidden;
+ z-index: 1000;
+}
diff --git a/templates/calendar.tpl b/templates/calendar.tpl new file mode 100644 index 0000000..1f52732 --- /dev/null +++ b/templates/calendar.tpl @@ -0,0 +1,28 @@ +<table class="calendar"> + <tr> + <td><a href="{$prev_month}" class="prevMonth"><<</a></td> + <td colspan="5"> + {$current_month} + </td> + <td><a href="{$next_month}" class="nextMonth">>></a></td> + </tr> + <tr> + <td>M</td> + <td>T</td> + <td>W</td> + <td>T</td> + <td>F</td> + <td>S</td> + <td>S</td> + </tr> + <!-- matrix --> + {section name="row" loop=$rows step=1} + {section name="col" loop=8 step=1} + {if $matrix[row][col] } + {$matrix[row][col]} + {/if} + {/section} + {/section} + <!-- /matrix --> +</table> + diff --git a/templates/index.tpl b/templates/index.tpl index 5ff9b0e..4366679 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -12,7 +12,7 @@ <a href="javascript:showPhotoIndex();" onclick="click(this);" title="Show Photo Index"> <img src="resources/photo_index.png" alt="photo index" /> </a> - <a href="javascript:Tags('reset', 0);" onclick="click(this);" title="Reset Selected Tags and Tag-Search"> + <a href="javascript:resetAll();" onclick="click(this);" title="Reset Selected Tags and Tag-Search"> <img src="resources/reload.png" alt="reset tags" /> </a> <a href="javascript:showCredits();" onclick="click(this);" title="Show's a little credit page"> diff --git a/templates/search.tpl b/templates/search.tpl index 092006e..51c1877 100644 --- a/templates/search.tpl +++ b/templates/search.tpl @@ -10,6 +10,13 @@ Tag: <input type="text" name="searchfor" value="{$searchfor}" size="15" /> <input type="image" src="resources/doit.png" alt="Tag-Search" /> </form> + <form action="" onsubmit="startDateSearch(); return false;"> + Date:<br /> + {$from_date} <a href="javascript:showCalendar('from');"><img src="resources/date.png" id="frompic"/></a><br /> + {$to_date} <a href="javascript:showCalendar('to');"><img src="resources/date.png" id="topic" /></a><br /> + <input type="image" src="resources/doit.png" alt="Tag-Search" /> + <div id='calendar'></div> + </form> </td> </tr> </table> |