Example #1
0
 public function ajax_check_database()
 {
     if ($this->in->get('host') != '' && $this->in->get('user') != '' && $this->in->get('pw') != '' && $this->in->get('name') != '') {
         $error = array();
         $this->db = dbal::factory(array('dbtype' => 'mysql', 'die_gracefully' => true));
         $result = $this->db->open($this->in->get('host'), $this->in->get('name'), $this->in->get('user'), $this->in->get('pw'));
         if ($result) {
             //Schreibe die Daten in die Config
             $this->config->set('cmsbridge_host', $this->crypt->encrypt($this->in->get('host')));
             $this->config->set('cmsbridge_user', $this->crypt->encrypt($this->in->get('user')));
             $this->config->set('cmsbridge_password', $this->crypt->encrypt($this->in->get('pw', '', 'raw')));
             $this->config->set('cmsbridge_database', $this->crypt->encrypt($this->in->get('name')));
             $this->config->set('cmsbridge_notsamedb', 1);
             echo "true";
             die;
         } else {
             $this->config->del('cmsbridge_host');
             $this->config->del('cmsbridge_user');
             $this->config->del('cmsbridge_password');
             $this->config->del('cmsbridge_database');
             $this->config->del('cmsbridge_notsamedb');
         }
     }
     echo "false";
     exit;
 }
Example #2
0
 public function ajax_check_database()
 {
     header('content-type: text/html; charset=UTF-8');
     if ($this->in->get('host') != '' && $this->in->get('user') != '' && $this->in->get('pw') != '' && $this->in->get('name') != '') {
         $error = array();
         try {
             $db = dbal::factory(array('dbtype' => registry::get_const('dbtype')));
             $db->connect($this->in->get('host'), $this->in->get('name'), $this->in->get('user'), $this->in->get('pw'));
             //Schreibe die Daten in die Config
             $this->config->set('cmsbridge_host', $this->crypt->encrypt($this->in->get('host')));
             $this->config->set('cmsbridge_user', $this->crypt->encrypt($this->in->get('user')));
             $this->config->set('cmsbridge_password', $this->crypt->encrypt($this->in->get('pw', '', 'raw')));
             $this->config->set('cmsbridge_database', $this->crypt->encrypt($this->in->get('name')));
             $this->config->set('cmsbridge_notsamedb', 1);
             echo "true";
             exit;
         } catch (DBALException $e) {
             $this->config->del('cmsbridge_host');
             $this->config->del('cmsbridge_user');
             $this->config->del('cmsbridge_password');
             $this->config->del('cmsbridge_database');
             $this->config->del('cmsbridge_notsamedb');
         }
     }
     sleep(1);
     echo "false";
     exit;
 }
/**
* Updates rows in given table from a set of values to a new value.
* If this results in rows violating uniqueness constraints, the duplicate
* rows are merged respecting notify_status (0 takes precedence over 1).
*
* The only supported table is topics_watch.
*
* @param dbal $db Database object
* @param string $table Table on which to perform the update
* @param string $column Column whose values to change
* @param array $from_values An array of values that should be changed
* @param int $to_value The new value
* @return null
*/
function phpbb_update_rows_avoiding_duplicates_notify_status($db, $table, $column, $from_values, $to_value)
{
    $sql = "SELECT {$column}, user_id, notify_status\n\t\tFROM {$table}\n\t\tWHERE " . $db->sql_in_set($column, $from_values);
    $result = $db->sql_query($sql);
    $old_user_ids = array();
    while ($row = $db->sql_fetchrow($result)) {
        $old_user_ids[(int) $row['notify_status']][$row[$column]][] = (int) $row['user_id'];
    }
    $db->sql_freeresult($result);
    $sql = "SELECT {$column}, user_id\n\t\tFROM {$table}\n\t\tWHERE {$column} = " . (int) $to_value;
    $result = $db->sql_query($sql);
    $new_user_ids = array();
    while ($row = $db->sql_fetchrow($result)) {
        $new_user_ids[$row[$column]][] = (int) $row['user_id'];
    }
    $db->sql_freeresult($result);
    $queries = array();
    $extra_updates = array(0 => 'notify_status = 0', 1 => '');
    foreach ($from_values as $from_value) {
        foreach ($extra_updates as $notify_status => $extra_update) {
            if (!isset($old_user_ids[$notify_status][$from_value])) {
                continue;
            }
            if (empty($new_user_ids)) {
                $sql = "UPDATE {$table}\n\t\t\t\t\tSET {$column} = " . (int) $to_value . "\n\t\t\t\t\tWHERE {$column} = '" . $db->sql_escape($from_value) . "'";
                $queries[] = $sql;
            } else {
                $different_user_ids = array_diff($old_user_ids[$notify_status][$from_value], $new_user_ids[$to_value]);
                if (!empty($different_user_ids)) {
                    $sql = "UPDATE {$table}\n\t\t\t\t\t\tSET {$column} = " . (int) $to_value . "\n\t\t\t\t\t\tWHERE {$column} = '" . $db->sql_escape($from_value) . "'\n\t\t\t\t\t\tAND " . $db->sql_in_set('user_id', $different_user_ids);
                    $queries[] = $sql;
                }
                if ($extra_update) {
                    $same_user_ids = array_diff($old_user_ids[$notify_status][$from_value], $different_user_ids);
                    if (!empty($same_user_ids)) {
                        $sql = "UPDATE {$table}\n\t\t\t\t\t\t\tSET {$extra_update}\n\t\t\t\t\t\t\tWHERE {$column} = '" . (int) $to_value . "'\n\t\t\t\t\t\t\tAND " . $db->sql_in_set('user_id', $same_user_ids);
                        $queries[] = $sql;
                    }
                }
            }
        }
    }
    if (!empty($queries)) {
        $db->sql_transaction('begin');
        foreach ($queries as $sql) {
            $db->sql_query($sql);
        }
        $sql = "DELETE FROM {$table}\n\t\t\tWHERE " . $db->sql_in_set($column, $from_values);
        $db->sql_query($sql);
        $db->sql_transaction('commit');
    }
}
Example #4
0
 public static function available_dbals()
 {
     $arrDbals = array('mysqli' => 'MySQLi', 'mysql_pdo' => 'MySQL PDO');
     foreach ($arrDbals as $key => $name) {
         if (dbal::check_if_pdo($key)) {
             $blnCheckResult = dbal::check_pdo(dbal::check_if_pdo($key));
         } else {
             $blnCheckResult = dbal::check_extension($key);
         }
         if (!$blnCheckResult) {
             unset($arrDbals[$key]);
         }
     }
     return $arrDbals;
 }
 public function __construct()
 {
     $this->code = get_class($this);
     $this->prefix = $this->config->get('cmsbridge_prefix');
     //Initialisierung der DB-Connection
     if ($this->config->get('cmsbridge_notsamedb') == '1') {
         $this->db = dbal::factory(array('dbtype' => 'mysql', 'die_gracefully' => true, 'debug_prefix' => 'bridge_', 'table_prefix' => $this->prefix));
         if (!$this->db->open($this->crypt->decrypt($this->config->get('cmsbridge_host')), $this->crypt->decrypt($this->config->get('cmsbridge_database')), $this->crypt->decrypt($this->config->get('cmsbridge_user')), $this->crypt->decrypt($this->config->get('cmsbridge_password')))) {
             $this->db = false;
         }
         //$this->deactivate_bridge();
     } else {
         $this->db = dbal::factory(array('dbtype' => $this->dbtype, 'die_gracefully' => true, 'debug_prefix' => 'bridge_', 'table_prefix' => $this->prefix));
         $this->db->open($this->dbhost, $this->dbname, $this->dbuser, $this->dbpass);
     }
 }
