Subversion Repositories starrating

[/] [classes/] [starrating.php] - Blame information for rev 1

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1 zabbie
<?php
2
include_once( "lib/ezdb/classes/ezdb.php" );
3
include_once( 'kernel/classes/ezcontentobject.php' );
4
include_once( 'kernel/classes/ezpersistentobject.php' );
5
 
6
class starrating extends eZPersistentObject
7
{
8
 
9
  function starrating(&$row)
10
  {
11
    $this->eZPersistentObject( $row );
12
  }
13
 
14
  static function definition()
15
  {
16
    return array( 'fields' => array(
17
                    'id' => array(
18
                      'name' => 'id',
19
                      'datatype' => 'integer',
20
                      'default' => 0,
21
                      'required' => true ),
22
                    'created_at' => array(
23
                      'name' => 'created_at',
24
                      'datatype' => 'integer',
25
                      'default' => 0,
26
                      'required' => true ),
27
                    'user_id' => array(
28
                      'name' => 'user_id',
29
                      'datatype' => 'integer',
30
                      'default' => 0,
31
                      'required' => true ),
32
                    'rating' => array(
33
                      'name' => 'rating',
34
                      'datatype' => 'integer',
35
                      'default' => 0,
36
                      'required' => true ),
37
                    'session_key' => array(
38
                      'name' => 'session_key',
39
                      'datatype' => 'string',
40
                      'default' => '',
41
                      'required' => true ),
42
                    'contentobject_id' => array(
43
                      'name' => 'contentobject_id',
44
                      'datatype' => 'integer',
45
                      'default' => 0,
46
                      'required' => true ),
47
                    'contentobject_attribute_id' => array(
48
                      'name' => 'contentobject_attribute_id',
49
                      'datatype' => 'integer',
50
                      'default' => 0,
51
                      'required' => true ),
52
                  ),
53
                  'keys' => array( 'id' ),
54
                  'function_attributes' => array(
55
                    'number' => 'getNumber',
56
                    'average' => 'getAverage',
57
                    'rounded_average' => 'getRoundedAverage',
58
                    'std_deviation' => 'getSTD',
59
                    'has_rated' => 'getHasRated',
60
                  ),
61
                  'increment_key' => 'id',
62
                  'class_name' => 'starrating',
63
                  'name' => 'starrating' );
64
  }
65
 
66
  /* Function Attributes Methods */
67
 
68
  function getNumber()
69
  {
70
    $stats = starrating::stats($this->attribute('contentobject_attribute_id'));
71
    $return = 0;
72
    if (isset($stats['count']))
73
      $return = $stats['count'];
74
    return $return;
75
  }
76
 
77
  function getAverage()
78
  {
79
    $stats = starrating::stats($this->attribute('contentobject_attribute_id'));
80
    $return = 0;
81
    if (isset($stats['average']))
82
      $return = $stats['average'];
83
    return $return;
84
  }
85
 
86
  function getRoundedAverage()
87
  {
88
    $avg = $this->attribute('average');
89
    $rnd_avg = intval($avg * 2 + 0.5)/2;
90
    return $rnd_avg;
91
  }
92
 
93
  function getSTD()
94
  {
95
    $stats = starrating::stats($this->attribute('contentobject_attribute_id'));
96
    $return = 0;
97
    if (isset($stats['std']))
98
      $return = $stats['std'];
99
    return $return;
100
  }
101
 
102
  function getHasRated()
103
  {
104
    $return = starrating::fetchBySessionKey($this->attribute('contentobject_attribute_id'));
105
//    $return = false;
106
    return $return;
107
  }
108
 
109
  function store( $fieldFilters = null )
110
  {
111
    $this->setAttribute('created_at', time());
112
    eZPersistentObject::store( $fieldFilters );
113
  }
114
 
115
  static function &removeAll($id)
116
  {
117
    $cond=array("contentobject_attribute_id" => $id);
118
    eZPersistentObject::removeObject(starrating::definition(),$cond);
119
  }
120
 
121
  static function &fetch($id)
122
  {
123
    $cond=array("id" => $id);
124
    $return = eZPersistentObject::fetchObject(starrating::definition(),null,$cond);
125
    return $return;
126
  }
127
 
128
 static function rate($contentobject_attribute_id,$version,$rate)
129
 {
130
    $rating = false;
131
    if (is_numeric( $contentobject_attribute_id ) and
132
        is_numeric( $version ) and
133
        is_numeric( $rate) and
134
        $rate <= 5 and $rate >= 1 )
135
    {
136
      $contentobject_attribute = eZContentObjectAttribute::fetch($contentobject_attribute_id,$version);
137
      if ( $contentobject_attribute )
138
      {
139
        $contentobject_id = $contentobject_attribute->attribute("contentobject_id");
140
        $row = array ('contentobject_attribute_id' => $contentobject_attribute_id,
141
                      'version'                    => $version,
142
                      'contentobject_id'           => $contentobject_id,
143
                      'rating'                     => $rate);
144
 
145
        $rating = starrating::create($row);
146
        $rating->store();
147
 
148
        // clear the cache for all nodes associated with this object
149
        eZContentCacheManager::clearContentCacheIfNeeded( $contentobject_id, true, false );
150
      }
151
    }
152
    return $rating;
153
 }
154
 
155
 
156
  static function &create($row=array())
157
  {
158
    include_once ("lib/ezutils/classes/ezhttptool.php");
159
    $http = eZHTTPTool::instance();
160
    $session_key = $http->getSessionKey();
161
 
162
    $user = eZUser::currentUser();
163
    $userID = $user->id();
164
 
165
    $row['session_key'] =  $session_key;
166
    $row['user_id']     =  $userID;
167
 
168
    $object = new starrating($row);
169
    return $object;
170
  }
171
 
172
  static function fetchBySessionKey($ContentObjectAttributeID)
173
  {
174
    include_once ("lib/ezutils/classes/ezhttptool.php");
175
    $http = eZHTTPTool::instance();
176
    $session_key = $http->getSessionKey();
177
    $cond=array('session_key' => $session_key,
178
                'contentobject_attribute_id' => $ContentObjectAttributeID);
179
    $object = starrating::fetchObjectList(starrating::definition(),null,$cond);
180
    return count($object);
181
  }
182
 
183
  static function stats($ContentObjectAttributeID)
184
  {
185
    if (isset($GLOBALS['ratings']['stats'][$ContentObjectAttributeID]))
186
    {
187
      $return =& $GLOBALS['ratings']['stats'][$ContentObjectAttributeID];
188
    }
189
    else
190
    {
191
      $custom = array( array( 'operation' => 'count( id )',
192
                              'name'      => 'count' ) ,
193
                       array( 'operation' => 'avg( rating )',
194
                              'name'      => 'average' ),
195
                       array( 'operation' => 'std( rating )',
196
                              'name'      => 'std' ));
197
      $cond=array( 'contentobject_attribute_id' => $ContentObjectAttributeID );
198
      $return = starrating::fetchObjectList(starrating::definition(), array() ,$cond, null, null, false, false, $custom );
199
      if (is_array($return))
200
        $return = $return[0];
201
      $GLOBALS['ratings']['stats'][$ContentObjectAttributeID] =& $return;
202
    }
203
    return $return;
204
  }
205
 
206
 
207
}
208
 
209
?>