WordPress.org

Plugin Directory

Changeset 435356 for scormcloud


Ignore:
Timestamp:
09/08/11 18:27:50 (3 years ago)
Author:
stuartchilds
Message:

SQL injection vulnerability fixes.

Sync from Git master; also includes extra DB helper functions. Revs:

  • e8b51e5a72
  • 61ee585145
  • ad7ec0f3e0
Location:
scormcloud/trunk
Files:
32 added
1 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • scormcloud/trunk/ajax.php

    r383309 r435356  
    3131        $require_login = 1; 
    3232        $show_course_info = 0; 
    33          
    34         $wpdb->query($wpdb->prepare( " 
    35             INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitations  
    36                 (invite_id, blog_id, app_id, post_id, course_id, course_title, header, description, require_login, show_course_info) 
    37                 VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %d, %d)",  
    38                     $inviteId, $GLOBALS['blog_id'], $appId, $postId, $courseId, $courseTitle, $header, $description, $require_login, $show_course_info)); 
     33                     
     34        $wpdb->insert(scormcloud_getTableName('scormcloudinvitations'), 
     35                      array('invite_id' => $inviteId, 
     36                            'blog_id' => $GLOBALS['blog_id'], 
     37                            'app_id' => $appId, 
     38                            'post_id' => $postId, 
     39                            'course_id' => $courseId, 
     40                            'course_title' => $courseTitle, 
     41                            'header' => $header, 
     42                            'description' => $description, 
     43                            'require_login' => $require_login, 
     44                            'show_course_info' => $show_course_info), 
     45                      array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d')); 
    3946         
    4047        //create the cloud registration(s) 
     
    7582            $xml = simplexml_load_string($response); 
    7683            if (isset($xml->success)){    
    77                 $wpdb->query($wpdb->prepare( " 
    78                     INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitationregs  
    79                         (invite_id, reg_id, user_id, user_email) 
    80                         VALUES (%s, %s, %d, %s)",  
    81                             $inviteId, $regid, $userData->ID, $userData->user_email)); 
     84                $wpdb->insert(scormcloud_getTableName('scormcloudinvitationregs'), 
     85                              array('invite_id' => $inviteId, 
     86                                    'reg_id' => $regid, 
     87                                    'user_id' => $userData->ID, 
     88                                    'user_email' => $userData->user_email), 
     89                              array('%s', '%s', '%d', '%s')); 
    8290                 
    8391            } else if ($xml->err['code'] == '4') { 
     
    103111        $show_course_info = $_POST['showcourseinfo']; 
    104112         
    105         $wpdb->query($wpdb->prepare( " 
    106             INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitations  
    107                 (invite_id, blog_id, app_id, course_id, course_title, header, description, require_login, show_course_info) 
    108                 VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %d)",  
    109                     $inviteId, $GLOBALS['blog_id'], $appId, $courseId, $courseTitle, $header, $description, (int)$require_login, (int)$show_course_info)); 
    110          
     113        $wpdb->insert(scormcloud_getTableName('scormcloudinvitations'), 
     114                      array('invite_id' => $inviteId, 
     115                            'blog_id' => $GLOBALS['blog_id'], 
     116                            'app_id' => $appId, 
     117                            'course_id' => $courseId, 
     118                            'course_title' => $courseTitle, 
     119                            'header' => $header, 
     120                            'description' => $description, 
     121                            'require_login' => $require_login, 
     122                            'show_course_info' => $show_course_info), 
     123                      array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d')); 
    111124         
    112125        echo $inviteId; 
     
    123136        $show_course_info = $_POST['showcourseinfo']; 
    124137         
    125         $querystr = "UPDATE ".scormcloud_getDBPrefix()."scormcloudinvitations SET 
    126             header = '$header', 
    127             description = '$description', 
    128             require_login = ".(int)$require_login.", 
    129             show_course_info = ".(int)$show_course_info." 
    130             WHERE invite_id = '$inviteId'"; 
    131         $wpdb->query($querystr); 
     138        $wpdb->update(scormcloud_getTableName('scormcloudinvitations'), 
     139                        array('header' => $header, 
     140                              'description' => $description, 
     141                              'require_login' => (int)$require_login, 
     142                              'show_course_info' => (int)$show_course_info), 
     143                        array('invite_id' => $inviteId), 
     144                        array('%s', '%s', '%d', '%d')); 
    132145         
    133146        break; 
     
    140153        $returnUrl = $_POST['returnurl']; 
    141154         
    142         $querystr = "SELECT * FROM ".scormcloud_getDBPrefix()."scormcloudinvitations WHERE invite_id = '$inviteId'"; 
    143         $invites = $wpdb->get_results($querystr, OBJECT); 
    144         $invite = $invites[0]; 
     155        $invite = scormcloud_getInvitation($inviteId); 
    145156         
    146157        $appId = $invite->app_id; 
     
    175186        $regService = $ScormService->getRegistrationService(); 
    176187         
    177         $querystr = "SELECT reg_id FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs WHERE invite_id = '$inviteId' AND user_email = '$user_email'"; 
    178         $inviteRegs = $wpdb->get_results($querystr, OBJECT); 
    179         if (count($inviteRegs) > 0) { 
    180             $inviteReg = $inviteRegs[0]; 
     188        $inviteReg = scormcloud_getInvitationReg(array('invite_id' => $inviteId, 'user_email' => $user_email)); 
     189        if ($inviteReg != null) { 
    181190            $regid = (string)$inviteReg->reg_id; 
    182191        } else { 
     
    186195            $regService->CreateRegistration($regid, $courseId, $user_email, $user_first_name, $user_last_name,$user_email); 
    187196             
    188             $wpdb->query($wpdb->prepare( " 
    189                 INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitationregs  
    190                     (invite_id, reg_id, user_email) 
    191                     VALUES (%s, %s, %s)",  
    192                         $inviteId, $regid, $user_email)); 
    193          
     197            $wpdb->insert(scormcloud_getTableName('scormcloudinvitationregs'), 
     198                          array('invite_id' => $inviteId, 
     199                                'reg_id' => $regid, 
     200                                'user_email' => $user_email)); 
    194201        } 
    195202         
     
    250257        } 
    251258         
    252         $querystr = "SELECT * FROM ".scormcloud_getDBPrefix()."scormcloudinvitations WHERE invite_id = '$inviteId'"; 
    253         $invites = $wpdb->get_results($querystr, OBJECT); 
    254         $invite = $invites[0]; 
     259        $invite = scormcloud_getInvitation($inviteId); 
    255260         
    256261        $courseId = $invite->course_id; 
     
    287292        $regService->CreateRegistration($regid, $courseId, $user_email, $user_first_name, $user_last_name,$user_email); 
    288293         
    289         $wpdb->query($wpdb->prepare( " 
    290             INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitationregs  
    291                 (invite_id, reg_id, user_id, user_email) 
    292                 VALUES (%s, %s, %d, %s)",  
    293                     $inviteId, $regid, $current_user->ID, $user_email)); 
     294        $wpdb->insert(scormcloud_getTableName('scormcloudinvitationregs'), 
     295                          array('invite_id' => $inviteId, 
     296                                'reg_id' => $regid, 
     297                                'user_id' => $current_user->ID, 
     298                                'user_email' => $user_email), 
     299                          array('%s', '%s', '%d', '%s')); 
    294300         
    295301        if (function_exists("bp_activity_add")){ 
     
    341347        $widgetName = isset($_POST['widgetname']) ? $_POST['widgetname'] : null; 
    342348         
    343         $querystr = "SELECT invite_id FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs WHERE reg_id = '$regid'"; 
    344         $inviteRegs = $wpdb->get_results($querystr, OBJECT); 
    345         $inviteReg = $inviteRegs[0]; 
     349        $inviteReg = scormcloud_getInvitationReg($regid); 
    346350         
    347351        $regTags = $GLOBALS['blog_id'].','.(string)$inviteReg->invite_id; 
     
    353357        if (function_exists("bp_activity_add")){ 
    354358            global $bp; 
    355             $querystr = "SELECT * FROM ".scormcloud_getDBPrefix()."scormcloudinvitations WHERE invite_id = '".$inviteReg->invite_id."'"; 
    356             $invites = $wpdb->get_results($querystr, OBJECT); 
    357             $invite = $invites[0]; 
     359            $invite = scormcloud_getInvitation($inviteReg->invite_id); 
    358360             
    359361             
     
    419421        $courseId = $_POST['courseid']; 
    420422         
    421         //$querystr = "UPDATE ".scormcloud_getDBPrefix()."scormcloudinvitations SET active = 2 WHERE course_id = '$courseId'"; 
    422          
    423         $querystr = "DELETE r FROM wp_scormcloudinvitations AS i LEFT JOIN wp_scormcloudinvitationregs AS r ON i.invite_id=r.invite_id 
    424             WHERE course_id = '$courseId'"; 
    425         $wpdb->query($querystr); 
    426         $querystr = "DELETE FROM ".scormcloud_getDBPrefix()."scormcloudinvitations WHERE course_id = '$courseId'"; 
    427          
    428         $wpdb->query($querystr); 
     423        $invTable = scormcloud_getTableName('scormcloudinvitations'); 
     424        $regTable = scormcloud_getTableName('scormcloudinvitationregs'); 
     425        $query = $wpdb->prepare('DELETE r FROM '.$invTable.' AS i LEFT JOIN '.$regTable.' AS r ON i.invite_id = r.invite_id WHERE course_id = %s', 
     426                                array($courseId)); 
     427        $wpdb->query($query); 
     428         
     429        $query = $wpdb->prepare('DELETE FROM '.$invTable.' WHERE course_id = %s', array($courseId)); 
     430        $wpdb->query($query); 
    429431         
    430432        $courseService = $ScormService->getCourseService(); 
     
    445447        $regId = $_POST['regid']; 
    446448         
    447         $querystr = "SELECT inv.course_id, reg.user_email FROM ".scormcloud_getDBPrefix()."scormcloudinvitations inv 
    448             JOIN ".scormcloud_getDBPrefix()."scormcloudinvitationregs reg ON inv.invite_id = reg.invite_id 
    449             WHERE reg.invite_id = '$inviteId' AND reg.reg_id= '$regId'"; 
    450         $invites = $wpdb->get_results($querystr, OBJECT); 
    451         $invite = $invites[0]; 
     449        $query = $wpdb->prepare('SELECT inv.course_id, reg.user_email FROM '.scormcloud_getTableName('scormcloudinvitations').' inv 
     450            JOIN '.scormcloud_getTableName('scormcloudinvitationregs').' reg ON inv.invite_id = reg.invite_id 
     451            WHERE reg.invite_id = %s AND reg.reg_id = %s', array($inviteId, $regId)); 
     452        $invite = $wpdb->get_row($query, OBJECT); 
    452453         
    453454        $courseId = $invite->course_id; 
     
    485486        $inviteId = $_POST['inviteid']; 
    486487         
    487         //$invites = $wpdb->get_results("SELECT * FROM ".scormcloud_getDBPrefix()."scormcloudinvitations WHERE invite_id = '$inviteId'", OBJECT); 
    488         //$invite = $invites[0]; 
    489          
    490         $querystr = "SELECT reg.*, inv.course_id FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs reg JOIN ".scormcloud_getDBPrefix()."scormcloudinvitations inv 
    491             ON reg.invite_id = inv.invite_id 
    492             WHERE reg.invite_id = '$inviteId' ORDER BY reg.update_date DESC"; 
    493         $inviteRegs = $wpdb->get_results($querystr, OBJECT); 
     488        $invTable = scormcloud_getTableName('scormcloudinvitations'); 
     489        $regTable = scormcloud_getTableName('scormcloudinvitationregs'); 
     490        $query = $wpdb->prepare('SELECT reg.*, inv.course_id FROM '.$regTable.' reg JOIN '.$invTable.' inv 
     491                                 ON reg.invite_id = inv.invite_id 
     492                                 WHERE reg.invite_id = %s ORDER BY reg.update_date DESC', array($inviteId)); 
     493        $inviteRegs = $wpdb->get_results($query, OBJECT); 
    494494         
    495495        $regService = $ScormService->getRegistrationService(); 
     
    553553        $active = $_POST['active']; 
    554554         
    555         $querystr = "UPDATE ".scormcloud_getDBPrefix()."scormcloudinvitations SET active = $active WHERE invite_id = '$inviteId'"; 
    556         $wpdb->query($querystr); 
     555        $wpdb->update(scormcloud_getTableName('scormcloudinvitations'), 
     556                      array('active' => $active, 'invite_id' => $inviteId)); 
    557557         
    558558        break; 
     
    586586        $show_course_info = 0; 
    587587         
    588         $wpdb->query($wpdb->prepare( " 
    589             INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitations  
    590                 (invite_id, blog_id, app_id, post_id, course_id, course_title, header, description, require_login, show_course_info) 
    591                 VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %d, %d)",  
    592                     $inviteId, $GLOBALS['blog_id'], $appId, $postId, $courseId, $courseTitle, $header, $description, $require_login, $show_course_info)); 
    593          
     588        $wpdb->insert(scormcloud_getTableName('scormcloudinvitations'), 
     589                      array('invite_id' => $inviteId, 
     590                            'blog_id' => $GLOBALS['blog_id'], 
     591                            'app_id' => $appId, 
     592                            'post_id' => $postId, 
     593                            'course_id' => $courseId, 
     594                            'course_title' => $courseTitle, 
     595                            'header' => $header, 
     596                            'description' => $description, 
     597                            'require_login' => $require_login, 
     598                            'show_course_info' => $show_course_info), 
     599                      array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d')); 
    594600         
    595601        $courseTags = 'catalog_widget'; 
     
    601607        $regService = $ScormService->getRegistrationService(); 
    602608        $regService->CreateRegistration($regid, $courseId, $user_email, $user_first_name, $user_last_name,$user_email); 
    603          
    604         $wpdb->query($wpdb->prepare( " 
    605             INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitationregs  
    606                 (invite_id, reg_id, user_id, user_email) 
    607                 VALUES (%s, %s, %d, %s)",  
    608                     $inviteId, $regid, $current_user->ID, $user_email)); 
     609                     
     610        $wpdb->insert(scormcloud_getTableName('scormcloudinvitationregs'), 
     611                          array('invite_id' => $inviteId, 
     612                                'reg_id' => $regid, 
     613                                'user_id' => $current_user->ID, 
     614                                'user_email' => $user_email), 
     615                          array('%s', '%s', '%d', '%s')); 
    609616         
    610617        if (function_exists("bp_activity_add")){ 
     
    659666        $regService = $ScormService->getRegistrationService(); 
    660667         
    661         $querystr = "select r.reg_id, r.invite_id from ".scormcloud_getDBPrefix()."scormcloudinvitations i 
    662                 JOIN ".scormcloud_getDBPrefix()."scormcloudinvitationregs r on i.invite_id = r.invite_id 
    663                 WHERE r.user_email = '$user_email' and i.course_id = '$courseId'"; 
    664         $inviteRegs = $wpdb->get_results($querystr, OBJECT); 
    665         if (count($inviteRegs) > 0) { 
    666             $inviteReg = $inviteRegs[0]; 
     668        $query = $wpdb->prepare('SELECT r.reg_id, r.invite_id FROM '.scormcloud_getTableName('scormcloudinvitations').' i 
     669                                 JOIN '.scormcloud_getTableName('scormcloudinvitationregs').' r ON i.invite_id = r.invite_id 
     670                                 WHERE r.user_email = %s AND i.course_id = %s', array($user_email, $courseId)); 
     671        $inviteReg = $wpdb->get_row($query, OBJECT); 
     672        if ($inviteReg != null) { 
    667673            $regid = (string)$inviteReg->reg_id; 
    668674            $inviteId = (string)$inviteReg->invite_id; 
     
    674680            $show_course_info = 0; 
    675681            //error_log(scormcloud_getDBPrefix()); 
    676             $wpdb->query($wpdb->prepare( " 
    677                 INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitations  
    678                     (invite_id, blog_id, app_id, post_id, course_id, course_title, header, description, require_login, show_course_info) 
    679                     VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %d, %d)",  
    680                         $inviteId, $GLOBALS['blog_id'], $appId, $postId, $courseId, $courseTitle, $header, $description, $require_login, $show_course_info)); 
     682            $wpdb->insert(scormcloud_getTableName('scormcloudinvitations'), 
     683                      array('invite_id' => $inviteId, 
     684                            'blog_id' => $GLOBALS['blog_id'], 
     685                            'app_id' => $appId, 
     686                            'post_id' => $postId, 
     687                            'course_id' => $courseId, 
     688                            'course_title' => $courseTitle, 
     689                            'header' => $header, 
     690                            'description' => $description, 
     691                            'require_login' => $require_login, 
     692                            'show_course_info' => $show_course_info), 
     693                      array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d')); 
    681694         
    682695            //create the cloud registration 
    683696            $regService->CreateRegistration($regid, $courseId, $user_email, $user_first_name, $user_last_name, $user_email); 
    684697             
    685             $wpdb->query($wpdb->prepare( " 
    686             INSERT INTO ".scormcloud_getDBPrefix()."scormcloudinvitationregs  
    687                 (invite_id, reg_id, user_email) 
    688                 VALUES (%s, %s, %s)",  
    689                     $inviteId, $regid, $user_email)); 
     698            $wpdb->insert(scormcloud_getTableName('scormcloudinvitationregs'), 
     699                          array('invite_id' => $inviteId, 
     700                                'reg_id' => $regid, 
     701                                'user_email' => $user_email), 
     702                          array('%s', '%s', '%s')); 
    690703        } 
    691704         
  • scormcloud/trunk/readme.txt

    r411704 r435356  
    11=== Plugin Name === 
    2 Contributors: troyef 
     2Contributors: troyef, stuartchilds 
    33Tags: elearning, learning, scorm, aicc, education, training, cloud 
    44Requires at least: 2.9 
    55Tested up to: 3.2.1 
    6 Stable tag: 1.0.6.6 
     6Stable tag: 1.0.7 
    77 
    88Tap the power of SCORM to deliver and track training right from your WordPress-powered site. 
     
    4949 
    5050== Changelog == 
     51 
     52= 1.0.7 = 
     53* Fixes some security vulnerabilities. 
    5154 
    5255= 1.0.6.6 = 
     
    9598== Upgrade Notice == 
    9699 
     100= 1.0.7 = 
     101* Critical security vulnerability fixes. Upgrade immediately. 
     102 
    97103= 1.0.6.6 = 
    98104* Small update to fix a potentially troublesome php tag. Not needed if you are embedding trainings in posts without issue. 
  • scormcloud/trunk/scormcloud.catalogwidget.php

    r382844 r435356  
    7777                     
    7878                    if(isset($current_user->user_login) && $current_user->user_login != '') { 
    79                         $regs = $wpdb->get_results("SELECT reg.reg_id,inv.course_title,inv.course_id, inv.active, reg.update_date FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs reg 
    80                                                JOIN ".scormcloud_getDBPrefix()."scormcloudinvitations inv ON reg.invite_id = inv.invite_id 
    81                                                WHERE reg.user_id = '".$current_user->ID."' AND inv.course_id = '".$courseId."' 
    82                                                ORDER BY reg.update_date DESC"); 
     79                        $invTable = scormcloud_getTableName('scormcloudinvitations'); 
     80                        $regTable = scormcloud_getTableName('scormcloudinvitationregs'); 
     81                        $query = $wpdb->prepare('SELECT reg.reg_id, inv.course_title, inv.course_id, inv.active, reg.update_date FROM '.$regTable.' reg 
     82                                                 JOIN '.$invTable.' inv ON reg.invite_id = inv.invite_id 
     83                                                 WHERE reg.user_id = %s AND inv.course_id = %s ORDER BY reg.update_date DESC', 
     84                                                array($current_user->ID, $courseId)); 
     85                        $reg = $wpdb->get_row($query, OBJECT); 
    8386                         
    84                         if (count($regs) > 0){ 
    85                              
    86                             $reg = $regs[0]; 
     87                        if ($reg != null) { 
    8788                            $regId = $reg->reg_id; 
    8889                            $regResultsXmlStr = $regService->GetRegistrationResult($regId,0,0); 
  • scormcloud/trunk/scormcloud.php

    r411704 r435356  
    55    Description: Tap the power of SCORM to deliver and track training right from your WordPress-powered site. Just add the SCORM Cloud widget to the sidebar or use the SCORM Cloud button to add a link directly in a post or page. 
    66    Author: Rustici Software 
    7     Version: 1.0.6.6 
     7    Version: 1.0.7 
    88    Author URI: http://www.scorm.com 
    99    */ 
     
    187187        global $wpdb; 
    188188        require_once('scormcloud.wp.php'); 
    189         require_once('SCORMAPI/DebugLogger.php'); 
     189        require_once('SCORMCloud_PHPLibrary/DebugLogger.php'); 
    190190        $ScormService = scormcloud_getScormEngineService(); 
    191191        $regService = $ScormService->getRegistrationService(); 
  • scormcloud/trunk/scormcloud.widget.php

    r386359 r435356  
    4848                $regService = $ScormService->getRegistrationService(); 
    4949                 
    50                 $regs = $wpdb->get_results("SELECT reg.reg_id,inv.course_title,inv.course_id, inv.active, reg.update_date FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs reg 
    51                                            JOIN ".scormcloud_getDBPrefix()."scormcloudinvitations inv ON reg.invite_id = inv.invite_id 
    52                                            WHERE user_id = '".$current_user->ID."' AND inv.blog_id = '".$GLOBALS['blog_id']."' 
    53                                            ORDER BY reg.update_date DESC"); 
    54                  
     50                $invTable = scormcloud_getTableName('scormcloudinvitations'); 
     51                $regTable = scormcloud_getTableName('scormcloudinvitationregs'); 
     52                $query = $wpdb->prepare('SELECT reg.reg_id, inv.course_title, inv.course_id, inv.active, reg.update_date FROM '.$regTable.' reg 
     53                                         JOIN '.$invTable.' inv ON reg.invite_id = inv.invite_id 
     54                                         WHERE user_id = %s AND inv.blog_id = %s ORDER BY reg.update_date DESC',  
     55                                        array($current_user->ID, $GLOBALS['blog_id'])); 
     56                $regs = $wpdb->get_results($query, OBJECT); 
    5557                //echo count($regs); 
    5658                 
  • scormcloud/trunk/scormcloud.wp.php

    r283699 r435356  
    22 
    33function scormcloud_getScormEngineService(){ 
    4     require_once('SCORMAPI/ScormEngineService.php'); 
     4    require_once('SCORMCloud_PHPLibrary/ScormEngineService.php'); 
     5    require_once('SCORMCloud_PHPLibrary/ScormEngineUtilities.php'); 
    56     
    67    if (scormcloud_isScormCloudNetworkManaged()){ 
     
    1516    } 
    1617     
     18    $origin = ScormEngineUtilities::getCanonicalOriginString('Rustici Software', 'WordPress', '1.0.6.6'); 
     19     
    1720    //arbitrary number 17 is the length of 'EngineWebServices' 
    1821    if (strlen($engine_url) < 17){ 
     
    2023    } 
    2124     
    22     return new ScormEngineService($engine_url,$appid,$secretkey); 
     25    return new ScormEngineService($engine_url,$appid,$secretkey,$origin); 
    2326} 
    2427 
     
    6063} 
    6164 
     65function scormcloud_getTableName($table) { 
     66    return scormcloud_getDBPrefix().$table; 
     67} 
     68 
     69/** 
     70 * Works similarly to $wpdb->insert/update to select a single row. 
     71 *  
     72 * First arg is always table name, e.g. 'scormcloudinvitations' 
     73 * Second arg is an associative array of column/value pairs for the WHERE clause in the query, 
     74 *  e.g. array('invite_id' => $inviteId) 
     75 * If a third arg is provided, it must be an array of the same dimensions as the second arg and 
     76 *  provide a list of format specifiers, e.g. array('%s', '%s', '%d')  
     77 *  
     78 * Returns the resulting row in OBJECT format, or null if no row was found or the call was invalid 
     79 *  
     80 */ 
     81function scormcloud_getRow() { 
     82    global $wpdb; 
     83    $numargs = func_num_args(); 
     84    if ($numargs < 2 || $numargs > 3) { 
     85        return null; 
     86    } 
     87     
     88    $table = func_get_arg(0); 
     89     
     90    $wheres = null; 
     91    $formats = null; 
     92    if ($numargs == 2) { 
     93        $arg = func_get_arg(1); 
     94        if (!is_array($arg)) { 
     95            // Must be array 
     96            return null; 
     97        } else { 
     98            $wheres = $arg; 
     99        } 
     100    } else if ($numargs == 3) { 
     101        $arg = func_get_arg(1); 
     102        $arg2 = func_get_arg(2); 
     103        if (!(is_array($arg) && is_array($arg2))) { 
     104            // In the 2-arg call format, the args must be arrays 
     105            return null; 
     106        } 
     107         
     108        if (empty($arg) || (count($arg) != count($arg2))) { 
     109            // Arrays must not be empty and must contain same number of args 
     110            return null; 
     111        } 
     112         
     113        $wheres = $arg; 
     114        $formats = $arg2; 
     115    } 
     116     
     117    $i = 0; 
     118    $first = true; 
     119    $whereClause = ' WHERE '; 
     120    $whereValues = array(); 
     121    foreach ($wheres as $col => $val) { 
     122        $format = '%s'; 
     123        if ($formats !== null) { 
     124            $format = $formats[$i]; 
     125            $i++; 
     126        } 
     127         
     128        $comma = ', '; 
     129        if ($first) { 
     130            $comma = ''; 
     131            $first = false; 
     132        } 
     133         
     134        $whereClause .= $comma.$col.' = '.$format; 
     135        $whereValues[] = $val; 
     136    } 
     137     
     138    $query = $wpdb->prepare('SELECT * FROM '.scormcloud_getTableName($table).$whereClause, $whereValues); 
     139    return $wpdb->get_row($query, OBJECT); 
     140} 
     141 
     142function scormcloud_ensureArray($default, $val) { 
     143    if (!is_array($val)) { 
     144        return array($default => $val); 
     145    } 
     146     
     147    return $val; 
     148} 
     149 
     150/** 
     151 * Convenience wrapper for scormcloud_getRow to select a single invitation 
     152 *  
     153 * If the first arg is an array, it is assumed to be an associative array of column/value pairs to pass on to scormcloud_getRow. If it 
     154 *  is not an array, the arg is used as the value for the invite_id column, allowing for a simple scormcloud_getInvitation($inviteId) 
     155 * If a second arg is provided, it should be an array of format specifiers for the first arg 
     156 */ 
     157function scormcloud_getInvitation() { 
     158    $callArgs = array('scormcloudinvitations'); // Table name 
     159    $args = func_get_args(); 
     160    $args[0] = scormcloud_ensureArray('invite_id', $args[0]); 
     161    array_push($callArgs, $args); 
     162    return call_user_func_array('scormcloud_getRow', $callArgs); 
     163} 
     164 
     165/** 
     166 * Convenience wrapper for scormcloud_getRow to select a single invitation registration 
     167 *  
     168 * If the first arg is an array, it is assumed to be an associative array of column/value pairs to pass on to scormcloud_getRow. If it 
     169 *  is not an array, the arg is used as the value for the reg_id column, allowing for a simple scormcloud_getInvitationReg($regId) 
     170 * If a second arg is provided, it should be an array of format specifiers for the first arg 
     171 */ 
     172function scormcloud_getInvitationReg() { 
     173    $callArgs = array('scormcloudinvitationregs'); // Table name 
     174    $args = func_get_args(); 
     175    $args[0] = scormcloud_ensureArray('reg_id', $args[0]); 
     176    array_push($callArgs, $args); 
     177    return call_user_func_array('scormcloud_getRow', $args); 
     178} 
     179 
    62180function scormcloud_regsRemaining(){ 
    63181    $ScormService = scormcloud_getScormEngineService(); 
  • scormcloud/trunk/scormcloud_makeBlogEntry.php

    r368807 r435356  
    1717        $inviteId = substr($tagString,21,strlen($tagString) - 22); 
    1818         
    19         $querystr = "SELECT * FROM ".scormcloud_getDBPrefix()."scormcloudinvitations WHERE invite_id = '".$inviteId."'"; 
    20         $invites = $wpdb->get_results($querystr, OBJECT); 
    21         if (count($invites) == 0){ 
     19        $invite = scormcloud_getInvitation($inviteId); 
     20        if ($invite == null) { 
    2221            $content = str_replace($tagString,'',$content); 
    2322        } 
    24          
    25         $invite = $invites[0]; 
    2623         
    2724        $inviteHtml = "<div class='scormCloudInvitation' key='$inviteId'>"; 
     
    8481            } else { 
    8582                $userId = $current_user->ID; 
    86                 $querystr = "SELECT reg_id FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs WHERE invite_id = '$inviteId' AND user_id = '$userId' ORDER BY update_date DESC"; 
    87                 $regs = $wpdb->get_results($querystr, OBJECT); 
    88                 if (count($regs) > 0){ 
    89                     $regId = $regs[0]->reg_id; 
     83                $query = $wpdb->prepare('SELECT reg_id FROM '.scormcloud_getTableName('scormcloudinvitationregs').' WHERE invite_id = %s AND 
     84                                         user_id = %s ORDER BY update_date DESC', array($inviteId, $userId)); 
     85                $reg = $wpdb->get_row($query, OBJECT); 
     86                if ($reg != null){ 
     87                    $regId = $reg->reg_id; 
    9088                     
    9189                    $regService = $ScormService->getRegistrationService(); 
     
    157155        $inviteId = substr($tagString,21,strlen($tagString) - 22); 
    158156         
    159         $querystr = "UPDATE ".scormcloud_getDBPrefix()."scormcloudinvitations SET post_id = '$postId' WHERE invite_id = '$inviteId'"; 
    160         $wpdb->query($querystr); 
    161          
    162          
    163          
    164          
     157        $wpdb->update(scormcloud_getTableName('scormcloudinvitations'), 
     158                      array('post_id' => $postId, 'invite_id' => $inviteId)); 
    165159    } 
    166160     
  • scormcloud/trunk/scormcloud_manage_training.php

    r361868 r435356  
    217217<?php 
    218218 
    219 $querystr = "SELECT inv.*, count(reg.reg_id) as reg_count FROM ".scormcloud_getDBPrefix()."scormcloudinvitations inv 
    220                 LEFT OUTER JOIN ".scormcloud_getDBPrefix()."scormcloudinvitationregs reg ON inv.invite_id = reg.invite_id 
    221                 WHERE inv.blog_id = '".$GLOBALS['blog_id']."' 
    222                 GROUP BY inv.invite_id 
    223                 ORDER BY inv.create_date DESC"; 
    224                  
    225 $invites = $wpdb->get_results($querystr, OBJECT); 
     219$invTable = scormcloud_getTableName('scormcloudinvitations'); 
     220$regTable = scormcloud_getTableName('scormcloudinvitationregs'); 
     221$query = $wpdb->prepare('SELECT inv.*, count(reg.reg_id) as reg_count FROM '.$invTable.' inv 
     222                         LEFT OUTER JOIN '.$regTable.' reg ON inv.invite_id = reg.invite_id 
     223                         WHERE inv.blog_id = %s GROUP BY inv.invite_id ORDER BY inv.create_date DESC', array($GLOBALS['blog_id'])); 
     224$invites = $wpdb->get_results($query, OBJECT); 
    226225 
    227226echo '<table class="widefat" cellspacing="0" id="InvitationListTable" >'; 
  • scormcloud/trunk/scormcloud_training_details.php

    r361868 r435356  
    33$inviteId = $_GET['inviteid']; 
    44 
    5 $querystr = "SELECT inv.*, count(reg.reg_id) as reg_count FROM ".scormcloud_getDBPrefix()."scormcloudinvitations inv 
    6                 LEFT OUTER JOIN ".scormcloud_getDBPrefix()."scormcloudinvitationregs reg ON inv.invite_id = reg.invite_id 
    7                 WHERE inv.invite_id = '$inviteId' 
    8                 GROUP BY inv.invite_id"; 
    9  
    10 $invites = $wpdb->get_results($querystr, OBJECT); 
    11 $invite = $invites[0]; 
     5$invTable = scormcloud_getTableName('scormcloudinvitations'); 
     6$regTable = scormcloud_getTableName('scormcloudinvitationregs'); 
     7$query = $wpdb->prepare('SELECT inv.*, count(reg.reg_id) as reg_count FROM '.$invTable.' inv 
     8                         LEFT OUTER JOIN '.$regTable.' reg ON inv.invite_id = reg.invite_id 
     9                         WHERE inv.invite_id = %s GROUP BY inv.invite_id', array($inviteId)); 
     10$invite = $wpdb->get_row($query, OBJECT); 
    1211 
    1312 
     
    210209<?php 
    211210 
    212 $querystr = "SELECT * FROM ".scormcloud_getDBPrefix()."scormcloudinvitationregs WHERE invite_id = '$inviteId' ORDER BY update_date DESC"; 
    213 $inviteRegs = $wpdb->get_results($querystr, OBJECT); 
     211$query = $wpdb->prepare('SELECT * FROM '.$regTable.' WHERE invite_id = %s ORDER BY update_date DESC', array($inviteId)); 
     212$inviteRegs = $wpdb->get_results($query, OBJECT); 
    214213 
    215214$regService = $ScormService->getRegistrationService(); 
Note: See TracChangeset for help on using the changeset viewer.