Example #6
0
 protected function connect2olddb()
 {
     if (!is_object($this->old[0])) {
         if ($this->step_data['old_db_data'][0] === true) {
             $this->old[0] = dbal::factory(array('dbtype' => $this->dbtype));
             $this->old[0]->open($this->step_data['old_db_data']['host'], $this->step_data['old_db_data']['name'], $this->step_data['old_db_data']['user'], $this->step_data['old_db_data']['pass']);
             $this->old[1] = $this->step_data['old_db_data']['prefix'];
             $this->old[2] = $this->step_data['old_db_data']['name'];
         } else {
             $this->old[0] = $this->new[0];
             $this->old[1] = $this->step_data['old_db_data']['prefix'];
             $this->old[2] = $this->new[2];
         }
     }
     return $this->old[0]->query("SELECT config_value FROM " . $this->old[1] . "config WHERE config_name = 'plus_version'") ? true : false;
 }
Example #7
0
 /**
  * Initialize the Bridge Database Connection
  */
 private function connect()
 {
     if ((int) $this->config->get('cmsbridge_notsamedb') == 1) {
         try {
             $this->bridgedb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'debug_prefix' => 'bridge_', 'table_prefix' => $this->prefix));
             $this->bridgedb->connect($this->crypt->decrypt($this->config->get('cmsbridge_host')), $this->crypt->decrypt($this->config->get('cmsbridge_database')), $this->crypt->decrypt($this->config->get('cmsbridge_user')), $this->crypt->decrypt($this->config->get('cmsbridge_password')));
             $this->status = true;
         } catch (DBALException $e) {
             $this->bridgedb = $this->status = false;
             $this->pdl->log('bridge', 'Connection error: ' . $e->getMessage());
         }
     } else {
         try {
             $this->bridgedb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'open' => true, 'debug_prefix' => 'bridge_', 'table_prefix' => $this->prefix));
             $this->status = true;
         } catch (DBALException $e) {
             $this->bridgedb = $this->status = false;
             $this->pdl->log('bridge', 'Connection error: ' . $e->getMessage());
         }
     }
 }
Example #8
0
 /**
  * Called when new item creates
  * Calc position for item and set it
  */
 private function assign_position()
 {
     $sql_tail = '';
     if (!$this->container->with_positions()) {
         return;
     }
     $pos = $this->field('position');
     if (isset($pos['space'])) {
         $sql_tail = ' WHERE ' . $this->make_space_sql($pos['space']);
     }
     $sql = "SELECT max(position) as mp FROM " . $this->get_table() . $sql_tail;
     $row = $this->db->fetch_row($res = $this->db->query($sql));
     $this->db->free_result($res);
     $this->position = (int) $row['mp'] + 1;
 }
 public function createConnection()
 {
     $arrOptions = $this->config->get('general_data', 'cmsimport');
     $db_type = $arrOptions['db_type'];
     $db_host = $arrOptions['db_host'];
     $db_user = $arrOptions['db_user'];
     $db_password = $arrOptions['db_password'];
     $db_database = $arrOptions['db_database'];
     $db_prefix = $arrOptions['db_prefix'];
     if ((int) $db_type == 0) {
         //Same DB
         try {
             $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'open' => true, 'debug_prefix' => 'cmsimport_', 'table_prefix' => trim($db_prefix)));
         } catch (DBALException $e) {
             $mydb = false;
         }
     } elseif ((int) $db_type == 1) {
         //Other DB
         try {
             $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'debug_prefix' => 'cmsimport_', 'table_prefix' => trim($db_prefix)));
             $mydb->connect($db_host, $db_database, $db_user, $db_password);
         } catch (DBALException $e) {
             $mydb = false;
         }
     } elseif ((int) $db_type == 2) {
         //Bridge
         $mydb = $this->bridge->bridgedb;
     }
     return $mydb;
 }
 public function parse_input()
 {
     $this->dbtype = $this->in->get('dbtype');
     $this->dbhost = $this->in->get('dbhost', $this->dbhost);
     $this->dbname = $this->in->get('dbname');
     $this->dbuser = $this->in->get('dbuser');
     $this->dbpass = $this->in->get('dbpass', '', 'raw');
     // Check database name
     if ($this->dbname == "") {
         $this->pdl->log('install_error', $this->lang['dbname_error']);
         return false;
     }
     $error = array();
     include_once $this->root_path . 'libraries/dbal/dbal.class.php';
     try {
         if ($this->dbtype === 'mysql') {
             $this->dbtype == 'mysqli';
         }
         $db = dbal::factory(array('dbtype' => $this->dbtype));
         $db->connect($this->dbhost, $this->dbname, $this->dbuser, $this->dbpass);
     } catch (DBALException $e) {
         $this->pdl->log('install_error', $e->getMessage());
         return false;
     }
     $this->pdl->log('install_success', $this->lang['dbcheck_success']);
     //Before writing the config-file, we have to check the writing-permissions of the tmp-folder
     if ($this->use_ftp && !$this->pfh->testWrite()) {
         $this->pdl->log('install_error', sprintf($this->lang['ftp_tmpwriteerror'], $this->pfh->get_cachefolder(true)));
         return false;
     }
     $this->configfile_fill();
     registry::$aliases['db'] = 'dbal_' . $this->dbtype;
     include_once $this->root_path . 'libraries/dbal/' . $this->dbtype . '.dbal.class.php';
     return true;
 }
