models/opiniarbo_model.php
changeset 3 f3e55c2386a1
child 4 fcb273554da6
equal deleted inserted replaced
2:7c6c888b2fed 3:f3e55c2386a1
       
     1 <?php
       
     2 class Opiniarbo_model extends Model {
       
     3 
       
     4     function Opiniarbo_model()
       
     5     {
       
     6         parent::Model();
       
     7     }
       
     8 
       
     9     function get_user_name($userid)
       
    10     {
       
    11         if ($userid == 0)
       
    12             return "Neniu";
       
    13         $this->db->select('id,name');
       
    14         $this->db->from('auser');
       
    15         $this->db->where('id', $userid);
       
    16         $query = $this->db->get();
       
    17 
       
    18         return $query->row()->name;
       
    19     }
       
    20 
       
    21     function get_other_users($userid)
       
    22     {
       
    23         $this->db->select('id,name');
       
    24         $this->db->from('auser');
       
    25         $this->db->where('id !=', $userid);
       
    26         $query = $this->db->get();
       
    27 
       
    28         return $query->result_array();
       
    29     }
       
    30 
       
    31     function get_assertions($userid1, $userid2, $parent)
       
    32     {
       
    33         $heads = array();
       
    34         // contains: id, assert, value1, value2, calc_value1, calc_value2
       
    35         $user1_heads = $this->get_my_heads_values($userid1, $parent);
       
    36         if ($userid2 != 0)
       
    37             $user2_heads = $this->get_my_heads_values($userid2, $parent);
       
    38         else
       
    39             $user2_heads = array();
       
    40         foreach($user1_heads as $row1)
       
    41         {
       
    42             $found = FALSE;
       
    43             foreach($user2_heads as $row2)
       
    44             {
       
    45                 if($row2['id'] == $row1['id'])
       
    46                 {
       
    47                     $value2 = $row2['value'];
       
    48                     if ($parent != NULL)
       
    49                         $influence2 = $row['influence'];
       
    50                     $calc_value2 = $row2['calc_value'];
       
    51                     $found = TRUE;
       
    52                     break;
       
    53                 }
       
    54             }
       
    55             if ($found)
       
    56             {
       
    57                 $heads[$row1['id']] = array('id' => $row1['id'],
       
    58                             'vid' => $row1['vid'],
       
    59                             'text' => $row1['assert'],
       
    60                             'value1' => $row1['value'],
       
    61                             'parent' => $row1['parent'],
       
    62                             'value2' => $value2);
       
    63                 if ($parent != NULL)
       
    64                 {
       
    65                     $heads[$row1['id']] += array('influence1' => $row1['influence']);
       
    66                     $heads[$row1['id']] += array('influence2' => $influence2);
       
    67                 }
       
    68                 if ($row1['calc_value'] != NULL)
       
    69                     $heads[$row1['id']] += array('calc_value1' => $row1['calc_value']);
       
    70                 if ($calc_value2 != NULL)
       
    71                     $heads[$row1['id']] += array('calc_value2' => $calc_value2);
       
    72 
       
    73             }
       
    74             else
       
    75             {
       
    76                 $heads[$row1['id']] = array('id' => $row1['id'],
       
    77                             'vid' => $row1['vid'],
       
    78                             'text' => $row1['assert'],
       
    79                             'parent' => $row1['parent'],
       
    80                             'value1' => $row1['value']);
       
    81                 if ($parent != NULL)
       
    82                 {
       
    83                     $heads[$row1['id']] += array('influence1' => $row1['influence']);
       
    84                 }
       
    85                 if ($row1['calc_value'] != NULL)
       
    86                     $heads[$row1['id']] += array('calc_value1' => $row1['calc_value']);
       
    87             }
       
    88         }
       
    89         foreach($user2_heads as $row2)
       
    90         {
       
    91             if (!isset($heads[$row2['id']]))
       
    92             {
       
    93                 $heads[$row2['id']] = array('id' => $row2['id'],
       
    94                                 'text' => $row2['assert'],
       
    95                                 'parent' => $row2['parent'],
       
    96                                 'value2' => $row2['value']);
       
    97                 if ($row2['calc_value'] != NULL)
       
    98                     $heads[$row2['id']] += array('calc_value2' => $row2['calc_value']);
       
    99                 if ($parent != NULL)
       
   100                 {
       
   101                     $heads[$row2['id']] += array('influence2' => $row2['influence']);
       
   102                 }
       
   103 
       
   104             }
       
   105         }
       
   106         return $heads;
       
   107     }
       
   108 
       
   109     function get_my_heads_values($user, $parent)
       
   110     {
       
   111         $this->db->select('asertoj.id,asertoj.assert,asertoj.parent,values.value,values.influence,'
       
   112             .'values.calc_value, values.id as vid');
       
   113         $this->db->from('asertoj');
       
   114         $this->db->join('values', 'values.assertion = asertoj.id');
       
   115         $this->db->where('values.user', $user);
       
   116         $this->db->where('asertoj.parent', $parent);
       
   117 
       
   118         $query = $this->db->get();
       
   119         return $query->result_array();
       
   120     }
       
   121 
       
   122     function get_assertion($userid1, $userid2, $id)
       
   123     {
       
   124         $this->db->select('assert,context,parent');
       
   125         $this->db->from('asertoj');
       
   126         $this->db->where('id', $id);
       
   127         $query = $this->db->get();
       
   128         $qresult = $query->row_array();
       
   129 
       
   130         $result['id'] = $id;
       
   131         $result['text'] = $qresult['assert'];
       
   132         $result['context'] = $qresult['context'];
       
   133         $result['parent'] = $qresult['parent'];
       
   134 
       
   135         $this->db->select('id,value,calc_value,influence');
       
   136         $this->db->from('values');
       
   137         $this->db->where('assertion', $id);
       
   138         $this->db->where('user', $userid1);
       
   139         $query = $this->db->get();
       
   140         if ($query->num_rows() > 0)
       
   141         {
       
   142             $qresult = $query->row_array();
       
   143             $result['vid'] = $qresult['id'];
       
   144             if ($qresult['value'] != NULL)
       
   145                 $result['value1'] = $qresult['value'];
       
   146             if ($qresult['influence'] != NULL)
       
   147                 $result['influence1'] = $qresult['influence'];
       
   148             if ($qresult['calc_value'] != NULL)
       
   149                 $result['calc_value1'] = $qresult['calc_value'];
       
   150         }
       
   151 
       
   152         $this->db->select('value,calc_value,influence');
       
   153         $this->db->from('values');
       
   154         $this->db->where('assertion', $id);
       
   155         $this->db->where('user', $userid2);
       
   156         $query = $this->db->get();
       
   157         if ($query->num_rows() > 0)
       
   158         {
       
   159             $qresult = $query->row_array();
       
   160             if ($qresult['value'] != NULL)
       
   161                 $result['value2'] = $qresult['value'];
       
   162             if ($qresult['influence'] != NULL)
       
   163                 $result['influence2'] = $qresult['influence'];
       
   164             if ($qresult['calc_value'] != NULL)
       
   165                 $result['calc_value2'] = $qresult['calc_value'];
       
   166         }
       
   167 
       
   168         return $result;
       
   169     }
       
   170 
       
   171     function get_subasserts($parent, $user)
       
   172     {
       
   173         $this->db->select('asertoj.id,asertoj.assert,values.value,'
       
   174             .'values.calc_value,values.influence, values.id as vid');
       
   175         $this->db->from('asertoj');
       
   176         $this->db->join('values', 'values.assertion = asertoj.id');
       
   177         $this->db->where('values.user', $user);
       
   178         $this->db->where('asertoj.parent', $parent);
       
   179 
       
   180         $query = $this->db->get();
       
   181         return $query->result_array();
       
   182     }
       
   183 
       
   184     function get_preassertions($userid1, $userid2, $id)
       
   185     {
       
   186         $result = array();
       
   187         do
       
   188         {
       
   189             $assertion = $this->get_assertion($userid1, $userid2, $id);
       
   190             $id = $assertion['parent'];
       
   191             $result[] = $assertion;
       
   192         } while($id != NULL);
       
   193 
       
   194         // We already show the main assert, so don't need in the preasserts
       
   195         unset($result[0]);
       
   196 
       
   197         return array_reverse($result);
       
   198     }
       
   199 
       
   200     function get_other_subasserts($parent, $user)
       
   201     {
       
   202         $query = $this->db->get_where('asertoj',
       
   203             array('user !=' => $user,
       
   204                   'parent' => $parent));
       
   205         return $query->result();
       
   206     }
       
   207 
       
   208     function recalc_user_influences($user,$parent)
       
   209     {
       
   210         $this->db->select('values.id,values.influence');
       
   211         $this->db->from('values');
       
   212         $this->db->join('asertoj','values.assertion = asertoj.id');
       
   213         $this->db->where('asertoj.parent',$parent);
       
   214         $this->db->where('values.user', $user);
       
   215         $query = $this->db->get();
       
   216 
       
   217         // Remap the influences
       
   218         if ($query->num_rows() > 0)
       
   219         {
       
   220             $qresult = $query->result_array();
       
   221 
       
   222             $sum_influence = 0;
       
   223 
       
   224             if ($parent != NULL)
       
   225             {
       
   226                 foreach($qresult as $row)
       
   227                 {
       
   228                     $sum_influence += abs($row['influence']);
       
   229                 }
       
   230             }
       
   231 
       
   232             // Remap as needed between a total of -10 and 10
       
   233             foreach($qresult as $row)
       
   234             {
       
   235                 if ($parent != NULL)
       
   236                 {
       
   237                     $newinfluence = $row['influence'] / $sum_influence;
       
   238                     $query2 = $this->db->where('id', $row['id']);
       
   239                     $query2->update('values', array(
       
   240                                 'influence' => $newinfluence));
       
   241                 }
       
   242                 $this->recalc_user_influences($user,$row['id']);
       
   243             }
       
   244         }
       
   245     }
       
   246 
       
   247     function get_user_calc_value($user, $parent, $orig_value)
       
   248     {
       
   249         $this->db->select('values.id,values.value,values.influence');
       
   250         $this->db->from('values');
       
   251         $this->db->join('asertoj','values.assertion = asertoj.id');
       
   252         $this->db->where('asertoj.parent',$parent);
       
   253         $this->db->where('values.user', $user);
       
   254         $query = $this->db->get();
       
   255 
       
   256         if ($query->num_rows() > 0)
       
   257         {
       
   258             $qresult = $query->result_array();
       
   259 
       
   260             // Calculate the calc_value
       
   261             $val = 0;
       
   262             foreach($qresult as $row)
       
   263             {
       
   264                 if ($row['influence'] >= 0)
       
   265                     $val += $row['influence'] * $this->get_user_calc_value($user,
       
   266                         $row['id'], $row['value']);
       
   267                 else
       
   268                     $val += $row['influence'] * ($this->get_user_calc_value($user,
       
   269                         $row['id'], $row['value']) - 1);
       
   270             }
       
   271         }
       
   272         else
       
   273         {
       
   274             $val = NULL;
       
   275         }
       
   276 
       
   277         // Set the NULL calc_value to those without subassertions,
       
   278         // and the proper value to those with subassertions.
       
   279         if ($parent != NULL)
       
   280         {
       
   281             $query2 = $this->db->where('id', $parent);
       
   282             $query2->update('values', array(
       
   283                         'calc_value' => $val, 'user' => $user));
       
   284         }
       
   285 
       
   286         if ($val == NULL)
       
   287             return $orig_value;
       
   288         else
       
   289             return $val;
       
   290     }
       
   291 
       
   292     function recalculate($user)
       
   293     {
       
   294         // Get all heads calculated
       
   295         $this->recalc_user_influences($user, NULL);
       
   296         $this->get_user_calc_value($user, NULL, 0);
       
   297     }
       
   298 
       
   299     function insert_assertion($user, $inputdata)
       
   300     {
       
   301         $assertdata = array('assert' => $inputdata['assert']);
       
   302         // concat the 'context', if provided.
       
   303         if (isset($inputdata['context']))
       
   304             $assertdata += array('context' => $inputdata['context']);
       
   305         // concat the 'parent', if provided.
       
   306         if (isset($inputdata['parent']))
       
   307             $assertdata += array('parent' => $inputdata['parent']);
       
   308         $this->db->insert('asertoj', $assertdata);
       
   309         $this->db->select('LAST_INSERT_ID()');
       
   310         $query = $this->db->get();
       
   311         $lastid = array_values($query->row_array());
       
   312         $lastid = $lastid[0];
       
   313 
       
   314         $valuesdata = array('assertion' => $lastid,
       
   315             'value' => $inputdata['value'],
       
   316             'user' => $user);
       
   317         // concat the 'influence', if provided.
       
   318         if (isset($inputdata['influence']))
       
   319             $valuesdata += array('influence' => $inputdata['influence']);
       
   320         $this->db->insert('values', $valuesdata);
       
   321     }
       
   322 
       
   323     function modify_values($user, $inputdata)
       
   324     {
       
   325         print_r($inputdata);
       
   326         $valuesdata = array('value' => $inputdata['value']);
       
   327         if (isset($inputdata['influence']))
       
   328             $valuesdata = array_merge($valuesdata,array('influence' => $inputdata['influence']));
       
   329 
       
   330         $this->db->where('id', $inputdata['valueid']);
       
   331         $this->db->update('values', $valuesdata);
       
   332     }
       
   333 
       
   334     function remove_value($user, $inputdata)
       
   335     {
       
   336         $this->db->where('id', $inputdata['valueid']);
       
   337         $this->db->delete('values');
       
   338     }
       
   339 
       
   340     function add_value($user, $inputdata)
       
   341     {
       
   342         $valuesdata = array('value' => $inputdata['value']);
       
   343         $valuesdata += array('assertion' => $inputdata['assertid']);
       
   344         $valuesdata += array('user' => $user);
       
   345         if (isset($inputdata['influence']))
       
   346             $valuesdata += array('influence' => $inputdata['influence']);
       
   347 
       
   348         $this->db->insert('values', $valuesdata);
       
   349     }
       
   350 }
       
   351 
       
   352 ?>