source: lliurex-jocomunico/trunk/fuentes/lliurex-jocomunico.install/var/lib/application/models/Lexicon.php @ 5728

Last change on this file since 5728 was 5728, checked in by joamuran, 3 years ago

Added zero-installed and updated jocomunico

  • Property svn:executable set to *
File size: 71.0 KB
Line 
1<?php
2class Lexicon extends CI_Model {
3    function __construct()
4    {
5        // Call the Model constructor
6        parent::__construct();
7       
8        $this->load->library('Myword');
9    }
10    /* CHECKS IF THE USER EXISTS
11     *
12     * Per la interfície: Funcions de validar usuari,
13     * per fer els LLISTATS de PARAULES i per CONSTRUIR
14     * la FRASE
15     */
16   
17    function validar_usuari()
18    {
19        $usuari = $this->input->post('usuari', true);
20        $pass = md5($this->input->post('pass', true));
21        $output = array();
22        $this->db->where('SUname', $usuari);
23        $this->db->where('pswd', $pass);
24       
25        $query = $this->db->get('SuperUser');
26       
27        if ($query->num_rows() > 0) {
28           
29            // Get user data and user config data
30            $this->db->from('SuperUser');
31            $this->db->join('User', 'SuperUser.cfgDefUser = User.ID_User');
32            $this->db->join('Languages', 'SuperUser.cfgDefUser = User.ID_User AND User.ID_ULanguage = Languages.ID_Language', 'right');
33            $this->db->where('SUname', $usuari);
34            $query2 = $this->db->get()->result_array();
35            $userConfig = $query2[0];
36           
37            // Save user config data in the COOKIES
38            $this->session->set_userdata('idusu', $userConfig["ID_User"]);
39            $this->session->set_userdata('uname', $userConfig["SUname"]);
40            $this->session->set_userdata('ulanguage', $userConfig["cfgExpansionLanguage"]);
41            //MODIF: Cuando lo juntemos con jose dará fallo. Jose tiene que cambiar "uinterfacelangauge" por este
42            $this->session->set_userdata('uinterfacelangauge', $userConfig["ID_ULanguage"]);
43            $this->session->set_userdata('uinterfacelangtype', $userConfig["type"]);
44            $this->session->set_userdata('uinterfacelangnadjorder', $userConfig["nounAdjOrder"]);
45            $this->session->set_userdata('uinterfacelangncorder', $userConfig["nounComplementOrder"]);
46            $this->session->set_userdata('uinterfacelangabbr', $userConfig["languageabbr"]);
47            $this->session->set_userdata('cfgAutoEraseSentenceBar', $userConfig["cfgAutoEraseSentenceBar"]);
48            $this->session->set_userdata('isfem', $userConfig["cfgIsFem"]);
49            $this->session->set_userdata('cfgExpansionOnOff', $userConfig["cfgExpansionOnOff"]);
50
51            // Save Expansion language in the COOKIES
52            $this->db->select('canExpand');
53            $this->db->where('ID_Language', $userConfig["cfgExpansionLanguage"]);
54            $query3 = $this->db->get('Languages');
55           
56            if ($query3->num_rows() > 0) {
57                $aux = $query3->result();
58                $canExpand = $aux[0]->canExpand;
59               
60                if ($canExpand == '1'){
61                    $this->session->set_userdata('ulangabbr', $userConfig["languageabbr"]);
62                }else{
63                    $this->session->set_userdata('ulangabbr', 'ES');
64                }
65            }
66                       
67            return true;
68        }
69        else return false;
70    }
71    /*
72     * GETS THE NOUNS OF THE TYPE $type FROM THE DATABASE
73     */
74    function getNoms($tipus)
75    {
76        $output = array();
77        $userlanguage = $this->session->userdata('ulangabbr');
78        for ($i=0; $i<count($tipus); $i++) {
79            $this->db->or_where('class', $tipus[$i]);
80        }
81        $this->db->order_by('Name'.$userlanguage.'.nomtext', 'asc');
82        $this->db->join('NameClass'.$userlanguage, 'NameClass'.$userlanguage.'.nameid = Name'.$userlanguage.'.nameid', 'left');
83        $this->db->join('Pictograms', 'Name'.$userlanguage.'.nameid = Pictograms.pictoid', 'left');
84        $this->db->group_by('Pictograms.pictoid');
85        $query = $this->db->get('Name'.$userlanguage);
86       
87        if ($query->num_rows() > 0) {
88            $output = $query->result();
89        }
90        else $output = null;
91       
92        return $output;
93    }
94   
95    function getVerbs()
96    {
97        $output = array();
98        $userlanguage = $this->session->userdata('ulangabbr');
99        $this->db->where('actiu', '1');
100        $this->db->order_by('verbtext', 'asc');
101        $this->db->join('Pictograms', 'Verb'.$userlanguage.'.verbid = Pictograms.pictoid', 'left');
102        $this->db->group_by('Pictograms.pictoid');
103        $query = $this->db->get('Verb'.$userlanguage);
104        if ($query->num_rows() > 0) {
105            $output = $query->result();
106        }
107        else $output = null;
108        return $output;
109    }
110   
111    function getAdjs($tipus)
112    {
113        $output = array();
114        $userlanguage = $this->session->userdata('ulangabbr');
115        for ($i=0; $i<count($tipus); $i++) {
116            $this->db->or_where('class', $tipus[$i]);
117        }
118        $this->db->order_by('Adjective'.$userlanguage.'.masc', 'asc');
119        $this->db->join('AdjClass'.$userlanguage, 'AdjClass'.$userlanguage.'.adjid = Adjective'.$userlanguage.'.adjid', 'left');
120        $this->db->join('Pictograms', 'Adjective'.$userlanguage.'.adjid = Pictograms.pictoid', 'left');
121        $this->db->group_by('Pictograms.pictoid');
122        $query = $this->db->get('Adjective'.$userlanguage);
123        if ($query->num_rows() > 0) {
124            $output = $query->result();
125        }
126        else $output = null;
127        return $output;
128    }
129   
130    function getAdvs($tipus)
131    {
132        $output = array();
133        $userlanguage = $this->session->userdata('ulangabbr');
134        for ($i=0; $i<count($tipus); $i++) {
135            $this->db->or_where('type', $tipus[$i]);
136        }
137        $this->db->order_by('Adverb'.$userlanguage.'.advtext', 'asc');
138        $this->db->join('AdvType'.$userlanguage, 'AdvType'.$userlanguage.'.advid = Adverb'.$userlanguage.'.advid', 'left');
139        $this->db->join('Pictograms', 'Adverb'.$userlanguage.'.advid = Pictograms.pictoid', 'left');
140        $this->db->group_by('Pictograms.pictoid');
141        $query = $this->db->get('Adverb'.$userlanguage);
142        if ($query->num_rows() > 0) {
143            $output = $query->result();
144        }
145        else $output = null;
146        return $output;
147    }
148   
149    function getModifs($tipus)
150    {
151        $output = array();
152        $userlanguage = $this->session->userdata('ulangabbr');
153        for ($i=0; $i<count($tipus); $i++) {
154            $this->db->or_where('scope', $tipus[$i]);
155        }
156        $this->db->order_by('masc', 'asc');
157        $this->db->join('Pictograms', 'Modifier'.$userlanguage.'.modid = Pictograms.pictoid', 'left');
158        $this->db->group_by('Pictograms.pictoid');
159        $query = $this->db->get('Modifier'.$userlanguage);
160        if ($query->num_rows() > 0) {
161            $output = $query->result();
162        }
163        else $output = null;
164        return $output;
165    }
166   
167    function getExprs($tipus)
168    {
169        $output = array();
170        $userlanguage = $this->session->userdata('ulangabbr');
171        for ($i=0; $i<count($tipus); $i++) {
172            $this->db->or_where('type', $tipus[$i]);
173        }
174        $this->db->order_by('Expressions'.$userlanguage.'.exprtext', 'asc');
175        $this->db->join('ExprType'.$userlanguage, 'ExprType'.$userlanguage.'.exprid = Expressions'.$userlanguage.'.exprid', 'left');
176        $this->db->join('Pictograms', 'Expressions'.$userlanguage.'.exprid = Pictograms.pictoid', 'left');
177        $this->db->group_by('Pictograms.pictoid');
178        $query = $this->db->get('Expressions'.$userlanguage);
179        if ($query->num_rows() > 0) {
180            $output = $query->result();
181        }
182        else $output = null;
183        return $output;
184    }
185   
186    function getPartPregunta()
187    {
188        $output = array();
189        $userlanguage = $this->session->userdata('ulangabbr');
190        $this->db->order_by('parttext', 'asc');
191        $this->db->join('Pictograms', 'QuestionPart'.$userlanguage.'.questid = Pictograms.pictoid', 'left');
192        $this->db->group_by('Pictograms.pictoid');
193        $query = $this->db->get('QuestionPart'.$userlanguage);
194        if ($query->num_rows() > 0) {
195            $output = $query->result();
196        }
197        else $output = null;
198        return $output;
199    }
200   
201    /**
202     * FUNCIONS PELS DIFERENTS SISTEMES D'INPUT
203     */
204    function insertarFraseDesDArxiu($frase)
205    {
206        /*
207         * Fer split, per cada paraula: passar els caracters a minúscula
208         * mirar si és un modificador de noms ($),
209         * de tipus de frase (#) o de temps verbals (@). Aquests dos últims els guardem
210         * per introduïr-los després com a propietats de la frase.
211         * Les paraules normals les busquem i fem un afegirParaula
212         * Els modificadors de nom, fem un afegirModifNom
213         * Un cop introduïdes totes les paraules fem un insertarFrase amb els canvis
214         * que calgui fer al codi
215         */
216       
217        $idusu = $this->session->userdata('idusu');
218        $userlanguage = $this->session->userdata('ulanguage'); // en número i no en abbr 'CA'...
219       
220        $frase = strtolower($frase);
221        // eliminem tots els espais
222        $frase = preg_replace('/\s+/', '', $frase);
223        $paraules = explode("/", $frase);
224       
225        // Després de l'última barra / no hi ha cap paraula
226        $numparaules = count($paraules)-1;
227        $paraulesbones = 0;
228       
229        $tipusfrase = "defecte";
230        $tempsverbal = "defecte";
231        $negativa = false;
232       
233        $nounentered = false;
234        $queuedmodif = false;
235        $queuedmodifs = array();
236               
237        for ($i=0; $i<$numparaules; $i++) {
238           
239            $paraula = $paraules[$i];
240            $primercaracter = $paraula[0];
241               
242            // si és un número vol dir que utilitza el format d'entrada d'ID's de pictograma
243            if ($primercaracter == "{") {
244               
245                                $paraula = substr($paraula, 1); // treiem el primer caràcter que és {
246                                $paraula = substr($paraula, 0, -1); // treiem l'últim caràcter que és }
247                               
248                $pictoid = (int)$paraula; // l'id és la paraula introduïda
249                               
250                $this->db->where('pictoid', $pictoid);
251                $query = $this->db->get('Pictograms');
252               
253                if ($query->num_rows() > 0) {
254                   
255                    $aux = $query->result();
256                    $infoparaula = $aux[0];
257               
258                    $taula = $infoparaula->pictoType;
259                    // afegim la paraula a la frase de l'usuari
260                    $this->afegirParaula($idusu, $pictoid, $taula);
261                    $paraulesbones++;
262                    if ($taula == "name" || $taula == "adj") {
263                        // si hi havia modificadors en espera que s'havien introduït abans del nom o adj
264                        if ($queuedmodif) {
265                            for ($j=0; $j < count($queuedmodifs); $j++) {
266                                $this->afegirModifNom($idusu, $queuedmodifs[$j]);
267                            }
268                            // reiniciem l'array
269                            $queuedmodif = false;
270                            unset($queuedmodifs);
271                            $queuedmodifs = array();
272                        }
273                        else {
274                            // indiquem que hi ha un nom a on s'hi poden afegir els modificadors
275                            $nounentered = true;
276                        }
277                    }
278                    // si és un altre tipus de paraula
279                    else {
280                        // els modificadors de nom han d'anar engatxats al nom, així que si la paraula
281                        // anterior és diferent d'un nom, no volem que s'hi associïn els modificadors de nom
282                        $nounentered = false;
283                    }
284                }
285            }
286           
287            // si no és un número poden ser modificadors, tipus de frase, temps verbals, negacions
288            // o poden ser pictogrames introduïts en format text
289            else {
290               
291                switch ($primercaracter) {
292                               
293                    case "$":
294                        $paraula = substr($paraula, 1);
295                        // si ja s'ha introduït un nom o adj, hi associem el modificador
296                        if ($nounentered) {
297                            $this->afegirModifNom($idusu, $paraula);
298                        }
299                        // si no esperarem a que hi hagi algun nom per associar-hi
300                        // els modificadors que estiguin a la cua
301                        else {
302                            $queuedmodif = true;
303                            $queuedmodifs[] = $paraula;
304                        }
305                        break;
306                    case "#":
307                        $paraula = substr($paraula, 1);
308                        $tipusfrase = $paraula;
309                        break;
310                    case "@":
311                        $paraula = substr($paraula, 1);
312                        $tempsverbal = $paraula;
313                        break;
314                    case "%":
315                        $paraula = substr($paraula, 1);
316                        $negativa = true;
317                        break;
318                    default:
319                        $this->db->where_in('Pictograms.ID_PUser', array('1', $this->session->userdata('idusu')));
320                        $this->db->where('pictotext', $paraula);
321                        $this->db->where('languageid', $userlanguage);
322                        $this->db->join('Pictograms', 'Pictograms.pictoid = PictogramsLanguage.pictoid', 'left');
323                        $query = $this->db->get('PictogramsLanguage');
324                        if ($query->num_rows() > 0) {
325                            $aux = $query->result();
326                            $infoparaula = $aux[0];
327                            // si hi ha més d'una paraula que fa match (2), fem les comparacions
328                            // per veure amb quina de les dues ens quedem
329                            if (count($aux) > 1) {
330                                $type1 = $aux[0]->pictoType;
331                                $type2 = $aux[1]->pictoType;
332                                switch ($type1) {
333                                    case "name":
334                                        switch ($type2) {
335                                            case "name":
336                                                $infoparaula = $aux[0];
337                                                break;
338                                            case "verb":
339                                                $infoparaula = $aux[1];
340                                                break;
341                                            case "adj":
342                                                $infoparaula = $aux[1];
343                                                break;
344                                            case "adv":
345                                                $infoparaula = $aux[1];
346                                                break;
347                                            case "expression":
348                                                $infoparaula = $aux[0];
349                                                break;
350                                            case "modifier":
351                                                $infoparaula = $aux[1];
352                                                break;
353                                            case "questpart":
354                                                $infoparaula = $aux[1];
355                                                break;
356                                            default:
357                                                $infoparaula = $aux[0];
358                                                break;
359                                        }
360                                        break;
361                                    case "verb":
362                                        switch ($type2) {
363                                            case "name":
364                                                $infoparaula = $aux[0];
365                                                break;
366                                            case "verb":
367                                                $infoparaula = $aux[0];
368                                                break;
369                                            case "adj":
370                                                $infoparaula = $aux[0];
371                                                break;
372                                            case "adv":
373                                                $infoparaula = $aux[0];
374                                                break;
375                                            case "expression":
376                                                $infoparaula = $aux[0];
377                                                break;
378                                            case "modifier":
379                                                $infoparaula = $aux[0];
380                                                break;
381                                            case "questpart":
382                                                $infoparaula = $aux[0];
383                                                break;
384                                            default:
385                                                $infoparaula = $aux[0];
386                                                break;
387                                        }
388                                        break;
389                                    case "adj":
390                                        switch ($type2) {
391                                            case "name":
392                                                $infoparaula = $aux[0];
393                                                break;
394                                            case "verb":
395                                                $infoparaula = $aux[1];
396                                                break;
397                                            case "adj":
398                                                $infoparaula = $aux[0];
399                                                break;
400                                            case "adv":
401                                                $infoparaula = $aux[1];
402                                                break;
403                                            case "expression":
404                                                $infoparaula = $aux[0];
405                                                break;
406                                            case "modifier":
407                                                $infoparaula = $aux[1];
408                                                break;
409                                            case "questpart":
410                                                $infoparaula = $aux[1];
411                                                break;
412                                            default:
413                                                $infoparaula = $aux[0];
414                                                break;
415                                        }
416                                        break;
417                                    case "adv":
418                                        switch ($type2) {
419                                            case "name":
420                                                $infoparaula = $aux[0];
421                                                break;
422                                            case "verb":
423                                                $infoparaula = $aux[1];
424                                                break;
425                                            case "adj":
426                                                $infoparaula = $aux[0];
427                                                break;
428                                            case "adv":
429                                                $infoparaula = $aux[0];
430                                                break;
431                                            case "expression":
432                                                $infoparaula = $aux[0];
433                                                break;
434                                            case "modifier":
435                                                $infoparaula = $aux[1];
436                                                break;
437                                            case "questpart":
438                                                $infoparaula = $aux[0];
439                                                break;
440                                            default:
441                                                $infoparaula = $aux[0];
442                                                break;
443                                        }
444                                        break;
445                                    case "expression":
446                                        switch ($type2) {
447                                            case "name":
448                                                $infoparaula = $aux[1];
449                                                break;
450                                            case "verb":
451                                                $infoparaula = $aux[1];
452                                                break;
453                                            case "adj":
454                                                $infoparaula = $aux[1];
455                                                break;
456                                            case "adv":
457                                                $infoparaula = $aux[1];
458                                                break;
459                                            case "expression":
460                                                $infoparaula = $aux[1];
461                                                break;
462                                            case "modifier":
463                                                $infoparaula = $aux[1];
464                                                break;
465                                            case "questpart":
466                                                $infoparaula = $aux[1];
467                                                break;
468                                            default:
469                                                $infoparaula = $aux[0];
470                                                break;
471                                        }
472                                        break;
473                                    case "modifier":
474                                        switch ($type2) {
475                                            case "name":
476                                                $infoparaula = $aux[0];
477                                                break;
478                                            case "verb":
479                                                $infoparaula = $aux[1];
480                                                break;
481                                            case "adj":
482                                                $infoparaula = $aux[0];
483                                                break;
484                                            case "adv":
485                                                $infoparaula = $aux[0];
486                                                break;
487                                            case "expression":
488                                                $infoparaula = $aux[0];
489                                                break;
490                                            case "modifier":
491                                                $infoparaula = $aux[0];
492                                                break;
493                                            case "questpart":
494                                                $infoparaula = $aux[0];
495                                                break;
496                                            default:
497                                                $infoparaula = $aux[0];
498                                                break;
499                                        }
500                                        break;
501                                    case "questpart":
502                                        switch ($type2) {
503                                            case "name":
504                                                $infoparaula = $aux[0];
505                                                break;
506                                            case "verb":
507                                                $infoparaula = $aux[1];
508                                                break;
509                                            case "adj":
510                                                $infoparaula = $aux[0];
511                                                break;
512                                            case "adv":
513                                                $infoparaula = $aux[1];
514                                                break;
515                                            case "expression":
516                                                $infoparaula = $aux[0];
517                                                break;
518                                            case "modifier":
519                                                $infoparaula = $aux[1];
520                                                break;
521                                            case "questpart":
522                                                $infoparaula = $aux[0];
523                                                break;
524                                            default:
525                                                $infoparaula = $aux[0];
526                                                break;
527                                        }
528                                        break;
529                                    default:
530                                        $infoparaula = $aux[0];
531                                        break;
532                                }
533                            }
534                            $pictoid = $infoparaula->pictoid;
535                            $taula = $infoparaula->pictoType;
536                            $this->afegirParaula($idusu, $pictoid, $taula);
537                            $paraulesbones++;
538                            if ($taula == "name" || $taula == "adj") {
539                                // si hi havia modificadors en espera que s'havien introduït abans del nom o adj
540                                if ($queuedmodif) {
541                                    for ($j=0; $j < count($queuedmodifs); $j++) {
542                                        $this->afegirModifNom($idusu, $queuedmodifs[$j]);
543                                    }
544                                    // reiniciem l'array
545                                    $queuedmodif = false;
546                                    unset($queuedmodifs);
547                                    $queuedmodifs = array();
548                                }
549                                else {
550                                    // indiquem que hi ha un nom a on s'hi poden afegir els modificadors
551                                    $nounentered = true;
552                                }
553                            }
554                            // si és un altre tipus de paraula
555                            else {
556                                // els modificadors de nom han d'anar engatxats al nom, així que si la paraula
557                                // anterior és diferent d'un nom, no volem que s'hi associïn els modificadors de nom
558                                $nounentered = false;
559                            }
560                        }
561                        break;
562                }
563            }
564        } // Fi del for per cada paraula
565       
566        // si s'han introduït paraules, aleshores afegim la frase a la BBDD per expandir-la
567        if ($paraulesbones > 0) {
568            $this->passarFraseABBDD($idusu, $tipusfrase, $tempsverbal, $negativa);
569        }
570    }
571   
572    /**
573     * INSERTS A PICTOGRAM TO THE DB. AVOIDS ENTERING TWO EQUAL CONSECUTIVE PICTOGRAMS
574     * @param type $idusu
575     * @param type $idparaula
576     * @param type $imgtemp Es fa servir amb la nova interfície, per si l'usuari ha modificat
577     * la img per defecte del pictograma es guarda aquesta imatge.
578     */
579    function afegirParaula($idusu, $idparaula, $imgtemp)
580    {
581        $paraula = array();
582        $pictoid = -1;
583        $coord = '0';
584       
585        // gets the last inserted pictogram
586        $this->db->where('ID_RSTPUser', $idusu);
587        $this->db->order_by('ID_RSTPSentencePicto', 'desc');
588        $query = $this->db->get('R_S_TempPictograms', 1, 0);
589       
590        if ($query->num_rows() > 0) {
591            $paraula = $query->result();
592            $pictoid = $paraula[0]->pictoid;
593            $coord = $paraula[0]->coordinated;
594        }
595       
596        // if it's not equal to the last inserted pictogram
597        if (($idparaula != $pictoid) || $coord != '0') {
598            $data = array(
599                'pictoid' => $idparaula,
600                'ID_RSTPUser' => $idusu,
601                'imgtemp' => $imgtemp,
602            );
603            $this->db->insert('R_S_TempPictograms', $data);
604        }
605    }
606    /*
607     * GET THE WORDS ALREADY ENTERED IN THE USER INTERFACE
608     */
609    function recuperarFrase($idusu) // Per la interfície d'introduir la frase
610    {
611        $output = array();
612        $userlanguage = $this->session->userdata('ulangabbr');
613       
614        $paraules = array();
615        $this->db->where_in('Pictograms.ID_PUser', array('1', $this->session->userdata('idusu')));
616        $this->db->where('ID_RSTPUser', $idusu);
617        $this->db->join('Pictograms', 'Pictograms.pictoid = R_S_TempPictograms.pictoid', 'left');
618        $this->db->order_by('ID_RSTPSentencePicto', 'asc');
619        $query = $this->db->get('R_S_TempPictograms');
620        $beforeverb = true;
621        $beforeverb2 = true;
622        $countverb = 0;
623        if ($query->num_rows() > 0) {
624            $paraules = $query->result();
625            for ($i=0; $i<count($paraules); $i++) {
626                $output[$i] = array();
627                // L'estructura de dades és una array multidimensional. A cada casella
628                // hi ha una tupla (array): a l'element 0 hi ha el tipus de paraula (Nom, Adjectiu, etc),
629                // a l'element 1 un array amb la info de la paraula (pot ser que tingui més d'una entrada
630                // si la paraula té vàries classes), a l'element 2 hi ha l'id de la Word Entry, al 3
631                // hi ha si té modificador de plural i al 4 si en té de femení. El 3 i 4 són només per Noms
632                // i Adjectius (ja que de vegades poden actuar com a noms). El 5 és per si està coordinat
633                // amb la següent paraula (només si aquesta és del mateix tipus)
634                switch($paraules[$i]->pictoType)
635                {
636                    case 'name':
637                        $this->db->where('Name'.$userlanguage.'.nameid', $paraules[$i]->pictoid);
638                        $this->db->join('NameClass'.$userlanguage, 'NameClass'.$userlanguage.'.nameid = Name'.$userlanguage.'.nameid', 'left');
639                        $query2 = $this->db->get('Name'.$userlanguage);
640                        if ($query2->num_rows() > 0) {
641                            $word = new Myword();
642                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
643                            $output[$i] = $word;
644                        }
645                        else $output[$i] = null;
646                        break;
647                    case 'verb':
648                        $countverb += 1;
649                       
650                        if ($countverb == 1) $beforeverb = false;
651                        else if ($countverb == 2) $beforeverb2 = false;
652                       
653                        $this->db->where('Verb'.$userlanguage.'.verbid', $paraules[$i]->pictoid);
654                        $this->db->join('Pattern'.$userlanguage, 'Pattern'.$userlanguage.'.verbid = Verb'.$userlanguage.'.verbid', 'left');
655                        $query2 = $this->db->get('Verb'.$userlanguage);
656                        if ($query2->num_rows() > 0) {
657                            $word = new Myword();
658                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
659                            $output[$i] = $word;
660                        }
661                        else $output[$i] = null;
662                        break;
663                   
664                    case 'adj':
665                        $this->db->where('Adjective'.$userlanguage.'.adjid', $paraules[$i]->pictoid);
666                        $this->db->join('AdjClass'.$userlanguage, 'AdjClass'.$userlanguage.'.adjid = Adjective'.$userlanguage.'.adjid', 'left');
667                        $query2 = $this->db->get('Adjective'.$userlanguage);
668                        if ($query2->num_rows() > 0) {
669                            $word = new Myword();
670                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
671                            $output[$i] = $word;
672                        }
673                        else $output[$i] = null;
674                        break;
675                   
676                    case 'adv':
677                        $this->db->where('Adverb'.$userlanguage.'.advid', $paraules[$i]->pictoid);
678                        $this->db->join('AdvType'.$userlanguage, 'AdvType'.$userlanguage.'.advid = Adverb'.$userlanguage.'.advid', 'left');
679                        $query2 = $this->db->get('Adverb'.$userlanguage);
680                        if ($query2->num_rows() > 0) {
681                            $word = new Myword();
682                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
683                            $output[$i] = $word;
684                        }
685                        else $output[$i] = null;
686                       
687                        break;
688                   
689                    case 'expression':
690                        $this->db->where('Expressions'.$userlanguage.'.exprid', $paraules[$i]->pictoid);
691                        $this->db->join('ExprType'.$userlanguage, 'ExprType'.$userlanguage.'.exprid = Expressions'.$userlanguage.'.exprid', 'left');
692                        $query2 = $this->db->get('Expressions'.$userlanguage);
693                        if ($query2->num_rows() > 0) {
694                            $word = new Myword();
695                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
696                            $output[$i] = $word;
697                        }
698                        else $output[$i] = null;
699                        break;
700                   
701                    case 'modifier':
702                        $this->db->where('modid', $paraules[$i]->pictoid);
703                        $query2 = $this->db->get('Modifier'.$userlanguage);
704                        if ($query2->num_rows() > 0) {
705                            $word = new Myword();
706                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
707                            $output[$i] = $word;
708                        }
709                        else $output[$i] = null;
710                        break;
711                   
712                    case 'questpart':
713                        $this->db->where('questid', $paraules[$i]->pictoid);
714                        $query2 = $this->db->get('QuestionPart'.$userlanguage);
715                        if ($query2->num_rows() > 0) {
716                            $word = new Myword();
717                            $word->initialise($paraules[$i], $query2->result(), $i, $beforeverb, $beforeverb2, true);
718                            $output[$i] = $word;
719                        }
720                        else $output[$i] = null;
721                        break;
722                    default:
723                        $output[$i] = null;
724                        break;
725                }
726            }
727        }
728        else $output = null;
729        return $output;
730    }
731    /*
732     * DELETE A WORD PREVIOUSLY ENTERED
733     */
734    function eliminarParaula($identry)
735    {
736        $this->db->where('ID_RSTPSentencePicto', $identry);
737        $this->db->delete('R_S_TempPictograms');
738    }
739    /*
740     * ADD MODIFIER TO A NOUN THAT WAS JUST ENTERED
741     */
742    function afegirModifNom($idusu, $modif)
743    {
744        $this->db->where('ID_RSTPUser', $idusu);
745        $query = $this->db->get('R_S_TempPictograms');
746        if ($query->num_rows() > 0) {
747            $aux = $query->result();
748            $nrows = $query->num_rows();
749            $identry = $aux[$nrows-1]->ID_RSTPSentencePicto;
750            if($modif=='pl') {
751                $data = array(
752                    'isplural' => '1',
753                );
754            }
755            if($modif=='fem') {
756                $data = array(
757                    'isfem' => '1',
758                );
759            }
760            if($modif=='i') {
761                $data = array(
762                    'coordinated' => '1',
763                );
764            }
765            $this->db->where('ID_RSTPSentencePicto', $identry);
766            $this->db->update('R_S_TempPictograms', $data);
767        }
768    }
769    /*
770     * SEND WORDS ENTERED BY THE USER TO THE DATABASE
771     */
772    function insertarFrase($idusu, $tipusfrase, $tense, $negativa)
773    {
774        $datestring = "%Y/%m/%d";
775        $time = time();
776        $avui = mdate($datestring, $time);
777        if ($negativa) $negativa = '1';
778        else $negativa = '0';
779       
780        // calculem l'string d'inputwords: és el llistat de paraules com apareixien
781        // a Elements Seleccionats, just abans de prémer Generar
782        $paraulesFrase = $this->recuperarFrase($idusu);
783       
784        // guardem les estadístiques de la frase
785        $this->addStatsX1($paraulesFrase, $idusu);
786        $this->addStatsX2($paraulesFrase, $idusu);
787        $this->addStatsX3($paraulesFrase, $idusu);
788       
789        $inputwords = "";
790       
791        // Hi afegirem també els ids, modifs, tipus de frases i tenses a l'string
792        // per imprimir per pantalla per DEBUG
793        $inputids = "";
794        for ($i=0; $i<count($paraulesFrase); $i++) {
795            if ($paraulesFrase[$i] != null) {
796                $word = $paraulesFrase[$i];
797                $inputwords .= $word->text;
798                $inputids .= "{".$word->id."}";
799               
800                /*switch($word->pictoType)
801                {
802                    case 'name':
803                        $inputids .= $word->nameid;
804                        break;
805                    case 'verb':
806                        $inputids .= $word->verbid;
807                        break;
808                    case 'adj':
809                        $inputids .= $word->adjid;
810                        break;
811                    case 'adv':
812                        $inputids .= $word->advid;
813                        break;
814                    case 'expression':
815                        $inputids .= $word->exprid;
816                        break;
817                    case 'modifier':
818                        $inputids .= $word->modid;
819                        break;
820                    case 'questpart':
821                        $inputids .= $word->questid;
822                        break;
823                    default:
824                        $inputids .= "";
825                        break;
826                }*/
827               
828                // SEGUIR AQUÍ AMB ELS PL FEM COORD I TIPUS DE FRASE I TENSES
829                if ($word->plural) $inputids .= " / \$pl";
830                if ($word->fem) $inputids .= " / \$fem";
831                if ($word->coord) $inputids .= " / \$i";
832               
833                if($word->plural || $word->fem || $word->coord) {
834                    $inputwords .= '(';
835                    if ($word->plural) $inputwords .= 'pl';
836                    if ($word->plural && ($word->fem || $word->coord)) $inputwords .= ', ';
837                    if ($word->fem) $inputwords .= 'fem';
838                    if ($word->fem && $word->coord) $inputwords .= ', ';
839                    if ($word->coord) $inputwords .= 'i';
840                    $inputwords .= ')';
841                } 
842                if ($i < (count($paraulesFrase) - 1)) $inputwords .= " / ";
843                if ($i < (count($paraulesFrase) - 1)) $inputids .= " / ";
844            }
845        }
846        $inputids .= " / #".$tipusfrase;
847        $inputids .= " / @".$tense;
848        if ($negativa) $inputids .= " / %no";
849        $inputids .= " /";
850       
851        $inputwords .="<br /><br />".$inputids;
852        $data = array(
853            'ID_SHUser' => $idusu,
854            'sentenceType' => $tipusfrase,
855            'isNegative' => $negativa,
856            'sentenceTense' => $tense,
857            'sentenceDate' => $avui,
858            'intendedSentence' => $this->input->post('fraseobj', true),
859            'sentenceFinished' => '1',
860            'inputWords' => $inputwords,
861            'inputIds' => $inputids,
862        );
863        $this->db->insert('S_Historic', $data);
864        $identry = $this->db->insert_id();
865        $this->db->where('ID_RSTPUser', $idusu);
866        $query = $this->db->get('R_S_TempPictograms');
867        if ($query->num_rows() > 0) {
868            foreach ($query->result() as $row) {
869                $data2 = array(
870                    'ID_RSHPSentence' => $identry,
871                    'pictoid' => $row->pictoid,
872                    'isplural' => $row->isplural,
873                    'isfem' => $row->isfem,
874                    'coordinated' => $row->coordinated,
875                    'imgtemp' => $row->imgtemp,
876                );
877                $this->db->insert('R_S_HistoricPictograms', $data2);
878            }
879        }
880        // Eliminar les paraules de la taula provisional
881        if ($this->session->userdata('cfgAutoEraseSentenceBar') == '1') {
882            $this->db->where('ID_RSTPUser', $idusu);
883            $this->db->delete('R_S_TempPictograms');
884        }
885    }
886   
887    /*
888     * SEND WORDS ENTERED FROM FILE BY THE USER TO THE DATABASE
889     */
890    function passarFraseABBDD($idusu, $tipusfrase, $tempsverbal, $negativa)
891    {
892        $datestring = "%Y/%m/%d";
893        $time = time();
894        $avui = mdate($datestring, $time);
895        if ($negativa) $negativa = '1';
896        else $negativa = '0';
897       
898        // calculem l'string d'inputwords: és el llistat de paraules com apareixien
899        // a Elements Seleccionats, just abans de prémer Generar
900        $paraulesFrase = $this->recuperarFrase($idusu);
901        $inputwords = "";
902        $inputids = "";
903        for ($i=0; $i<count($paraulesFrase); $i++) {
904            if ($paraulesFrase[$i] != null) {
905                $word = $paraulesFrase[$i];
906                $inputwords .= $word->text;
907               
908                $inputids .= "{".$word->id."}";
909                if ($word->plural) $inputids .= " / \$pl";
910                if ($word->fem) $inputids .= " / \$fem";
911                if ($word->coord) $inputids .= " / \$i";
912               
913                if($word->plural || $word->fem || $word->coord) {
914                    $inputwords .= '(';
915                    if ($word->plural) $inputwords .= 'pl';
916                    if ($word->plural && ($word->fem || $word->coord)) $inputwords .= ', ';
917                    if ($word->fem) $inputwords .= 'fem';
918                    if ($word->fem && $word->coord) $inputwords .= ', ';
919                    if ($word->coord) $inputwords .= 'i';
920                    $inputwords .= ')';
921                } 
922                if ($i < (count($paraulesFrase))) $inputwords .= " / ";
923                if ($i < (count($paraulesFrase) - 1)) $inputids .= " / ";
924            }
925        }
926       
927        $inputids .= " / #".$tipusfrase;
928        $inputids .= " / @".$tempsverbal;
929        if ($negativa) $inputids .= " / %no";
930        $inputids .= " /";
931       
932        $inputwords .="<br /><br />".$inputids;
933       
934        $data = array(
935            'ID_SHUser' => $idusu,
936            'sentenceType' => $tipusfrase,
937            'isNegative' => $negativa,
938            'sentenceTense' => $tempsverbal,
939            'sentenceDate' => $avui,
940            'intendedSentence' => "",
941            'sentenceFinished' => '1',
942            'inputWords' => $inputwords,
943            'inputIds' => $inputids,
944        );
945        $this->db->insert('S_Historic', $data);
946        $identry = $this->db->insert_id();
947        $this->db->where('ID_RSTPUser', $idusu);
948        $query = $this->db->get('R_S_TempPictograms');
949        if ($query->num_rows() > 0) {
950            foreach ($query->result() as $row) {
951                $data2 = array(
952                    'ID_RSHPSentence' => $identry,
953                    'pictoid' => $row->pictoid,
954                    'isplural' => $row->isplural,
955                    'isfem' => $row->isfem,
956                    'coordinated' => $row->coordinated,
957                    'imgtemp' => $row->imgtemp,
958                );
959                $this->db->insert('R_S_HistoricPictograms', $data2);
960            }
961        }
962        // Eliminar les paraules de la taula provisional
963        $this->db->where('ID_RSTPUser', $idusu);
964        $this->db->delete('R_S_TempPictograms');
965    }
966    /*
967     * Funcions pel PARSER
968     */
969   
970    /*
971     * GETS THE WORDS ENTERED BY THE USER IN THE LAST INPUT
972     */
973    function getLastSentence($idusu)
974    {
975        $output = array();
976        $userlanguage = $this->session->userdata('ulangabbr');
977       
978        $paraules = array();
979        $identry;
980        $beforeverb = true;
981        $beforeverb2 = true;
982        $countverb = 0;
983       
984        // per tractar les coordinacions de paraules amb "i" que seran transparents
985        // i quedaran enganxades a la paraula anterior
986        $paraulaprevia = null;
987        $ordre = -1;
988        $itrobada = false;
989        $ibona = false;
990       
991        $this->db->where('ID_SHUser', $idusu);
992        $this->db->order_by('ID_SHistoric', 'desc');
993        $query = $this->db->get('S_Historic');
994       
995        if ($query->num_rows() > 0) {
996            $aux = $query->result();
997           
998            $identry = $aux[0]->ID_SHistoric;
999        }
1000        else return null;
1001           
1002        $this->db->where_in('Pictograms.ID_PUser', array('1', $this->session->userdata('idusu')));
1003        $this->db->where('ID_RSHPSentence', $identry);
1004        $this->db->join('Pictograms', 'Pictograms.pictoid = R_S_HistoricPictograms.pictoid', 'left');
1005        $this->db->order_by('ID_RSHPSentencePicto', 'asc');
1006        $query = $this->db->get('R_S_HistoricPictograms');
1007        if ($query->num_rows() > 0) {
1008            $paraules = $query->result();
1009           
1010            for ($i=0; $i<count($paraules); $i++) {
1011               
1012                $word = null;
1013                               
1014                if (!$itrobada) $ordre += 1;
1015                // L'estructura de dades de MyWord és una array multidimensional. A cada casella
1016                // hi ha una tupla (array): a l'element 0 hi ha el tipus de paraula (Nom, Adjectiu, etc),
1017                // a l'element 1 un array amb la info de la paraula (pot ser que tingui més d'una entrada
1018                // si la paraula té vàries classes), a l'element 2 hi ha l'id de la Word Entry, al 3
1019                // hi ha si té modificador de plural i al 4 si en té de femení. El 3 i 4 són només per Noms
1020                // i Adjectius (ja que de vegades poden actuar com a noms). El 5 és per si està coordinat
1021                // amb la següent paraula (només si aquesta és del mateix tipus).
1022                // El 10 és per dir si la paraula ja està adjudicada a un slot o no.
1023                switch($paraules[$i]->pictoType)
1024                {
1025                    case 'name':
1026                        $this->db->where('Name'.$userlanguage.'.nameid', $paraules[$i]->pictoid);
1027                        $this->db->join('NameClass'.$userlanguage, 'NameClass'.$userlanguage.'.nameid = Name'.$userlanguage.'.nameid', 'left');
1028                        $query2 = $this->db->get('Name'.$userlanguage);
1029                        if ($query2->num_rows() > 0) {
1030                             $word = new Myword();
1031                             $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1032                        }
1033                        break;
1034                    case 'verb':
1035                        $countverb += 1;
1036                       
1037                        if ($countverb == 1) $beforeverb = false;
1038                        else if ($countverb == 2) $beforeverb2 = false;
1039                                               
1040                        $this->db->where('Verb'.$userlanguage.'.verbid', $paraules[$i]->pictoid);
1041                        $this->db->join('Pattern'.$userlanguage, 'Pattern'.$userlanguage.'.verbid = Verb'.$userlanguage.'.verbid', 'left');
1042                        $query2 = $this->db->get('Verb'.$userlanguage);
1043                        if ($query2->num_rows() > 0) {
1044                            $word = new Myword();
1045                            $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1046                        }
1047                        break;
1048                   
1049                    case 'adj':
1050                        $this->db->where('Adjective'.$userlanguage.'.adjid', $paraules[$i]->pictoid);
1051                        $this->db->join('AdjClass'.$userlanguage, 'AdjClass'.$userlanguage.'.adjid = Adjective'.$userlanguage.'.adjid', 'left');
1052                        $query2 = $this->db->get('Adjective'.$userlanguage);
1053                        if ($query2->num_rows() > 0) {
1054                            $word = new Myword();
1055                            $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1056                        }
1057                        break;
1058                   
1059                    case 'adv':
1060                        $this->db->where('Adverb'.$userlanguage.'.advid', $paraules[$i]->pictoid);
1061                        $this->db->join('AdvType'.$userlanguage, 'AdvType'.$userlanguage.'.advid = Adverb'.$userlanguage.'.advid', 'left');
1062                        $query2 = $this->db->get('Adverb'.$userlanguage);
1063                        if ($query2->num_rows() > 0) {
1064                            $word = new Myword();
1065                            $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1066                        }                       
1067                        break;
1068                   
1069                    case 'expression':
1070                        $this->db->where('Expressions'.$userlanguage.'.exprid', $paraules[$i]->pictoid);
1071                        $this->db->join('ExprType'.$userlanguage, 'ExprType'.$userlanguage.'.exprid = Expressions'.$userlanguage.'.exprid', 'left');
1072                        $query2 = $this->db->get('Expressions'.$userlanguage);
1073                        if ($query2->num_rows() > 0) {
1074                            $word = new Myword();
1075                            $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1076                        }
1077                        break;
1078                   
1079                    case 'modifier':
1080                        $this->db->where('modid', $paraules[$i]->pictoid);
1081                        $query2 = $this->db->get('Modifier'.$userlanguage);
1082                        if ($query2->num_rows() > 0) {
1083                            $word = new Myword();
1084                            $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1085                        }
1086                        break;
1087                   
1088                    case 'questpart':
1089                        $this->db->where('questid', $paraules[$i]->pictoid);
1090                        $query2 = $this->db->get('QuestionPart'.$userlanguage);
1091                        if ($query2->num_rows() > 0) {
1092                            $word = new Myword();
1093                            $word->initialise($paraules[$i], $query2->result(), $ordre, $beforeverb, $beforeverb2, false);
1094                        }
1095                        break;
1096                    default:
1097                        break;
1098                }
1099               
1100                if ($word != null) {
1101                   
1102                    // DEBUG
1103                    // if ($paraulaprevia != null) echo $paraulaprevia->text." - ".$word->text."<br />";
1104                                       
1105                    if ($itrobada) {
1106                       
1107                        if ($paraulaprevia->tipus == $word->tipus) $ibona = true;
1108                        // cas especial d'hores (name) i números (adjs)
1109                        else if (($paraulaprevia->tipus == "name" && $paraulaprevia->isClass("hora")) &&
1110                                ($word->tipus == "adj" && $word->isClass("numero"))) {
1111                            $ibona = true;
1112                        }
1113                        else $ibona = false;
1114                        // mirem si la paraula actual també té una coordinació
1115                        if ($word->coord) $itrobada = true;
1116                        else $itrobada = false;
1117                        if ($ibona) {
1118                            $ibona = false;
1119                            $paraulaprevia->paraulacoord[] = unserialize(serialize($word));
1120                        }
1121                        else {
1122                            $ordre += 1; // perquè si ibona, al principi no s'havia incrementat
1123                            $word->inputorder += 1; // xq quan itrobada, tenia el mateix inputorder, a l'espera de si la i era bona
1124                            $output[$ordre] = $word;
1125                        }
1126                    }
1127                    // si no hi ha cap "i" posem la paraula a la llista de paraules
1128                    else {
1129                        $output[$ordre] = $word;
1130                       
1131                        if ($word->coord) {
1132                            $itrobada = true;
1133                            $paraulaprevia = $word;
1134                        }
1135                    }
1136                }
1137                else $output[$ordre] = null;
1138            }
1139        }
1140        else $output = null;
1141        return $output;
1142    }
1143   
1144    // Retorna l'identry, el tipus de frase, si és negativa, el tense, la data alta i la frase objectiu
1145    function getLastSentenceProperties($idusu)
1146    {
1147        $output = array();
1148        $identry = 0;
1149        $tipusfrase = "defecte";
1150        $negativa = false;
1151        $tense = "defecte";
1152        $dataalta = null;
1153        $fraseobjectiu = null;
1154        $inputwords = null;
1155       
1156        $this->db->where('ID_SHUser', $idusu);
1157        $this->db->order_by('ID_SHistoric', 'desc');
1158        $query = $this->db->get('S_Historic');
1159       
1160        if ($query->num_rows() > 0) {
1161            $aux = $query->result();
1162           
1163            $identry = $aux[0]->ID_SHistoric;
1164            $tipusfrase = $aux[0]->sentenceType;
1165            if ($aux[0]->isNegative == '1') $negativa = true;
1166            $tense = $aux[0]->sentenceTense;
1167            $dataalta = $aux[0]->sentenceDate;
1168            $fraseobjectiu = $aux[0]->intendedSentence;
1169            $inputwords = $aux[0]->inputWords;
1170        }
1171       
1172        $output['identry'] = $identry;
1173        $output['tipusfrase'] = $tipusfrase;
1174        $output['negativa'] = $negativa;
1175        $output['tense'] = $tense;
1176        $output['dataalta'] = $dataalta;
1177        $output['fraseobjectiu'] = $fraseobjectiu;
1178        $output['inputwords'] = $inputwords;
1179       
1180        return $output;   
1181    }
1182   
1183    // Retorna el text de l'última frase generada, si no n'hi havia cap de feta retorna null
1184    function getLastGeneratedText($idusu)
1185    {
1186        $text = null;
1187       
1188        $this->db->where('ID_SHUser', $idusu);
1189        $this->db->order_by('ID_SHistoric', 'desc');
1190        $query = $this->db->get('S_Historic');
1191       
1192        // tal com està fet el codi, quan s'apreta generar frase, crea una entrada mig buida a
1193        // S_Historic, per tant la frase anterior es troba en la segona posició
1194        // aleshores borrem aquesta entrada mig buida
1195        if ($query->num_rows() > 1) {
1196            $aux = $query->result();
1197           
1198            $text = $aux[1]->generatorString;
1199            $idsentence = $aux[0]->ID_SHistoric;
1200           
1201            if ($aux[0]->generatorString == null) {
1202                $this->db->where('ID_SHistoric', $idsentence);
1203                $this->db->delete('S_Historic');
1204            }
1205           
1206        }
1207       
1208        return $text;   
1209    }
1210   
1211    // Retorna l'estructura de la paraula Verbless o de qualsevol Verb amb els seus patterns
1212    function getPatternsVerb($verbid, $withsubject)
1213    {
1214        $output = array();
1215        $userlanguage = $this->session->userdata('ulangabbr');
1216       
1217        // només retorna patrons amb subjecte, és a dir, no impersonals
1218        if ($withsubject) $this->db->where('Pattern'.$userlanguage.'.subj !=', '0');
1219       
1220        $this->db->where_in('Pictograms.ID_PUser', array('1', $this->session->userdata('idusu')));
1221        $this->db->where('Verb'.$userlanguage.'.verbid', $verbid);
1222        $this->db->join('Pictograms', 'Pictograms.pictoid = Verb'.$userlanguage.'.verbid', 'left');
1223        $this->db->join('Pattern'.$userlanguage, 'Pattern'.$userlanguage.'.verbid = Verb'.$userlanguage.'.verbid', 'left');
1224        $this->db->order_by('Pictograms.pictoid', 'asc');
1225        $query2 = $this->db->get('Verb'.$userlanguage);
1226       
1227        if ($query2->num_rows() > 0) {
1228            $word = new Myword();
1229            $word->initSingleVerbWord($verbid, $query2->result());
1230            // ANTIGA LÍNIA SUPERIOR: $word->initSingleVerbWord($verbid, $query2->result(), -1, false);
1231            $output = $word;
1232        }
1233        else $output = null;
1234       
1235        return $output;
1236    }
1237   
1238    // conjuga el verb: retorna un string
1239    // ÉS ESPECÍFIC PER CATALÀ
1240    public function conjugar($verbid, $tense, $persona, $numero, $pronominal)
1241    {
1242        // DEBUG
1243        // echo "CONJ: ".$verbid." ".$tense." ".$persona." ".$numero."<br />";
1244        $tenseaux = null;
1245        $idverbaux = null;
1246        $tensemain = $tense;
1247        $personamain = $persona;
1248        $numeromain = $numero;
1249       
1250        $formafinal = "";
1251        $userlanguage = $this->session->userdata('ulangabbr');
1252       
1253        // si el verb és pronominal, a la taula de conjugacions ja ve amb el verb auxiliar i
1254        // el pronom corresponent
1255        if (!$pronominal) {
1256       
1257            if ($tense == "perfet") {
1258                $tenseaux = "present";
1259                $tensemain = "participi";
1260                $personamain = 0;
1261                $numeromain = 'sing';
1262                $idverbaux = 101; // id del verb haver
1263            }
1264            else if ($tense == "perifrastic") {
1265                $tenseaux = "perifrastic";
1266                $tensemain = "infinitiu";
1267                $personamain = 0;
1268                $numeromain = 'sing';
1269                $idverbaux = 102; // id del verb anar quan fa d'auxiliar als perifràstics
1270            }
1271       
1272            if ($idverbaux != null) {
1273                $this->db->where('verbid', $idverbaux);
1274                $this->db->where('tense', $tenseaux);
1275                $this->db->where('pers', $persona);
1276                $this->db->where('singpl', $numero);
1277                $query2 = $this->db->get('VerbConjugation'.$userlanguage);
1278                if ($query2->num_rows() > 0) {
1279                    $aux = $query2->result();
1280                    $formafinal .= $aux[0]->verbconj." ";
1281                }
1282            }
1283        }
1284        // si és infinitiu, gerundi o participi, no té persona
1285        if ($tensemain == 'infinitiu' || $tensemain == 'gerundi' 
1286                || $tensemain == 'participi') {
1287            $personamain = 0;
1288            $numeromain = 'sing';
1289        }
1290       
1291        $this->db->where('verbid', $verbid);
1292        $this->db->where('tense', $tensemain);
1293        $this->db->where('pers', $personamain);
1294        $this->db->where('singpl', $numeromain);
1295        $query = $this->db->get('VerbConjugation'.$userlanguage);
1296        if ($query->num_rows() > 0) {
1297            $aux = $query->result();
1298            $formafinal .= $aux[0]->verbconj;
1299        }
1300       
1301        // el pronom de darrere l'infinitiu dels verbs pronominals ha de concordar amb el subjecte
1302        if ($tensemain == "infinitiu" && $pronominal) {
1303            $patterns[0] = '/-se/u';
1304           
1305            if ($persona == 1 && $numero == 'sing') $replacements[0] = "-me";
1306            else if ($persona == 2 && $numero == 'sing') $replacements[0] = "-te";
1307            else if ($persona == 3) $replacements[0] = "-se";
1308            else if ($persona == 1 && $numero == 'pl') $replacements[0] = "-nos";
1309            else if ($persona == 2 && $numero == 'pl') $replacements[0] = "-vos";
1310           
1311            $formafinal = preg_replace($patterns, $replacements, $formafinal);
1312        }
1313       
1314        return $formafinal;
1315    }
1316   
1317    // conjuga el verb: retorna un string
1318    // ÉS ESPECÍFIC PER CASTELLÀ
1319    public function conjugarES($verbid, $tense, $persona, $numero, $pronominal)
1320    {
1321        // DEBUG
1322        // echo "CONJ: ".$verbid." ".$tense." ".$persona." ".$numero."<br />";
1323        $tenseaux = null;
1324        $idverbaux = null;
1325        $tensemain = $tense;
1326        $personamain = $persona;
1327        $numeromain = $numero;
1328       
1329        $formafinal = "";
1330        $userlanguage = $this->session->userdata('ulangabbr');
1331       
1332        // si el verb és pronominal, a la taula de conjugacions ja ve amb el verb auxiliar i
1333        // el pronom corresponent
1334        if (!$pronominal) {
1335       
1336            if ($tense == "perfet") {
1337                $tenseaux = "present";
1338                $tensemain = "participi";
1339                $personamain = 0;
1340                $numeromain = 'sing';
1341                $idverbaux = 101; // id del verb haver
1342            }
1343       
1344            if ($idverbaux != null) {
1345                $this->db->where('verbid', $idverbaux);
1346                $this->db->where('tense', $tenseaux);
1347                $this->db->where('pers', $persona);
1348                $this->db->where('singpl', $numero);
1349                $query2 = $this->db->get('VerbConjugation'.$userlanguage);
1350                if ($query2->num_rows() > 0) {
1351                    $aux = $query2->result();
1352                    $formafinal .= $aux[0]->verbconj." ";
1353                }
1354            }
1355        }
1356        // si és infinitiu, gerundi o participi, no té persona
1357        if ($tensemain == 'infinitiu' || $tensemain == 'gerundi' 
1358                || $tensemain == 'participi') {
1359            $personamain = 0;
1360            $numeromain = 'sing';
1361        }
1362       
1363        $this->db->where('verbid', $verbid);
1364        $this->db->where('tense', $tensemain);
1365        $this->db->where('pers', $personamain);
1366        $this->db->where('singpl', $numeromain);
1367        $query = $this->db->get('VerbConjugation'.$userlanguage);
1368        if ($query->num_rows() > 0) {
1369            $aux = $query->result();
1370            $formafinal .= $aux[0]->verbconj;
1371        }
1372       
1373        // el pronom de darrere l'infinitiu dels verbs pronominals ha de concordar amb el subjecte
1374        if ($tensemain == "infinitiu" && $pronominal) {
1375            $patterns[0] = '/se$/u';
1376           
1377            if ($persona == 1 && $numero == 'sing') $replacements[0] = "me";
1378            else if ($persona == 2 && $numero == 'sing') $replacements[0] = "te";
1379            else if ($persona == 3) $replacements[0] = "se";
1380            else if ($persona == 1 && $numero == 'pl') $replacements[0] = "nos";
1381            else if ($persona == 2 && $numero == 'pl') $replacements[0] = "os";
1382           
1383            $formafinal = preg_replace($patterns, $replacements, $formafinal);
1384        }
1385       
1386        return $formafinal;
1387    }
1388   
1389    public function guardarParseIFraseResultat($identry, $parsetree, $frasefinal)
1390    {
1391        if ($identry >= 0) {
1392         
1393            $data = array(
1394                'parsestring' => $parsetree,
1395                'generatorstring' => $frasefinal,
1396            );
1397            $this->db->where('ID_SHistoric', $identry);
1398            $this->db->update('S_Historic', $data); 
1399        }   
1400    }
1401   
1402    public function addEntryScores($identry, $scoreparser, $scoregen, $comments)
1403    {
1404        $parsescore = intval($scoreparser);
1405        $generatorscore = intval($scoregen);
1406       
1407        $data = array(
1408            'parsescore' => $parsescore,
1409            'generatorscore' => $generatorscore,
1410            'comments' => $comments,
1411        );
1412        $this->db->where('ID_SHistoric', $identry);
1413        $this->db->update('S_Historic', $data); 
1414    }
1415   
1416   
1417    /*
1418     * Inserts individually each pictogram in P_StatsUserPicto.
1419     * If this picto already exists increment count
1420     */
1421    function addStatsX1($paraulesFrase, $iduser) {
1422        for ($i = 0; $i < count($paraulesFrase); $i++) {
1423            if ($paraulesFrase[$i] != null) {//esto se podria quitar...
1424                $word = $paraulesFrase[$i];
1425                $inputid = $word->id;
1426               
1427                $this->addWordStatsX1($inputid, $iduser, false);
1428            }
1429        }
1430    }
1431   
1432    /*
1433     * Adds or updates the stats (countx1 and hour and day of the week) of the pictogram with pictoid
1434     * for the user with id=iduser. If first is set to true, it only
1435     * sets the counter to 1 if that user had never used that pictogram
1436     * before.
1437     */
1438    public function addWordStatsX1($pictoid, $iduser, $first) 
1439    {
1440        $datestring = "%Y/%m/%d";
1441        $daystring = 'D';
1442        $hourstring = 'G';
1443        $time = time();
1444        $avui = mdate($datestring, $time);
1445        $dia = date($daystring, $time);
1446        $hora = date($hourstring, $time);
1447        $hora .= "h";
1448       
1449        $this->db->where('pictoid', $pictoid);
1450        $this->db->where('ID_PSUPUser', $iduser);
1451        $query = $this->db->get('P_StatsUserPicto');
1452        if ($query->num_rows() > 0) {
1453            if (!$first) {
1454                $stat = $query->result();
1455                $num = $stat[0]->countx1 + 1;
1456                $numdia = $stat[0]->$dia + 1;
1457                $numhora = $stat[0]->$hora + 1;
1458                $this->db->where('pictoid', $pictoid);
1459                $this->db->where('ID_PSUPUser', $iduser);
1460                $data = array(
1461                    'countx1' => $num,
1462                    'lastdate' => $avui,
1463                    $dia => $numdia,
1464                    $hora => $numhora
1465                );
1466                $query = $this->db->update('P_StatsUserPicto', $data);
1467            }
1468        } else {
1469            $data = array(
1470                'countx1' => '1',
1471                'lastdate' => $avui,
1472                'pictoid' => $pictoid,
1473                'ID_PSUPUser' => $iduser
1474            );
1475            $query = $this->db->insert('P_StatsUserPicto', $data);
1476        }
1477    }
1478   
1479    /*
1480     * Inserts, in pairs, each pictogram in P_StatsUserPicto.
1481     * If this combination of pictograms already exists increment count
1482     */
1483    function addStatsX2($paraulesFrase, $iduser) {
1484       
1485        $datestring = "%Y/%m/%d";
1486        $daystring = 'D';
1487        $hourstring = 'G';
1488        $time = time();
1489        $avui = mdate($datestring, $time);
1490        $dia = date($daystring, $time);
1491        $hora = date($hourstring, $time);
1492        $hora .= "h";
1493       
1494        for ($i = 1; $i < count($paraulesFrase); $i++) {
1495            $word1 = $paraulesFrase[$i - 1];
1496            $word2 = $paraulesFrase[$i];
1497            $inputid1 = $word1->id;
1498            $inputid2 = $word2->id;
1499            $this->db->where('picto1id', $inputid1);
1500            $this->db->where('picto2id', $inputid2);
1501            $this->db->where('ID_PSUP2User', $iduser);
1502            $query = $this->db->get('P_StatsUserPictox2');
1503            if ($query->num_rows() > 0) {
1504                $stat = $query->result();
1505                $num = $stat[0]->countx2 + 1;
1506                $numdia = $stat[0]->$dia + 1;
1507                $numhora = $stat[0]->$hora + 1;
1508                $this->db->where('picto2id', $inputid2);
1509                $this->db->where('picto1id', $inputid1);
1510                $this->db->where('ID_PSUP2User', $iduser);
1511                $data = array(
1512                    'countx2' => $num,
1513                    'lastdate' => $avui,
1514                    $dia => $numdia,
1515                    $hora => $numhora
1516                );
1517                $query = $this->db->update('P_StatsUserPictox2', $data);
1518            } else {
1519                $data = array(
1520                    'countx2' => '1',
1521                    'lastdate' => $avui,
1522                    $dia => '1',
1523                    $hora => '1',
1524                    'picto2id' => $inputid2,
1525                    'picto1id' => $inputid1,
1526                    'ID_PSUP2User' => $iduser
1527                );
1528                $query = $this->db->insert('P_StatsUserPictox2', $data);
1529            }
1530        }
1531    }
1532    /*
1533     * Inserts, in trios, each pictogram in P_StatsUserPicto.
1534     * If this combination of pictograms already exists increment count
1535     */
1536    function addStatsX3($paraulesFrase, $iduser) {
1537       
1538        $datestring = "%Y/%m/%d";
1539        $daystring = 'D';
1540        $hourstring = 'G';
1541        $time = time();
1542        $avui = mdate($datestring, $time);
1543        $dia = date($daystring, $time);
1544        $hora = date($hourstring, $time);
1545        $hora .= "h";
1546       
1547        for ($i = 2; $i < count($paraulesFrase); $i++) {
1548            $word1 = $paraulesFrase[$i - 2];
1549            $word2 = $paraulesFrase[$i - 1];
1550            $word3 = $paraulesFrase[$i];
1551            $inputid1 = $word1->id;
1552            $inputid2 = $word2->id;
1553            $inputid3 = $word3->id;
1554            $this->db->where('picto1id', $inputid1);
1555            $this->db->where('picto2id', $inputid2);
1556            $this->db->where('picto3id', $inputid3);
1557            $this->db->where('ID_PSUP3User', $iduser);
1558            $query = $this->db->get('P_StatsUserPictox3');
1559            if ($query->num_rows() > 0) {
1560                $stat = $query->result();
1561                $num = $stat[0]->countx3 + 1;
1562                $numdia = $stat[0]->$dia + 1;
1563                $numhora = $stat[0]->$hora + 1;
1564                $this->db->where('picto3id', $inputid3);
1565                $this->db->where('picto2id', $inputid2);
1566                $this->db->where('picto1id', $inputid1);
1567                $this->db->where('ID_PSUP3User', $iduser);
1568                $data = array(
1569                    'countx3' => $num,
1570                    'lastdate' => $avui,
1571                    $dia => $numdia,
1572                    $hora => $numhora
1573                );
1574                $query = $this->db->update('P_StatsUserPictox3', $data);
1575            } else {
1576                $data = array(
1577                    'countx3' => '1',
1578                    'lastdate' => $avui,
1579                    $dia => '1',
1580                    $hora => '1',
1581                    'picto3id' => $inputid3,
1582                    'picto2id' => $inputid2,
1583                    'picto1id' => $inputid1,
1584                    'ID_PSUP3User' => $iduser
1585                );
1586                $query = $this->db->insert('P_StatsUserPictox3', $data);
1587            }
1588        }       
1589    }
1590   
1591    /*
1592    * Adds or updates the stats of the pictogram with pictoid
1593    * for the user with id=iduser. If first is set to true, it only
1594    * sets the counter to 1 if that user had never used that pictogram
1595    * before.
1596    */
1597   public function addImgTempStatsX1($pictoid, $iduser, $imgtemp) 
1598   {
1599       $this->db->where('pictoid', $pictoid);
1600       $this->db->where('ID_PSUPUser', $iduser);
1601       $query = $this->db->get('P_StatsUserPicto');
1602       
1603       if ($query->num_rows() > 0) {
1604            $this->db->where('pictoid', $pictoid);
1605            $this->db->where('ID_PSUPUser', $iduser);
1606            $data = array(
1607                'imgtemp' => $imgtemp
1608            );
1609            $query = $this->db->update('P_StatsUserPicto', $data);
1610       }
1611   }
1612   
1613}
1614?>
Note: See TracBrowser for help on using the repository browser.