Example #11
0
 /**
  * Convert value to SQL form on
  * Prepare item's data to database output
  * @param mixed field key
  * @param mixed field value
  *
  * @return mixed formatted value
  */
 function format_field_sql($key, $fld, $vf = null)
 {
     if (!isset($vf)) {
         $vf = $this->field($key);
     }
     $type = $vf['type'];
     switch ($type) {
         case 'timestamp':
             $fld = "to_timestamp('{$fld}', 'DD.MM.YYYY HH24:MI')";
             // postgres timestamp
             break;
         case 'numeric':
             $fld = floatval($fld);
             if (!empty($vf['long'])) {
                 $fld = sprintf('%u', $fld);
             }
             break;
         case 'unixtime':
         case 'position':
             $fld = intval($fld);
             break;
         case 'boolean':
             // sqlite doesnt supp true/false
             $fld = $fld ? '1' : '0';
             break;
         case 'image':
         case 'file':
             if (is_array($fld)) {
                 // remove unused stuff from asving to storage
                 if (isset($fld['thumbnail'])) {
                     unset($fld['thumbnail']);
                 }
             }
             $fld = empty($fld) ? "''" : "'" . serialize($fld) . "'";
             break;
         default:
             $fld = "'" . $this->db->escape($fld) . "'";
             break;
     }
     return $fld;
 }
