[fusionregistry-commitlog] SF.net SVN: fusionregistry: [50] branches/stable_3_0_x/upload/sources
Brought to you by:
copland007
|
From: SVN c. <fus...@li...> - 2008-02-17 21:12:20
|
Revision: 50
http://fusionregistry.svn.sourceforge.net/fusionregistry/?rev=50&view=rev
Author: copland007
Date: 2008-02-17 13:12:11 -0800 (Sun, 17 Feb 2008)
Log Message:
-----------
Implemented client side rating_def cache.
ACP custom fields page, change get_cf_groups to get_cf_groups_live call to ensure database data not cache.
Fix item modification not saving custom field data correctly.
Added ksort to both rating_def and field_def cache retrieval routines for ASC sort type. Results were not being properly sorted from cache.
Modified Paths:
--------------
branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_custom_fields.php
branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_rating_fields.php
branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/item.php
branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/custom_fields.php
branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/ratings.php
Modified: branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_custom_fields.php
===================================================================
--- branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_custom_fields.php 2008-02-17 09:56:12 UTC (rev 49)
+++ branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_custom_fields.php 2008-02-17 21:12:11 UTC (rev 50)
@@ -643,7 +643,7 @@
{
// Grab all the custom field definitions and groups first as they will be used by a few things below
$cf_defs = $this->lib['custom_fields']->get_cf_defs_live( array( 'ORDER BY' => 'field_order ASC, field_name ASC' ) );
- $cf_groups = $this->lib['custom_fields']->get_cf_groups();
+ $cf_groups = $this->lib['custom_fields']->get_cf_groups_live();
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->information_box( "Fusion Registry Custom Fields Overview", "You can manage your garage custom fields from here.<br /><br /><span style='color:red'><b>PLEASE NOTE:</b> You must not configure the same order number for more than 1 custom field. Doing so will result in some of your custom fields not showing up!</span>".'<br /> ' ) . "<br >";
Modified: branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_rating_fields.php
===================================================================
--- branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_rating_fields.php 2008-02-17 09:56:12 UTC (rev 49)
+++ branches/stable_3_0_x/upload/sources/components_acp/fusionscripts/fusionregistry/ad_rating_fields.php 2008-02-17 21:12:11 UTC (rev 50)
@@ -206,9 +206,9 @@
}
// Go get our Custom Field definition
- $rating_data = $this->lib['rating_fields']->get_rating_defs( array( 'WHERE' => 'rating_id='.$this->ipsclass->input['r'] ) );
+ $rating_data = $this->lib['rating_fields']->get_rating_defs_live( array( 'WHERE' => 'rating_id='.$this->ipsclass->input['r'] ) );
- // Since get_rating_defs() returns an array of arrays, we are removing a layer here.
+ // Since get_rating_defs_live() returns an array of arrays, we are removing a layer here.
// The key is the rating_id which was passed in from the beginning ;)
$rating = $rating_data[$this->ipsclass->input['r']];
@@ -365,7 +365,7 @@
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Fusion Registry Rating Fields" );
// Grab all the rating definitions
- $rating_defs = $this->lib['rating_fields']->get_rating_defs( array( 'ORDER BY' => 'rating_order ASC, rating_name ASC' ) );
+ $rating_defs = $this->lib['rating_fields']->get_rating_defs_live( array( 'ORDER BY' => 'rating_order ASC, rating_name ASC' ) );
// Loop through our custom field definitions we got from up above
foreach ( $rating_defs as $rating_id => $rating_row )
Modified: branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/item.php
===================================================================
--- branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/item.php 2008-02-17 09:56:12 UTC (rev 49)
+++ branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/item.php 2008-02-17 21:12:11 UTC (rev 50)
@@ -394,17 +394,17 @@
unset($db_string);
// Now save their custom field data
- foreach ( $cf_input as $cf_num => $cf_value )
+ foreach ( $cf_input as $cf_id => $cf_value )
{
// Determine if we need to update or insert row
- $rs = $this->ipsclass->DB->query("SELECT entry_id FROM ibf_registry_field_entries WHERE item_id = '". $this->ipsclass->input['CID'] ."' AND field_id = '". $cf_row['field_id'] ."'");
+ $rs = $this->ipsclass->DB->query("SELECT entry_id FROM ibf_registry_field_entries WHERE item_id = '". $this->ipsclass->input['CID'] ."' AND field_id = '". $cf_id ."'");
$existing = $this->ipsclass->DB->fetch_row($rs);
if ( isset($existing['entry_id']) and !empty($existing['entry_id']) )
{
// Update existing entry
- $db_string = $this->ipsclass->DB->compile_db_update_string( array( 'field_id' => $cf_row['field_id'],
+ $db_string = $this->ipsclass->DB->compile_db_update_string( array( 'field_id' => $cf_id,
'item_id' => $this->ipsclass->input['CID'],
'field_value' => $cf_value,
) );
@@ -414,7 +414,7 @@
else
{
// Insert new entry
- $db_string = $this->ipsclass->DB->compile_db_insert_string( array( 'field_id' => $cf_row['field_id'],
+ $db_string = $this->ipsclass->DB->compile_db_insert_string( array( 'field_id' => $cf_id,
'item_id' => $this->ipsclass->input['CID'],
'field_value' => $cf_value,
) );
@@ -639,11 +639,11 @@
$ratings_def = $this->lib['ratings']->get_rating_defs();
- foreach ( $ratings_def as $rating_id => $rating_row )
+ foreach ( $ratings_def as $rating_num => $rating_row )
{
- if ( !empty( $this->ipsclass->input[$rating_id] ) )
+ if ( !empty( $this->ipsclass->input[ $rating_row['rating_id'] ] ) )
{
- $user_ratings[$rating_id] = intval( $this->ipsclass->input[$rating_id] );
+ $user_ratings[ $rating_row['rating_id'] ] = intval( $this->ipsclass->input[ $rating_row['rating_id'] ] );
}
}
@@ -1056,7 +1056,7 @@
}
// Load the ratings defs
- $rating_defs = $this->lib['ratings']->get_rating_defs( array( 'ORDER BY' => 'rating_order ASC' ) );
+ $rating_defs = $this->lib['ratings']->get_rating_defs( array( 'ORDER BY' => array( 'rating_order' => 'ASC' ) ) );
// They shouldn't even get to this function if there aren't rating defs
if ( empty($rating_defs) )
@@ -1067,7 +1067,7 @@
// Loop through and produce our inner html
$inner_html = '';
- foreach ( $rating_defs as $rating_id => $rating_row )
+ foreach ( $rating_defs as $rating_num => $rating_row )
{
// Create our html select field
$select_html = $this->lib['ratings']->build_rating_select( array( 'rating_row' => $rating_row ) );
@@ -1656,7 +1656,7 @@
{
$ratings_html = '';
- foreach ( $rating_report as $rating_id => $rating_row )
+ foreach ( $rating_report as $rating_num => $rating_row )
{
$ratings_html .= $this->ipsclass->compiled_templates['skin_registry_item']->view_rating_row( array( 'rating_name' => $rating_row['rating_name'],
'rating_image' => $rating_row['rating_image'],
Modified: branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/custom_fields.php
===================================================================
--- branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/custom_fields.php 2008-02-17 09:56:12 UTC (rev 49)
+++ branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/custom_fields.php 2008-02-17 21:12:11 UTC (rev 50)
@@ -179,10 +179,14 @@
$sorted[ intval($field_row[ $order_field ]) ] = $field_row;
}
- if ( $order_value == 'DESC' )
+ if ( $order_value == 'ASC' )
{
- $sorted = array_reverse($results);
+ ksort($sorted);
}
+ elseif ( $order_value == 'DESC' )
+ {
+ $sorted = array_reverse($sorted);
+ }
}
$results = $sorted;
@@ -271,7 +275,7 @@
/**
- * Get all the Custom Field Groups, cached if possible
+ * Get all the Custom Field Groups from the cache
*
* This function's job is only to retrieve the data from the database,
* it should not process the returned data. If this data has already
@@ -313,6 +317,40 @@
/**
+ * Get all the Custom Field Groups from the database
+ *
+ * This function's job is only to retrieve the data from the database,
+ * it should not process the returned data. If this data has already
+ * been retrieved and stored into cache it will not query the database.
+ *
+ * @return array|NULL Success returns an array of an array, outer key is field_group_id; Failure returns NULL.
+ */
+ function get_cf_groups_live()
+ {
+ $query = 'SELECT field_id, field_name, field_type, field_options, '.
+ 'field_default, field_required, field_size, field_rows, '.
+ 'field_cols, field_order, field_browse, field_highlight, '.
+ 'field_group_id, field_search '.
+ 'FROM ibf_registry_field_defs '.
+ 'WHERE field_group_id IS NOT NULL '.
+ 'ORDER BY field_group_id ASC, field_order ASC, field_name ASC';
+
+ $rs = $this->ipsclass->DB->query($query);
+
+ // Build our Custom Field Group data structure, we will be returning
+ // a complex structure of arrays of arrays
+ $this->_cf_groups = array();
+
+ while ( $row = $this->ipsclass->DB->fetch_row($rs) )
+ {
+ $this->_cf_groups[$row['field_group_id']][] = $row;
+ }
+
+ return $this->_cf_groups;
+ }
+
+
+ /**
* Get the Custom Field or Group that has been chosen as the highlight item
*
* This function's job is only to retrieve the highlight group or item from
Modified: branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/ratings.php
===================================================================
--- branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/ratings.php 2008-02-17 09:56:12 UTC (rev 49)
+++ branches/stable_3_0_x/upload/sources/components_public/fusionscripts/fusionregistry/lib/ratings.php 2008-02-17 21:12:11 UTC (rev 50)
@@ -70,9 +70,9 @@
/**
- * Get Rating definitions
+ * Get Rating definitions from cache
*
- * This function's job is only to retrieve the data from the database,
+ * This function's job is only to retrieve the data from the cache,
* it should not process the returned data.
*
* @todo Cache just like get_field_defs, create new get_field_defs_live for ACP
@@ -81,6 +81,67 @@
*/
function get_rating_defs($opts=array())
{
+ $results = $this->ipsclass->cache['registry_rating_defs'];
+
+ // Did we get any restrictions passed?
+ if ( count($opts) > 0 && is_array($this->ipsclass->cache['registry_rating_defs']) )
+ {
+ // First handle the WHERE clause
+ if ( isset($opts['WHERE']) && is_array($opts['WHERE']) )
+ {
+ foreach ( $opts['WHERE'] as $where_field => $where_value )
+ {
+ foreach ( $results as $field_id => $field_row )
+ {
+ if ( $field_row[ $where_field ] != $where_value )
+ {
+ // WHERE did not match, remove from results
+ unset( $results[ $field_id ] );
+ }
+ }
+ }
+ }
+
+ // Now handle the ORDER BY clause
+ if ( isset($opts['ORDER BY']) && is_array($opts['ORDER BY']) )
+ {
+ $sorted = array();
+ foreach ( $opts['ORDER BY'] as $order_field => $order_value )
+ {
+ foreach ( $results as $field_num => $field_row )
+ {
+ $sorted[ intval($field_row[ $order_field ]) ] = $field_row;
+ }
+
+ if ( $order_value == 'ASC' )
+ {
+ ksort($sorted);
+ }
+ elseif ( $order_value == 'DESC' )
+ {
+ $sorted = array_reverse($sorted);
+ }
+ }
+
+ $results = $sorted;
+ }
+ }
+
+ return $results;
+ }
+
+
+ /**
+ * Get Rating definitions live from database
+ *
+ * This function's job is only to retrieve the data from the database,
+ * it should not process the returned data.
+ *
+ * @param array $opts Optional custom SQL cmd/value pair attributes
+ * @return array An array of an array, outer key is field_id
+ */
+ function get_rating_defs_live($opts=array())
+ {
$query = "SELECT rating_id,rating_name,rating_order FROM ibf_registry_rating_defs";
// Did we get any restrictions passed?
@@ -207,40 +268,41 @@
$report = array();
// First get the current list of rating defs
- $ratings_defs = $this->get_rating_defs( array( 'ORDER BY' => 'rating_order ASC' ) );
+ $ratings_defs = $this->get_rating_defs( array( 'ORDER BY' => array( 'rating_order' => 'ASC' ) ) );
// Then get report for each of the rating defs for this item
- foreach ( $ratings_defs as $rating_id => $rating_row )
+ foreach ( $ratings_defs as $rating_num => $rating_row )
{
// Initialize the report for this rating
- $report[$rating_id] = array();
+ $report[ $rating_num ] = array();
$query = "SELECT rating_count, rating_sum FROM ibf_registry_rating_reports ".
- "WHERE item_id = '$item_id' AND rating_id = '$rating_id'";
+ "WHERE item_id = '$item_id' AND rating_id = '".$rating_row['rating_id']."'";
$rs = $this->ipsclass->DB->query($query);
// Add to report to be returned
if ( $this->ipsclass->DB->get_num_rows() )
{
- $report[$rating_id] = $this->ipsclass->DB->fetch_row($rs);
+ $report[ $rating_num ] = $this->ipsclass->DB->fetch_row($rs);
}
// While we are at it, let's generate the html here also.
- if ( $report[$rating_id]['rating_count'] > 0 )
+ if ( $report[ $rating_num ]['rating_count'] > 0 )
{
// If there are votes, report real value
- $report[$rating_id]['rating_image'] = $this->get_rating_image( $report[$rating_id]['rating_sum'] / $report[$rating_id]['rating_count'] );
+ $report[ $rating_num ]['rating_image'] = $this->get_rating_image( $report[ $rating_num ]['rating_sum'] / $report[ $rating_num ]['rating_count'] );
}
else
{
// If there aren't any votes report medium neutral value
- $report[$rating_id]['rating_image'] = $this->get_rating_image( ($this->class->registry_config['rating_max'] + $this->class->registry_config['rating_min'])/2 );
+ $report[ $rating_num ]['rating_image'] = $this->get_rating_image( ($this->class->registry_config['rating_max'] + $this->class->registry_config['rating_min'])/2 );
}
// Also cram in rating info
- $report[$rating_id]['rating_name'] = $rating_row['rating_name'];
- $report[$rating_id]['rating_order'] = $rating_row['rating_order'];
+ $report[ $rating_num ]['rating_id'] = $rating_row['rating_id'];
+ $report[ $rating_num ]['rating_name'] = $rating_row['rating_name'];
+ $report[ $rating_num ]['rating_order'] = $rating_row['rating_order'];
}
return $report;
@@ -282,14 +344,14 @@
$rating_default = round( ($this->class->registry_config['rating_min'] + $this->class->registry_config['rating_min'])/2 );
// Loop through each valid rating def and determine if they have voted before or not
- foreach ( $ratings_def as $rating_id => $rating_row )
+ foreach ( $ratings_def as $rating_num => $rating_row )
{
// Determine rating value to be recorded
- $rating_value = ( !empty( $user_ratings[$rating_id] ) ) ? $user_ratings[$rating_id] : $rating_default;
+ $rating_value = ( !empty( $user_ratings[ $rating_row['rating_id'] ] ) ) ? $user_ratings[ $rating_row['rating_id'] ] : $rating_default;
// Have they voted for this before?
$query = "SELECT entry_id,rating_value FROM ibf_registry_rating_entries ".
- "WHERE item_id = '$item_id' AND rating_id = '$rating_id' AND member_id = '". $this->ipsclass->member['id'] ."'";
+ "WHERE item_id = '$item_id' AND rating_id = '". $rating_row['rating_id'] ."' AND member_id = '". $this->ipsclass->member['id'] ."'";
$rs = $this->ipsclass->DB->query($query);
@@ -298,7 +360,7 @@
// They have not voted for this before, add new entry
$db_string = $this->ipsclass->DB->compile_db_insert_string( array( 'member_id' => $this->ipsclass->member['id'],
'item_id' => $item_id,
- 'rating_id' => $rating_id,
+ 'rating_id' => $rating_row['rating_id'],
'rating_value' => $rating_value,
'rating_date' => $epoch_time,
) );
@@ -308,13 +370,13 @@
// Now we need to add this to the rating report. First see if a report exists,
// if not create one.
$rs2 = $this->ipsclass->DB->query("SELECT entry_id, rating_count, rating_sum FROM ibf_registry_rating_reports ".
- "WHERE item_id = '$item_id' AND rating_id = '$rating_id'");
+ "WHERE item_id = '$item_id' AND rating_id = '". $rating_row['rating_id'] ."'");
if ( !$this->ipsclass->DB->get_num_rows() )
{
// No report yet, create new one
$db_string = $this->ipsclass->DB->compile_db_insert_string( array( 'item_id' => $item_id,
- 'rating_id' => $rating_id,
+ 'rating_id' => $rating_row['rating_id'],
'rating_count' => 1,
'rating_sum' => $rating_value,
) );
@@ -351,13 +413,13 @@
// we'll create a new one here just incase. This will patch a problem if it exists
// but a clean up routine will need to be run to fix this items rating report.
$rs2 = $this->ipsclass->DB->query("SELECT entry_id, rating_count, rating_sum FROM ibf_registry_rating_reports ".
- "WHERE item_id = '$item_id' AND rating_id = '$rating_id'");
+ "WHERE item_id = '$item_id' AND rating_id = '". $rating_row['rating_id'] ."'");
if ( !$this->ipsclass->DB->get_num_rows() )
{
// No report yet, create new one
$db_string = $this->ipsclass->DB->compile_db_insert_string( array( 'item_id' => $item_id,
- 'rating_id' => $rating_id,
+ 'rating_id' => $rating_row['rating_id'],
'rating_count' => 1,
'rating_sum' => $rating_value,
) );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|