db = $db; } /** * Get module data from database * * @param int $module_id Module ID * @return array Module data array */ public function get_module_data($module_id) { $sql = 'SELECT * FROM ' . PORTAL_MODULES_TABLE . ' WHERE module_id = ' . (int) $module_id; $result = $this->db->sql_query_limit($sql, 1); $module_data = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); return $module_data; } /** * Run database part for resetting a module * * @param \board3\portal\modules\module_interface $module Module to reset * @param int $module_id Module ID of module * * @return int Number of affected rows */ public function reset_module($module, $module_id) { $sql_ary = array( 'module_name' => $module->get_name(), 'module_image_src' => $module->get_image(), 'module_group_ids' => '', 'module_image_height' => 16, 'module_image_width' => 16, 'module_status' => self::B3_MODULE_ENABLED, ); $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . ' WHERE module_id = ' . (int) $module_id; $this->db->sql_query($sql); return $this->db->sql_affectedrows(); } /** * Move module vertically * * @param int $module_id Module ID * @param array $module_data Module data array * @param int $direction Direction to move, see constants in this class * @param int $step Moving step * * @return int Number of affected rows, 0 if unsuccessful */ public function move_module_vertical($module_id, $module_data, $direction, $step = 1) { if ($direction == self::MOVE_DIRECTION_DOWN) { $current_increment = ' + ' . $step; $other_increment = ' - ' . $step; } else { $current_increment = ' - ' . $step; $other_increment = ' + ' . $step; } $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET module_order = module_order' . $other_increment . ' WHERE module_order = ' . (int) ($module_data['module_order'] + ($direction * $step)) . ' AND module_column = ' . (int) $module_data['module_column']; $this->db->sql_query($sql); $updated = (bool) $this->db->sql_affectedrows(); if ($updated) { $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET module_order = module_order' . $current_increment . ' WHERE module_id = ' . (int) $module_id; $this->db->sql_query($sql); } return $updated; } /** * Move module horizontally * * @param int $module_id Module ID * @param array $module_data Module data array * @param int $move_action The move action */ public function move_module_horizontal($module_id, $module_data, $move_action) { $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET module_order = module_order + 1 WHERE module_order >= ' . $module_data['module_order'] . ' AND module_column = ' . ($module_data['module_column'] + $move_action); $this->db->sql_query($sql); $updated = $this->db->sql_affectedrows(); $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET module_column = ' . ($module_data['module_column'] + $move_action) . ' WHERE module_id = ' . (int) $module_id; $this->db->sql_query($sql); $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET module_order = module_order - 1 WHERE module_order >= ' . $module_data['module_order'] . ' AND module_column = ' . $module_data['module_column']; $this->db->sql_query($sql); // the module that needs to moved is in the last row if (!$updated) { $sql = 'SELECT MAX(module_order) as new_order FROM ' . PORTAL_MODULES_TABLE . ' WHERE module_order < ' . $module_data['module_order'] . ' AND module_column = ' . (int) ($module_data['module_column'] + $move_action); $this->db->sql_query($sql); $new_order = $this->db->sql_fetchfield('new_order') + 1; $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET module_order = ' . $new_order . ' WHERE module_id = ' . (int) $module_id; $this->db->sql_query($sql); } } }