Example #12
0
 /**
  * @param dbal $db
  * @param string $sql
  */
 function run_queries($db, $sql)
 {
     if (strpos($sql, ';') !== false) {
         $sql = explode(';', $sql);
         foreach ($sql as $query) {
             $query = trim($query);
             if (!empty($query)) {
                 $db->query($query);
             }
         }
     } else {
         $db->query($sql);
     }
 }
 public function output()
 {
     $myOut = $this->pdc->get('portal.module.latestposts.u' . $this->user->id, false, true);
     if (!$myOut) {
         // do the link-thing..
         $myTarget = $this->config('linktype') == '1' ? '_blank' : '';
         $strBoardURL = $this->config('url');
         if (substr($this->config('url'), -1) != "/") {
             $strBoardURL .= '/';
         }
         //Try a database connection
         if ($this->config->get('cmsbridge_active') == 1 && $this->config('dbmode') == 'bridge') {
             //Bridge Connection
             $mydb = $this->bridge->bridgedb;
             //change prefix
             if (strlen(trim($this->config('dbprefix')))) {
                 $mydb->setPrefix(trim($this->config('dbprefix')));
             }
         } elseif ($this->config('dbmode') == 'new') {
             //Another Database
             try {
                 $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config('dbprefix'))));
                 $mydb->connect($this->encrypt->decrypt($this->config('dbhost')), $this->encrypt->decrypt($this->config('dbname')), $this->encrypt->decrypt($this->config('dbuser')), $this->encrypt->decrypt($this->config('dbpassword')));
             } catch (DBALException $e) {
                 $mydb = false;
             }
         } else {
             //Same Database
             try {
                 $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'open' => true, 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config('dbprefix'))));
             } catch (DBALException $e) {
                 $mydb = false;
             }
         }
         if (!$mydb) {
             return $this->user->lang('latestposts_connerror');
         }
         // Set some Variables we're using in the BB Modules..
         $topicnumber = $this->config('amount') ? $this->config('amount') : 5;
         $black_or_white = $this->config('blackwhitelist') == 'white' ? 'IN' : 'NOT IN';
         // include the BB Module File...
         $bbModule = $this->root_path . 'portal/latestposts/bb_modules/' . $this->config('bbmodule') . '.php';
         if (is_file($bbModule)) {
             include_once $bbModule;
             $classname = 'latestpostsmodule_' . $this->config('bbmodule');
             $module = new $classname();
             if (!$module || !method_exists($module, 'getBBQuery')) {
                 return $this->user->lang('portal_latestposts_invmodule');
             }
         } else {
             return $this->user->lang('portal_latestposts_nomodule');
         }
         // Create Array of allowed/disallowed forums
         $arrUserMemberships = $this->pdh->get('user_groups_users', 'memberships', array($this->user->id));
         array_push($arrUserMemberships, 0);
         $arrForums = array();
         $visibilityGrps = $this->config('visibility');
         foreach ($arrUserMemberships as $groupid) {
             //only load forums for which actual settings are set
             if (!in_array($groupid, $visibilityGrps)) {
                 continue;
             }
             $strForums = $this->config('privateforums_' . $groupid);
             if (method_exists($module, 'getBBForumQuery')) {
                 if (is_array($strForums)) {
                     $arrForums = array_merge($arrForums, $strForums);
                 }
             } else {
                 //comma seperated IDs
                 $arrTmpForums = $this->config('privateforums_' . $groupid) ? explode(",", $this->config('privateforums_' . $groupid)) : '';
                 if (is_array($arrTmpForums)) {
                     foreach ($arrTmpForums as $forumid) {
                         if (trim($forumid) != '') {
                             $arrForums[] = trim($forumid);
                         }
                     }
                 }
             }
         }
         $arrForums = array_unique($arrForums);
         //d($arrForums);
         // if there are no forums selected and its whitelist
         if (count($arrForums) == 0 && $black_or_white == 'IN') {
             return $this->user->lang('portal_latestposts_noselectedboards');
         }
         $strQuery = $module->getBBQuery($arrForums, $black_or_white, $topicnumber);
         // Wide Content
         if ($this->wide_content) {
             $objQuery = $mydb->query($strQuery);
             if ($objQuery) {
                 $sucess = true;
                 $blnForumName = false;
                 $arrResult = $objQuery->fetchAllAssoc();
                 if (count($arrResult)) {
                     foreach ($arrResult as $row) {
                         $strMemberlinkWrapper = $this->routing->build('external', $row['bb_username'] . '-' . $row['bb_user_id'], 'User');
                         $strTopiclinkWrapper = $this->routing->build('external', $row['bb_topic_title'] . '-' . $row['bb_post_id'] . '-' . $row['bb_topic_id'], 'Topic');
                         $member_link = in_array($this->config('linktype'), range(0, 1)) ? $strBoardURL . $module->getBBLink('member', $row) : $strMemberlinkWrapper;
                         $topic_link = in_array($this->config('linktype'), range(0, 1)) ? $strBoardURL . $module->getBBLink('topic', $row) : $strTopiclinkWrapper;
                         $myOut .= "<tr valign='top'>\n\t\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t\t<a href='" . htmlentities($topic_link) . "' target='" . $myTarget . "'>" . $row['bb_topic_title'] . "</a>\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t</td>";
                         if (isset($row['bb_forum_name'])) {
                             $myOut .= "<td>" . $row['bb_forum_name'] . "</td>";
                             $blnForumName = true;
                         }
                         $myOut .= "</td>\n\t\t\t\t\t\t\t\t\t\t<td align='center'>" . $row['bb_replies'] . "</td>\n\t\t\t\t\t\t\t\t\t\t<td><a href='" . htmlentities($topic_link) . "' target='" . $myTarget . "'>" . $this->time->createTimeTag($row['bb_posttime'], $this->time->user_date($row['bb_posttime'], true)) . "</a>, \n\t\t\t\t\t\t\t\t\t\t<a href='" . htmlentities($member_link) . "' target='" . $myTarget . "'>" . $row['bb_username'] . "</a> <a href='" . htmlentities($topic_link) . "' target='" . $myTarget . "'></a>\n\t\t\t\t\t\t\t\t\t\t<a href='" . htmlentities($topic_link) . "' target='" . $myTarget . "'><i class=\"fa fa-chevron-right\"></i></a>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>";
                     }
                 } else {
                     $myOut .= "<tr valign='top'>\n\t\t\t\t\t\t\t\t\t<td colspan='3'>" . $this->user->lang('latestposts_noentries') . "</td>\n\t\t\t\t\t\t\t\t</tr>";
                 }
                 $myOut = "<table class='table fullwidth colorswitch'>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th width='50%'>" . $this->user->lang('latestposts_title') . "</th>\n\t\t\t\t\t\t\t\t" . ($blnForumName ? '<th class="nowrap" width="10%">' . $this->user->lang('latestposts_forum') . '</th>' : '') . "\n\t\t\t\t\t\t\t\t<th width='10%'>" . $this->user->lang('latestposts_posts') . "</th>\n\t\t\t\t\t\t\t\t<th width='20%'>" . $this->user->lang('latestposts_lastpost') . "</th>\n\t\t\t\t\t\t\t</tr>" . $myOut;
                 $myOut .= "</table>";
             } else {
                 $myOut = "An error occured. Please check your settings.";
             }
         } else {
             // Sidebar Output
             $objQuery = $mydb->query($strQuery);
             if ($objQuery) {
                 $myOut = "<table class='table fullwidth colorswitch'>";
                 $arrResult = $objQuery->fetchAllAssoc();
                 if (count($arrResult)) {
                     $sucess = true;
                     $myTitleLength = $this->config('trimtitle') ? $this->config('trimtitle') : 40;
                     foreach ($arrResult as $row) {
                         if (strlen($row['bb_topic_title']) > $myTitleLength) {
                             $short_title = substr($row['bb_topic_title'], 0, $myTitleLength) . "...";
                         } else {
                             $short_title = $row['bb_topic_title'];
                         }
                         $strMemberlinkWrapper = $this->routing->build('external', $row['bb_username'] . '-' . $row['bb_user_id'], 'User');
                         $strTopiclinkWrapper = $this->routing->build('external', $row['bb_topic_title'] . '-' . $row['bb_post_id'] . '-' . $row['bb_topic_id'], 'Topic');
                         $member_link = in_array($this->config('linktype'), range(0, 1)) ? $strBoardURL . $module->getBBLink('member', $row) : $strMemberlinkWrapper;
                         $topic_link = in_array($this->config('linktype'), range(0, 1)) ? $strBoardURL . $module->getBBLink('topic', $row) : $strTopiclinkWrapper;
                         $myOut .= "<tr valign='top'>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t<a href='" . $topic_link . "' target='" . $myTarget . "'>" . $short_title . "</a> (" . $row['bb_replies'] . ")<br/>\n\t\t\t\t\t\t\t\t\t\t" . $this->time->createTimeTag($row['bb_posttime'], $this->time->user_date($row['bb_posttime'], true)) . ", <a href='" . $member_link . "' target='" . $myTarget . "'>" . sanitize($row['bb_username']) . "</a>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>";
                     }
                     $myOut .= "</table>";
                     $sucess = true;
                 } else {
                     $myOut = $this->user->lang('latestposts_noentries');
                 }
             }
         }
         //reset prefix
         if ($this->config('dbmode') == 'bridge') {
             $mydb->resetPrefix();
         }
         if (isset($sucess)) {
             $this->pdc->put('portal.module.latestposts.u' . $this->user->id, $myOut, 300, false, true);
         }
     }
     return $myOut;
 }
Example #14
0
 public function get_latestposts($params, $body)
 {
     $intNumber = intval($params['get']['number']) > 0 ? intval($params['get']['number']) : 10;
     $myOut = $this->pdc->get('portal.modul.latestposts.exchange.' . $intNumber . '.u' . $this->user->id, false, true);
     if (!$myOut) {
         // Select the Database to use.. (same, bridged mode, other)
         if ($this->config->get('cmsbridge_active') == 1 && $this->config->get('pk_latestposts_dbmode') == 'bridge') {
             $mydb = $this->bridge->db;
             //change prefix
             if (strlen(trim($this->config->get('pk_latestposts_dbprefix')))) {
                 $mydb->set_prefix(trim($this->config->get('pk_latestposts_dbprefix')));
             }
         } elseif ($this->config->get('pk_latestposts_dbmode') == 'new') {
             $mydb = dbal::factory(array('dbtype' => 'mysqli', 'die_gracefully' => true, 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config->get('pk_latestposts_dbprefix'))));
             $mydb->open($this->crypt->decrypt($this->config->get('pk_latestposts_dbhost')), $this->crypt->decrypt($this->config->get('pk_latestposts_dbname')), $this->crypt->decrypt($this->config->get('pk_latestposts_dbuser')), $this->crypt->decrypt($this->config->get('pk_latestposts_dbpassword')));
         } else {
             $mydb = dbal::factory(array('dbtype' => 'mysqli', 'die_gracefully' => true, 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config->get('pk_latestposts_dbprefix'))));
             $mydb->open($this->dbhost, $this->dbname, $this->dbuser, $this->dbpass);
         }
         $black_or_white = $this->config->get('pk_latestposts_blackwhitelist') == 'white' ? 'IN' : 'NOT IN';
         // include the BB Module File...
         $bbModule = $this->root_path . 'portal/latestposts/bb_modules/' . $this->config->get('pk_latestposts_bbmodule') . '.php';
         if (is_file($bbModule)) {
             include_once $bbModule;
             $classname = 'latestpostsmodule_' . $this->config->get('pk_latestposts_bbmodule');
             $module = new $classname();
             if (!$module || !method_exists($module, 'getBBQuery')) {
                 return $this->pex->error('boardmodule not available');
             }
         } else {
             return $this->pex->error('no boardmodule selected');
         }
         // Create Array of allowed/disallowed forums
         $arrUserMemberships = $this->pdh->get('user_groups_users', 'memberships', array($this->user->id));
         array_push($arrUserMemberships, 0);
         $arrForums = array();
         foreach ($arrUserMemberships as $groupid) {
             $strForums = $this->config->get('pk_latestposts_privateforums_' . $groupid);
             if (method_exists($module, 'getBBForumQuery')) {
                 //serialized IDs
                 $arrTmpForums = @unserialize($strForums);
                 if (is_array($arrTmpForums)) {
                     foreach ($arrTmpForums as $forumid) {
                         $arrForums[] = $forumid;
                     }
                 }
             } else {
                 //comma seperated IDs
                 $arrTmpForums = $this->config->get('pk_latestposts_privateforums') ? explode(",", $this->config->get('pk_latestposts_privateforums')) : '';
                 if (is_array($arrTmpForums)) {
                     foreach ($arrTmpForums as $forumid) {
                         if (trim($forumid) != '') {
                             $arrForums[] = trim($forumid);
                         }
                     }
                 }
             }
         }
         $strQuery = $module->getBBQuery($arrForums, $black_or_white, $intNumber);
         $myOut['forum_url'] = htmlentities($this->config->get('pk_latestposts_url'));
         $strBoardURL = $this->config->get('pk_latestposts_url');
         if (substr($this->config->get('pk_latestposts_url'), -1) != "/") {
             $strBoardURL .= '/';
         }
         $myOut['posts'] = array();
         $sucess = false;
         if ($bb_result = $mydb->query($strQuery)) {
             $sucess = true;
             while ($row = $mydb->fetch_record($bb_result)) {
                 $myOut['posts'][] = array('member_link' => htmlentities($strBoardURL . $module->getBBLink('member', $row)), 'topic_link' => htmlentities($strBoardURL . $module->getBBLink('topic', $row)), 'topic_title' => $row['bb_topic_title'], 'topic_replies' => intval($row['bb_replies']), 'topic_lastpost_date' => $this->time->date('Y-m-d H:i', $row['bb_posttime']), 'topic_lastpost_timestamp' => $row['bb_posttime'], 'topic_lastpost_username' => $row['bb_username']);
             }
         } else {
             $myOut['posts'] = array();
         }
         if ($sucess) {
             $this->pdc->put('portal.modul.latestposts.exchange.' . $intNumber . '.u' . $this->user->id, $myOut, 300, false, true);
         }
     }
     return $myOut;
 }
 public function createConnection($db_type, $db_host, $db_user, $db_password, $db_database, $db_prefix)
 {
     if ((int) $db_type == 0) {
         //Same DB
         try {
             $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'open' => true, 'debug_prefix' => 'sso_connector_', 'table_prefix' => trim($db_prefix)));
         } catch (DBALException $e) {
             $mydb = false;
         }
     } elseif ((int) $db_type == 1) {
         //Other DB
         try {
             $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'debug_prefix' => 'sso_connector_', 'table_prefix' => trim($db_prefix)));
             $mydb->connect($db_host, $db_database, $db_user, $db_password);
         } catch (DBALException $e) {
             $mydb = false;
         }
     } elseif ((int) $db_type == 2) {
         //Bridge
         $mydb = $this->bridge->bridgedb;
     }
     return $mydb;
 }
 public function get_latestposts($params, $body)
 {
     $intNumber = intval($params['get']['number']) > 0 ? intval($params['get']['number']) : 10;
     $myOut = $this->pdc->get('portal.module.latestposts.exchange.' . $intNumber . '.u' . $this->user->id, false, true);
     if (!$myOut) {
         //Try a database connection
         if ($this->config->get('cmsbridge_active') == 1 && $this->config->get('dbmode', 'pmod_' . $this->module_id) == 'bridge') {
             //Bridge Connection
             $mydb = $this->bridge->bridgedb;
             //change prefix
             if (strlen(trim($this->config->get('dbprefix', 'pmod_' . $this->module_id)))) {
                 $mydb->setPrefix(trim($this->config->get('dbprefix', 'pmod_' . $this->module_id)));
             }
         } elseif ($this->config->get('dbmode', 'pmod_' . $this->module_id) == 'new') {
             //Another Database
             try {
                 $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config->get('dbprefix', 'pmod_' . $this->module_id))));
                 $mydb->connect($this->crypt->decrypt($this->config->get('dbhost', 'pmod_' . $this->module_id)), $this->crypt->decrypt($this->config->get('dbname', 'pmod_' . $this->module_id)), $this->crypt->decrypt($this->config->get('dbuser', 'pmod_' . $this->module_id)), $this->crypt->decrypt($this->config->get('dbpassword', 'pmod_' . $this->module_id)));
             } catch (DBALException $e) {
                 $mydb = false;
             }
         } else {
             //Same Database
             try {
                 $mydb = dbal::factory(array('dbtype' => registry::get_const('dbtype'), 'open' => true, 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config->get('dbprefix', 'pmod_' . $this->module_id))));
             } catch (DBALException $e) {
                 $mydb = false;
             }
         }
         if ($mydb) {
             $black_or_white = $this->config->get('blackwhitelist', 'pmod_' . $this->module_id) == 'white' ? 'IN' : 'NOT IN';
             // include the BB Module File...
             $bbModule = $this->root_path . 'portal/latestposts/bb_modules/' . $this->config->get('bbmodule', 'pmod_' . $this->module_id) . '.php';
             if (is_file($bbModule)) {
                 include_once $bbModule;
                 $classname = 'latestpostsmodule_' . $this->config->get('bbmodule', 'pmod_' . $this->module_id);
                 $module = new $classname();
                 if (!$module || !method_exists($module, 'getBBQuery')) {
                     return $this->pex->error('boardmodule not available');
                 }
             } else {
                 return $this->pex->error('no boardmodule selected');
             }
             // Create Array of allowed/disallowed forums
             $arrUserMemberships = $this->pdh->get('user_groups_users', 'memberships', array($this->user->id));
             array_push($arrUserMemberships, 0);
             $arrForums = array();
             $visibilityGrps = $this->config->get('visibility', 'pmod_' . $this->module_id);
             foreach ($arrUserMemberships as $groupid) {
                 //only load forums for which actual settings are set
                 if (!in_array($groupid, $visibilityGrps)) {
                     continue;
                 }
                 $strForums = $this->config->get('privateforums_' . $groupid, 'pmod_' . $this->module_id);
                 if (method_exists($module, 'getBBForumQuery')) {
                     $arrForums = array_merge($arrForums, $strForums);
                 } else {
                     //comma seperated IDs
                     $arrTmpForums = $this->config->get('privateforums', 'pmod_' . $this->module_id) ? explode(",", $this->config->get('privateforums', 'pmod_' . $this->module_id)) : '';
                     if (is_array($arrTmpForums)) {
                         foreach ($arrTmpForums as $forumid) {
                             if (trim($forumid) != '') {
                                 $arrForums[] = trim($forumid);
                             }
                         }
                     }
                 }
             }
             $arrForums = array_unique($arrForums);
             $strQuery = $module->getBBQuery($arrForums, $black_or_white, $intNumber);
             $myOut['forum_url'] = htmlentities($this->config->get('url', 'pmod_' . $this->module_id));
             $strBoardURL = $this->config->get('url', 'pmod_' . $this->module_id);
             if (substr($strBoardURL, -1) != "/") {
                 $strBoardURL .= '/';
             }
             $myOut['posts'] = array();
             $sucess = false;
             $objQuery = $mydb->query($strQuery);
             if ($objQuery && $objQuery->numRows) {
                 $sucess = true;
                 while ($row = $objQuery->fetchAssoc()) {
                     $myOut['posts'][] = array('member_link' => htmlentities($strBoardURL . $module->getBBLink('member', $row)), 'topic_link' => htmlentities($strBoardURL . $module->getBBLink('topic', $row)), 'topic_title' => $row['bb_topic_title'], 'topic_replies' => intval($row['bb_replies']), 'topic_lastpost_date' => $this->time->date('Y-m-d H:i', $row['bb_posttime']), 'topic_lastpost_timestamp' => $row['bb_posttime'], 'topic_lastpost_username' => $row['bb_username']);
                 }
             } else {
                 $myOut['posts'] = array();
             }
             if ($sucess) {
                 $this->pdc->put('portal.module.latestposts.exchange.' . $intNumber . '.u' . $this->user->id, $myOut, 300, false, true);
             }
         } else {
             return $this->pex->error('connection error');
         }
     }
     return $myOut;
 }
Example #17
0
 public function parse_input()
 {
     $this->dbtype = $this->in->get('dbtype');
     $this->dbhost = $this->in->get('dbhost', $this->dbhost);
     $this->dbname = $this->in->get('dbname');
     $this->dbuser = $this->in->get('dbuser');
     $this->table_prefix = $this->in->get('table_prefix', $this->table_prefix);
     $this->dbpass = $this->in->get('dbpass', '', 'raw');
     // check table_prefix
     if (!$this->table_prefix || !preg_match('/^[a-zA-Z]+$/', substr($this->table_prefix, 0, 1))) {
         $this->pdl->log('install_error', $this->lang['prefix_error']);
         return false;
     }
     $error = array();
     include_once $this->root_path . 'libraries/dbal/dbal.class.php';
     try {
         $db = dbal::factory(array('dbtype' => $this->dbtype));
         $db->connect($this->dbhost, $this->dbname, $this->dbuser, $this->dbpass);
     } catch (DBALException $e) {
         $this->pdl->log('install_error', $e->getMessage());
         return false;
     }
     //Check the Table Prefix
     if (strpos($this->table_prefix, '.') !== false || strpos($this->table_prefix, '\\') !== false || strpos($this->table_prefix, '/') !== false) {
         $this->pdl->log('install_error', $this->lang['INST_ERR_PREFIX_INVALID']);
         return false;
     }
     //Check for existing Installation
     $arrTables = $db->listTables();
     foreach ($arrTables as $tbl) {
         if (strncasecmp($tbl, $this->table_prefix, strlen($this->table_prefix)) == 0) {
             $this->pdl->log('install_error', $this->lang['INST_ERR_PREFIX']);
             return false;
         }
     }
     $this->pdl->log('install_success', $this->lang['dbcheck_success']);
     //Before writing the config-file, we have to check the writing-permissions of the tmp-folder
     if ($this->use_ftp && !$this->pfh->testWrite()) {
         $this->pdl->log('install_error', sprintf($this->lang['ftp_tmpwriteerror'], $this->pfh->get_cachefolder(true)));
         return false;
     }
     $this->configfile_fill();
     registry::$aliases['db'] = 'dbal_' . $this->dbtype;
     include_once $this->root_path . 'libraries/dbal/' . $this->dbtype . '.dbal.class.php';
     return true;
     //maybe show version?
     #$server_version	= mysql_get_server_info();
     #$client_version	= mysql_get_client_info();
 }
Example #18
0
 /**
  * Gets the exact number of rows in a specified table.
  *
  * @param string $table_name		Table name
  *
  * @return string				Exact number of rows in $table_name.
  *
  * @access public
  */
 function get_row_count($table_name)
 {
     $table_status = $this->get_table_status($table_name);
     if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') {
         return $table_status['Rows'];
     }
     return parent::get_row_count($table_name);
 }
 public function output()
 {
     $myOut = $this->pdc->get('portal.modul.latestposts.u' . $this->user->id . '.' . $this->root_path, false, true);
     if (!$myOut) {
         // do the link-thing..
         $myTarget = $this->config->get('pk_latestposts_linktype') == '1' ? '_blank' : '';
         $strBoardURL = $this->config->get('pk_latestposts_url');
         if (substr($this->config->get('pk_latestposts_url'), -1) != "/") {
             $strBoardURL .= '/';
         }
         $myWrapper = in_array($this->config->get('pk_latestposts_linktype'), range(0, 1)) ? $strBoardURL : $this->root_path . 'wrapper.php' . $this->SID . '&id=lp&l=' . rawurlencode($strBoardURL);
         // Select the Database to use.. (same, bridged mode, other)
         if ($this->config->get('cmsbridge_active') == 1 && $this->config->get('pk_latestposts_dbmode') == 'bridge') {
             $mydb = $this->bridge->db;
             //change prefix
             if (strlen(trim($this->config->get('pk_latestposts_dbprefix')))) {
                 $mydb->set_prefix(trim($this->config->get('pk_latestposts_dbprefix')));
             }
         } elseif ($this->config->get('pk_latestposts_dbmode') == 'new') {
             $mydb = dbal::factory(array('dbtype' => 'mysql', 'die_gracefully' => true, 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config->get('pk_latestposts_dbprefix'))));
             $mydb->open($this->crypt->decrypt($this->config->get('pk_latestposts_dbhost')), $this->crypt->decrypt($this->config->get('pk_latestposts_dbname')), $this->crypt->decrypt($this->config->get('pk_latestposts_dbuser')), $this->crypt->decrypt($this->config->get('pk_latestposts_dbpassword')));
         } else {
             $mydb = dbal::factory(array('dbtype' => 'mysqli', 'die_gracefully' => true, 'debug_prefix' => 'latestposts_', 'table_prefix' => trim($this->config->get('pk_latestposts_dbprefix'))));
             $mydb->open($this->dbhost, $this->dbname, $this->dbuser, $this->dbpass);
         }
         if (!$mydb) {
             return $this->user->lang('pk_latestposts_connerror');
         }
         // Set some Variables we're using in the BB Modules..
         $topicnumber = $this->config->get('pk_latestposts_amount') ? $this->config->get('pk_latestposts_amount') : 5;
         $black_or_white = $this->config->get('pk_latestposts_blackwhitelist') == 'white' ? 'IN' : 'NOT IN';
         // include the BB Module File...
         $bbModule = $this->root_path . 'portal/latestposts/bb_modules/' . $this->config->get('pk_latestposts_bbmodule') . '.php';
         if (is_file($bbModule)) {
             include_once $bbModule;
             $classname = 'latestpostsmodule_' . $this->config->get('pk_latestposts_bbmodule');
             $module = new $classname();
             if (!$module || !method_exists($module, 'getBBQuery')) {
                 return $this->user->lang('portal_latestposts_invmodule');
             }
         } else {
             return $this->user->lang('portal_latestposts_nomodule');
         }
         // Create Array of allowed/disallowed forums
         $arrUserMemberships = $this->pdh->get('user_groups_users', 'memberships', array($this->user->id));
         array_push($arrUserMemberships, 0);
         $arrForums = array();
         $visibilityGrps = $this->pdh->get('portal', 'visibility', array($this->id));
         foreach ($arrUserMemberships as $groupid) {
             //only load forums for which actual settings are set
             if (!in_array($groupid, $visibilityGrps)) {
                 continue;
             }
             $strForums = $this->config->get('pk_latestposts_privateforums_' . $groupid);
             if (method_exists($module, 'getBBForumQuery')) {
                 //serialized IDs
                 $arrTmpForums = @unserialize($strForums);
                 if (is_array($arrTmpForums)) {
                     foreach ($arrTmpForums as $forumid) {
                         $arrForums[] = $forumid;
                     }
                 }
             } else {
                 //comma seperated IDs
                 $arrTmpForums = $this->config->get('pk_latestposts_privateforums') ? explode(",", $this->config->get('pk_latestposts_privateforums')) : '';
                 if (is_array($arrTmpForums)) {
                     foreach ($arrTmpForums as $forumid) {
                         if (trim($forumid) != '') {
                             $arrForums[] = trim($forumid);
                         }
                     }
                 }
             }
         }
         // if there are no forums selected and its whitelist
         if (count($arrForums) == 0 && $black_or_white == 'IN') {
             return $this->user->lang('portal_latestposts_noselectedboards');
         }
         $strQuery = $module->getBBQuery($arrForums, $black_or_white, $topicnumber);
         // Middle Output
         if ($this->position == 'middle' || $this->position == 'bottom') {
             $myOut = "<table cellpadding='3' cellspacing='2' width='100%' class='colorswitch'>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th width='50%'>" . $this->user->lang('pk_latestposts_title') . "</th>\n\t\t\t\t\t\t\t\t<th width='10%'>" . $this->user->lang('pk_latestposts_posts') . "</th>\n\t\t\t\t\t\t\t\t<th width='40%' colspan='2'>" . $this->user->lang('pk_latestposts_lastpost') . "</th>\n\t\t\t\t\t\t\t</tr>";
             if ($bb_result = $mydb->query($strQuery)) {
                 $sucess = true;
                 while ($row = $mydb->fetch_record($bb_result)) {
                     $member_link = in_array($this->config->get('pk_latestposts_linktype'), range(0, 1)) ? $myWrapper . $module->getBBLink('member', $row) : $myWrapper . rawurlencode($module->getBBLink('member', $row));
                     $topic_link = in_array($this->config->get('pk_latestposts_linktype'), range(0, 1)) ? $myWrapper . $module->getBBLink('topic', $row) : $myWrapper . rawurlencode($module->getBBLink('topic', $row));
                     $myOut .= "<tr valign='top'>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t\t<a href='" . htmlentities($topic_link) . "' target='" . $myTarget . "'>" . $row['bb_topic_title'] . "</a>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t<td align='center'>" . $row['bb_replies'] . "</td>\n\t\t\t\t\t\t\t\t\t<td>" . $this->time->user_date($row['bb_posttime'], true) . "</td>\n\t\t\t\t\t\t\t\t\t<td><a href='" . htmlentities($member_link) . "' target='" . $myTarget . "'>" . $row['bb_username'] . "</a> <a href='" . htmlentities($topic_link) . "' target='" . $myTarget . "'><img src='" . $this->root_path . "portal/latestposts/images/icon_topic_latest.png' alt='' /></a></td>\n\t\t\t\t\t\t\t\t</tr>";
                 }
             } else {
                 $myOut .= "<tr valign='top'>\n\t\t\t\t\t\t\t\t\t<td colspan='3'>" . $this->user->lang('pk_latestposts_noentries') . "</td>\n\t\t\t\t\t\t\t\t</tr>";
             }
             $myOut .= "</table>";
         } else {
             // Sidebar Output
             $myOut = "<table cellpadding='3' cellspacing='2' width='100%' class='colorswitch'>";
             if ($bb_result = $mydb->query($strQuery)) {
                 $sucess = true;
                 $myTitleLength = $this->config->get('pk_latestposts_trimtitle') ? $this->config->get('pk_latestposts_trimtitle') : 40;
                 while ($row = $mydb->fetch_record($bb_result)) {
                     if (strlen($row['bb_topic_title']) > $myTitleLength) {
                         $short_title = substr($row['bb_topic_title'], 0, $myTitleLength) . "...";
                     } else {
                         $short_title = $row['bb_topic_title'];
                     }
                     $member_link = in_array($this->config->get('pk_latestposts_linktype'), range(0, 1)) ? $myWrapper . $module->getBBLink('member', $row) : $myWrapper . rawurlencode($module->getBBLink('member', $row));
                     $topic_link = in_array($this->config->get('pk_latestposts_linktype'), range(0, 1)) ? $myWrapper . $module->getBBLink('topic', $row) : $myWrapper . rawurlencode($module->getBBLink('topic', $row));
                     $myOut .= "<tr valign='top'>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t<a href='" . $topic_link . "' target='" . $myTarget . "'>" . $short_title . "</a> (" . $row['bb_replies'] . ")<br/>\n\t\t\t\t\t\t\t\t\t\t" . date('d.m.y, H:i', $row['bb_posttime']) . ", <a href='" . $member_link . "' target='" . $myTarget . "'>" . $row['bb_username'] . "</a>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>";
                 }
             }
             $myOut .= "</table>";
             $sucess = true;
         }
         $mydb->free_result($bb_result);
         if ($this->config->get('pk_latestposts_dbmode') == 'new') {
             $mydb->close();
         }
         if ($this->config->get('pk_latestposts_dbmode') == 'bridge') {
             //reset prefix
             $mydb->reset_prefix();
         }
         if (isset($sucess)) {
             $this->pdc->put('portal.modul.latestposts.u' . $this->user->id . '.' . $this->root_path, $myOut, 300, false, true);
         }
     }
     return $myOut;
 }