public function delete($leaf)
 {
     //TODO: use innodb so this actually matters
     list($file_id, $servers) = Dal::query_one("SELECT file_id, servers FROM local_files WHERE filename=? FOR UPDATE", array($leaf));
     try {
         if (!$file_id) {
             throw new PAException(FILE_NOT_FOUND, "Unable to find file {$leaf} in local_files table:");
         }
         $path = $this->getPath($leaf);
         $server_ids = explode(",", $servers);
         if (in_array(PA::$server_id, $server_ids)) {
             if (empty($path)) {
                 throw new PAException(FILE_NOT_FOUND, "Unable to delete nonexistent file {$path}");
             }
             if (!@unlink($path)) {
                 throw new PAException(STORAGE_ERROR, "Error deleting {$path}");
             }
             $server_ids = array_filter($server_ids, "not_this_server");
             $servers = implode(",", $server_ids);
         }
         Dal::query("UPDATE local_files SET is_deletion=1, timestamp=NOW(), servers=? WHERE file_id=?", array($file_id, $servers));
     } catch (PAException $e) {
         Dal::rollback();
         throw $e;
     }
     return TRUE;
 }
 function testOwnerIdMemberCount()
 {
     $networks = array();
     $sth = Dal::query("SELECT network_id, address, member_count, owner_id FROM networks WHERE is_active=1");
     while (list($net_id, $address, $member_count, $owner_id) = Dal::row($sth)) {
         $networks[$net_id] = array("address" => $address, "member_count" => $member_count, "owner_id" => $owner_id);
     }
     // count all members for all networks
     $sth = Dal::query("SELECT network_id, COUNT(user_id) FROM networks_users GROUP BY network_id");
     while (list($net_id, $member_count) = Dal::row($sth)) {
         $networks[$net_id]['calc_member_count'] = $member_count;
     }
     // find all owners
     $sth = Dal::query("SELECT network_id, user_id FROM networks_users where user_type='owner'");
     while (list($net_id, $owner_id) = Dal::row($sth)) {
         $networks[$net_id]['calc_owner_id'] = $owner_id;
     }
     // verify them all
     $ok = TRUE;
     foreach ($networks as $nid => $net) {
         $address = $net['address'];
         $mc = $net['member_count'];
         $cmc = $net['calc_member_count'];
         $oi = $net['owner_id'];
         $coi = (int) $net['calc_owner_id'];
         if ($cmc && ($mc != $cmc || $oi != $coi)) {
             echo "NetworkDataTest ERROR: Network {$nid} [{$address}]: member_count {$mc}, calc {$cmc} | owner_id {$oi}, found {$coi}\n";
             $ok = FALSE;
         }
     }
     $this->assertTrue($ok);
 }
Beispiel #3
0
 public static function save_tags_for_item($user_id, $subject_type, $subject_id, $tags_array)
 {
     // remove all existig tags of this user for this item
     Dal::query("DELETE FROM {itemtags} WHERE  user_id=? AND subject_type=? AND subject_id=?", array($user_id, $subject_type, $subject_id));
     // add the given ones
     foreach ($tags_array as $i => $tag_string) {
         Dal::query("INSERT INTO {itemtags} SET \n\t\t  user_id=?, subject_type=?, subject_id=?, \n\t\t  tag_string=?", array($user_id, $subject_type, $subject_id, $tag_string));
     }
 }
 /**
  * Loads the given setting for the given user id.
  *
  * @param integer $type The type of the entity for whom settings are to be loaded.
  * @param integer $assoc_id The id of the association entity for whom settings are to be added.
  * @return $value string This string contains the object of given settings.
  */
 static function load_setting($page_id, $assoc_id, $assoc_type = "network", $child_type = null, $only_configurable = false)
 {
     Logger::log("Enter: function ModuleSetting::load_setting");
     $settings = null;
     $sql = "SELECT page_id, settings FROM {page_settings} WHERE assoc_id=? AND page_id=? AND assoc_type =?";
     $data = array($assoc_id, $page_id, $assoc_type);
     $res = Dal::query($sql, $data);
     $dynamic_page = new DynamicPage($page_id);
     if (!is_object($dynamic_page) or !$dynamic_page->docLoaded) {
         throw new Exception("Page XML config file for page ID: {$page_id} - not found!");
     }
     $dynamic_page->initialize();
     $page_settings = $xml_settings = $dynamic_page->getPageSettings();
     if ($res->numRows() > 0) {
         $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
         $settings = unserialize($row->settings);
         foreach ($settings as $key => $value) {
             // merge DB and XML settings
             $page_settings[$key] = $value;
         }
         if (!is_null($child_type)) {
             if (false !== strpos($dynamic_page->page_type, $child_type)) {
                 $settings = $page_settings;
             } else {
                 $settings = null;
             }
         } else {
             $settings = $page_settings;
         }
     } else {
         if ($assoc_type == 'user' || $assoc_type == 'group') {
             // try to get default settings for current network
             $settings = self::load_setting($page_id, PA::$network_info->network_id, "network", $assoc_type, $only_configurable);
         } else {
             if ($only_configurable == false) {
                 $settings = $dynamic_page->getPageSettings();
             } else {
                 if ($only_configurable == true && $dynamic_page->is_configurable) {
                     if (!is_null($child_type)) {
                         if (false !== strpos($dynamic_page->page_type, $child_type)) {
                             $settings = $dynamic_page->getPageSettings();
                         } else {
                             $settings = null;
                         }
                     } else {
                         $settings = $dynamic_page->getPageSettings();
                     }
                 }
             }
         }
     }
     // Fix: always return navigation_code and boot_code from XML file
     $settings['navigation_code'] = $xml_settings['navigation_code'];
     $settings['boot_code'] = $xml_settings['boot_code'];
     Logger::log("Exit: function ModuleSetting::load_setting");
     return $settings;
 }
 static function get($module_name)
 {
     Logger::log("Enter: function ModuleData::get");
     $sql = "SELECT  data AS data FROM {moduledata}  WHERE modulename LIKE ? ";
     $data = array($module_name);
     $res = Dal::query($sql, $data);
     if ($res->numRows() > 0) {
         $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
         Logger::log("Exit: function ModuleData::get");
         return $row->data;
     }
 }
Beispiel #6
0
 public function get_tasks()
 {
     Logger::log("Enter: function Tasks::get_tasks");
     //get tasks from db but its ok to define it in array for now
     // this should go in Cache
     $tasks = array();
     $res = Dal::query('SELECT * FROM {tasks} ');
     while ($r = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
         $tasks[] = $r;
     }
     Logger::log("Exit: function Tasks::get_tasks");
     return $tasks;
 }
Beispiel #7
0
 public static function get_recent_by_user($uid, $cnt = 5)
 {
     $sql = 'SELECT * FROM {rating} WHERE user_id=? 
 ORDER BY index_id
 LIMIT ?';
     $data = array($uid, $cnt);
     $res = Dal::query($sql, $data);
     $return = array();
     if ($res->numRows()) {
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             array_push($return, $row);
         }
     }
     return $return;
 }
 public function update()
 {
     Logger::log("Enter: function ConfigurableText::update");
     $sql = "SELECT * FROM {configurable_text} WHERE caption = ? AND id <> ?";
     $data = array('caption' => $this->caption, 'id' => $this->id);
     $res = Dal::query($sql, $data);
     if ($res->numRows() == 0) {
         $sql = "UPDATE {configurable_text} SET caption = ?, caption_value = ? WHERE id = ?";
         $data = array('caption' => $this->caption, 'caption_value' => $this->caption_value, 'id' => $this->id);
         $res = Dal::query($sql, $data);
     } else {
         // Caption already exists
         Logger::log("Throwing exception CAPTION_NAME_EXISTS | Caption with the given name already exists", LOGGER_ERROR);
         throw new PAException(CAPTION_NAME_EXISTS, "Caption with the given name already exists");
     }
     Logger::log("Enter: function ConfigurableText::update");
     return;
 }
 public static function get($conditions = NULL, $params = NULL)
 {
     Logger::log("Enter: CNRatingData::get()");
     $sql = 'SELECT * FROM {rating} WHERE 1';
     $data = array();
     if (!empty($params)) {
         foreach ($params as $key => $value) {
             $sql .= ' AND ' . $key . ' = ?';
             array_push($data, $value);
         }
     }
     $res = Dal::query($sql, $data);
     $return = array();
     if ($res->numRows()) {
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             array_push($return, $row);
         }
     }
     Logger::log("Exit: CNRatingData::get()");
     return $return;
 }
Beispiel #10
0
 public function update($params)
 {
     $updates = array();
     $args = array();
     foreach ($params as $k => $v) {
         $col = @Item::$columns[$k];
         if (empty($col)) {
             throw new Exception("Unknown item table column '{$k}'");
         }
         if ($this->{$col} != $v) {
             $updates[] = "{$col}=?";
             $args[] = $v;
         }
     }
     if (count($updates)) {
         $args[] = $this->item_id;
         Dal::query("UPDATE {items} SET " . implode(",", $updates) . " WHERE item_id=?", $args);
         Cache::setValue("item:" . $params['type'] . ":" . $params['id'], $this);
         // update cache
     }
 }
Beispiel #11
0
 public static function get_valid_networks()
 {
     $sth = Dal::query("SHOW TABLES");
     $tables = array();
     while ($r = Dal::row($sth)) {
         $tables[$r[0]] = 1;
     }
     $sth = Dal::query("SELECT address FROM networks WHERE is_active=1");
     $networks = array();
     while ($r = Dal::row($sth)) {
         $address = $r[0];
         if ($address == 'default' || isset($tables[$address . "_comments"])) {
             // comments table available - assume network has been initialised
             $networks[] = $address;
         }
     }
     // if we haven't run net_extra yet, the default network won't have an entry, so we add it in manually now.
     if (!in_array("default", $networks)) {
         $networks[] = "default";
     }
     return $networks;
 }
 /**
  * Function to process the user feed.
  * This function will check for the feed url added by the user in 
  * user_profile in external feeds. If it exists then it will return the associated 
  * feed_id otherwise it will add 
  */
 private function import_user_feed()
 {
     Logger::log("Enter: UserProfileFeed::import_user_feed");
     $sql = 'SELECT feed_id FROM {external_feed} WHERE import_url = ? AND is_active = ?';
     try {
         $res = Dal::query($sql, array($this->import_url, ACTIVE));
     } catch (PAException $e) {
         Logger::log("Exit UserProfileFeed::import_user_feed.Not able to get feed details for given import_url. Associated sql = {$sql}, import_url = {$this->import_url}");
         throw $e;
     }
     if ($res->numRows()) {
         //given import url exists already in the external feed list
         $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
         //TODO: refresh the feed data
         $this->feed_id = $row->feed_id;
     } else {
         // Given feed does not exists in the external feeds. So add it first and then return the associated feed_id.
         //setting the feed_type to user_profile feed
         $this->feed_type = USER_PROFILE_FEED;
         $this->save();
     }
     Logger::log("Exit: UserProfileFeed::import_user_feed");
     return $this->feed_id;
 }
Beispiel #13
0
 /**
     For loading group information in the basis of group_id
     Requirement :- take a group id
     Return :- all the information of group as well as group_owner name, ID and number of members in the group
 */
 public static function load_group($group_id = FALSE, $cnt = FALSE, $show = 'ALL', $page = 1, $sort_by = 'created', $direction = 'DESC', $speacial_condition = FALSE)
 {
     Logger::log("Enter: Group::load_group() ");
     if ($sort_by == 'members') {
         $order_by = 'members' . ' ' . $direction;
     } else {
         $order_by = ' CC.' . $sort_by . ' ' . $direction;
     }
     if ($show == 'ALL' || $cnt == TRUE) {
         $limit = '';
     } else {
         $start = ($page - 1) * $show;
         $limit = 'LIMIT ' . $start . ',' . $show;
     }
     if ($group_id) {
         $sql = "SELECT count(GU.user_id) AS members,CC.collection_id AS group_id,CC.title AS group_name,CC.*,U.first_name AS owner_first_name,U.login_name AS owner_login_name,U.user_id  AS owner_id FROM {contentcollections} AS CC INNER JOIN {groups_users} AS GU on GU.group_id = CC.collection_id AND CC.is_active =1 LEFT JOIN {users} AS U on CC.author_id = U.user_id WHERE CC.collection_id = ? {$speacial_condition} GROUP BY CC.collection_id ORDER BY {$order_by} {$limit}";
         $res = Dal::query($sql, $group_id);
         if ($cnt) {
             return $res->numRows();
         }
         if ($res->numRows()) {
             while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
                 $group_description = $row;
             }
         }
         Logger::log("Exit: Group::load_group() ");
         return $group_description;
     }
 }
 /**
  *   Method to load a links or links.
  *   @param $condition_array associative array of the class variables with their values.
  *   @access public
  */
 public function network_owner_link($condition = NULL, $limit = NULL)
 {
     Logger::log("Enter: function Links::network_owner_link");
     $sql = "SELECT L.* FROM {links} AS L INNER JOIN {linkcategories} AS LC ON L.category_id = LC.category_id";
     if (count($condition) > 0) {
         foreach ($condition as $key => $value) {
             $sql .= " AND L.{$key} = ?";
             $data[] = $value;
         }
     }
     $sql .= " ORDER BY L.created";
     if (!empty($limit)) {
         $sql .= " LIMIT {$limit}";
     }
     $res = Dal::query($sql, $data);
     $return = array();
     if ($res->numRows() > 0) {
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             $return[] = $row;
         }
     }
     Logger::log("Exit: function Links::load_link");
     return $return;
 }
 public static function content_type_exists()
 {
     $sql = "SELECT type_id FROM {content_types} WHERE name LIKE ?";
     $res = Dal::query($sql, array(self::TYPE_NAME));
     if ($res->numRows()) {
         return true;
     }
     return false;
 }
 /**
  * @todo Implement testAssign_role_to_user().
  */
 public function testAssign_role_to_user()
 {
     $role_id = 1;
     $user_id = 1;
     Roles::assign_role_to_user($role_id, $user_id);
     $res = Dal::query('SELECT count(*) AS CNT FROM {users_adminroles} where user_id = 1 and role_id=1');
     $r = $res->fetchRow(DB_FETCHMODE_OBJECT);
     $this->assertEquals(1, $r->CNT);
 }
    echo "Page {$page} of {$pages}; current mem use {$start_mem}...";
    $cmt_rows = Comment::get_all_comments(0, $per_page, $page);
    echo " after comments loaded, mem usage is " . memory_get_usage() . "\n";
    $del_ct = 0;
    foreach ($cmt_rows as $cmt_row) {
        $cmt = new Comment();
        $cmt->load_from_row($cmt_row);
        $del_ct += $cmt->index_spam_domains(TRUE);
        $cmt->index_words();
    }
    echo "{$del_ct} comments deleted due to blacklisting or excessive linking\n";
    unset($cmt_rows);
    unset($cmt_row);
    $end_mem = memory_get_usage();
    //  echo "end of page - mem used $end_mem (delta ".($end_mem - $start_mem).").\n";
    echo "Counting up totals\n";
    SpamDomain::recalculate_total_link_counts();
}
echo "Analyzed {$total} comments\n";
echo "Worst domains:\n";
$sth = Dal::query("SELECT id,domain,count,active_count FROM spam_domains ORDER BY count DESC LIMIT 25");
while ($r = Dal::row($sth)) {
    list($domain_id, $domain, $count, $active_count) = $r;
    echo "{$count}: {$domain} (id={$domain_id}); {$active_count} not deleted\n";
}
echo "Worst domains with still-active comments:\n";
$sth = Dal::query("SELECT id,domain,count,active_count FROM spam_domains WHERE active_count <> 0 ORDER BY count DESC LIMIT 25");
while ($r = Dal::row($sth)) {
    list($domain_id, $domain, $count, $active_count) = $r;
    echo "{$count}: {$domain} (id={$domain_id}); {$active_count} not deleted\n";
}
 private function getUserStatus()
 {
     // MySQL query
     $sql = "SELECT user_status+0 AS status FROM { pa_forums_users } WHERE user_id = ? AND board_id = ?;";
     $res = null;
     // record ID
     $params = array($this->user_id, $this->board_id);
     // execute query
     $res = Dal::query($sql, $params);
     if ($res->numRows() > 0) {
         $_objarr = $res->fetchRow(DB_FETCHMODE_OBJECT);
         $res = $_objarr->status;
     }
     return $res;
 }
 public function load($assoc_id)
 {
     Logger::log("Enter: EventAssociation::load");
     $sql = "SELECT * FROM {events_associations} WHERE assoc_id = ? LIMIT 1";
     $data = array($assoc_id);
     $res = Dal::query($sql, $data);
     if (!$res->numRows()) {
         Logger::log(" Throwing exception EVENT_NOT_EXIST | Message: EventAssociation with assoc_id({$assoc_id}) does not exist.", LOGGER_ERROR);
         throw new PAException(EVENT_NOT_EXIST, "EventAssociation with assoc_id({$assoc_id}) does not exist.");
     }
     if ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
         $this->assoc_id = $row->assoc_id;
         $this->event_id = $row->event_id;
         $this->user_id = $row->user_id;
         $this->assoc_target_type = $row->assoc_target_type;
         $this->assoc_target_id = $row->assoc_target_id;
         $this->assoc_target_name = $row->assoc_target_name;
         $this->event_title = $row->event_title;
         $this->start_time = $row->start_time;
         $this->end_time = $row->end_time;
         $this->assoc_data = unserialize($row->assoc_data);
     }
     Logger::log("Exit: EventAssociation::load");
 }
 /**
  * Get top ranked users
  *
  */
 public static function get_top_ranked_users($count = FALSE, $params = array())
 {
     Logger::log("Enter: Ranking::get_top_ranked_users() with count=" . $count);
     $qw = ' WHERE u.is_active = 1';
     if (isset($params["in"])) {
         $qw .= ' AND u.user_id IN (' . $params["in"] . ')';
     } elseif (isset($params["not_in"])) {
         $qw .= ' AND u.user_id NOT IN (' . $params["not_in"] . ')';
     }
     $qo = ' ORDER BY';
     if (isset($params["order_by"]) && $params["order_by"] == 2) {
         $qo .= ' u.created DESC';
     } elseif (isset($params["order_by"]) && $params["order_by"] == 3) {
         $qo .= ' CAST(upd.field_value AS UNSIGNED) ASC';
     } else {
         $qo .= ' CAST(upd.field_value AS UNSIGNED) DESC';
     }
     if (!empty($params["page"]) && !empty($params["show"])) {
         $start = ($params["page"] - 1) * $params["show"];
         $limit = ' LIMIT ' . $start . ', ' . $params["show"];
     } else {
         $limit = "";
     }
     $sql = "SELECT u.user_id, u.login_name, u.picture, u.email, upd.field_value FROM {users} u LEFT JOIN {user_profile_data} upd ON u.user_id = upd.user_id AND upd.field_name = 'site_points' " . $qw . " " . $qo . " " . $limit;
     $users = array();
     $result = Dal::query($sql);
     if ($count == TRUE) {
         return $result->numRows();
     }
     while ($user = $result->fetchRow(DB_FETCHMODE_OBJECT)) {
         $users[$user->user_id]["user_id"] = $user->user_id;
         $users[$user->user_id]["site_points"] = $user->field_value;
         $users[$user->user_id]["login_name"] = $user->login_name;
         $users[$user->user_id]["picture"] = $user->picture;
         $users[$user->user_id]["email"] = $user->email;
     }
     Logger::log("Exit: Ranking::get_top_ranked_users()");
     return $users;
 }
Beispiel #21
0
 /**
  * Delete the persona and its properties.
  *
  */
 public static function delete($persona_id)
 {
     Logger::log("Enter: function Persona::delete");
     $params = array($persona_id);
     $sql = 'DELETE FROM {personas} WHERE persona_id = ?';
     Dal::query($sql, $params);
     $sql = 'DELETE FROM {persona_properties} WHERE persona_id = ?';
     Dal::query($sql, $params);
     Logger::log("Exit: function Persona::delete");
 }
Beispiel #22
0
 public function toggle_active($is_active)
 {
     $res = Dal::query("UPDATE {users} SET is_active = ? WHERE user_id = ?", array($is_active, $this->user_id));
 }
 /**
  * Count records based on a given params - dynamic method: count_PaForum()
  *
  *
  * Generated with the DalClassGenerator created by:
  * Zoran Hron <*****@*****.**>
  *
  * @param conditionalStatement = null
  * @param selectFields = array()
  * @param groupByFields = array()
  * @result int or array of counted objects
  **/
 public function count_PaForum($conditionalStatement = null, $selectFields = array(), $groupByFields = array())
 {
     // build MySQL query
     $sql = "SELECT ";
     if (count($selectFields) > 0) {
         $sql .= implode(", ", $selectFields) . ", COUNT(*) AS counter ";
     } else {
         $sql .= "COUNT(*) AS counter ";
     }
     $sql .= "FROM { pa_forum } ";
     if ($conditionalStatement) {
         $sql .= "WHERE {$conditionalStatement} ";
     }
     if (count($groupByFields) > 0) {
         $sql .= "GROUP BY " . implode(", ", $groupByFields);
     }
     $sql .= ";";
     // execute query
     $res = Dal::query($sql);
     $objects = array();
     // data found?
     if ($res->numRows() > 1) {
         // retrieve data objects
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             $objects[] = $row;
         }
         return $objects;
     } else {
         if ($res->numRows() == 1) {
             $data = $res->fetchRow(DB_FETCHMODE_OBJECT);
             return $data->counter;
         } else {
             return 0;
         }
     }
 }
 /**
  * disapprove content/user in moderated queue
  * @access public
  * @param int id of user/content
  * @param string type ie user/content
  */
 public static function disapprove_suggestion($suggestion_id)
 {
     Logger::log("Enter : Network::disapprove_suggestion() | Args: \$suggestion_id = {$suggestion_id}");
     // nab the author ID for the suggestion
     $sql = 'SELECT author_id FROM {contents} WHERE content_id = ?';
     $data = array($suggestion_id);
     $res = Dal::query($sql, $data);
     if ($res->numRows()) {
         $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
         $author_id = intval($row['author_id']);
     }
     // and email them
     $suggestion_user = new User();
     $suggestion_user->load($author_id);
     $check = PAMail::send('suggestion_received', $suggestion_user, PA::$login_user, array());
     if ($check == FALSE) {
         Logger::log("Throwing exception MAIL_FUNCTION_FAILED | Mail was not sent to suggester ", LOGGER_ERROR);
         throw new PAException(MAIL_FUNCTION_FAILED, "Mail was not sent to suggester");
     }
     ModerationQueue::disapprove_suggestion($suggestion_id);
     Logger::log("Exit : Network::disapprove_suggestion()");
     return;
 }
 public static function flushExtCache($user_id, $key)
 {
     Dal::query("DELETE FROM ext_cache WHERE user_id=? AND cache_key=?", array($user_id, $key));
 }
 /**
  * Delete the persona service path.
  *
  */
 public static function delete($persona_service_path_id)
 {
     Logger::log("Enter: function PersonaServicePath::delete");
     $params = array($persona_service_path_id);
     $sql = 'DROP FROM {persona_service_paths} WHERE persona_service_path_id = ?';
     Dal::query($sql, $params);
     Logger::log("Exit: function PersonaServicePath::delete");
 }
 /**
  * Generic function to get the data from feed_data table
  * @param array of parameters as key value pairs eg. array('feed_id'=>1, ''is_active'=>1)
  * @return data object
  */
 public function get_feed_data($params)
 {
     Logger::log("Enter: ExternalFeed::get_feed_data");
     $sql = 'SELECT * FROM {feed_data}';
     $data = array();
     if (count($params)) {
         $sql .= ' WHERE 1';
         foreach ($params as $key => $value) {
             $sql .= ' AND ' . $key . ' = ?';
             $data[] = $value;
         }
     }
     $sql .= ' ORDER BY publish_date DESC';
     //code for refreshing the feed data if params have feed_id
     if (!empty($params['feed_id'])) {
         $this->feed_id = $params['feed_id'];
         $this->refresh_feed_data();
     }
     try {
         $res = Dal::query($sql, $data);
     } catch (CNException $e) {
         Logger::log("Exit: ExternalFeed::get_feed_data. Query failed, associated sql = {$sql}");
         throw $e;
     }
     $feed_data_obj = array();
     if ($res->numRows()) {
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             $feed_data_obj[] = $row;
         }
     }
     Logger::log("Enter: ExternalFeed::get_feed_data");
     return $feed_data_obj;
 }
 public function delete()
 {
     Dal::query("UPDATE {blog_badges} SET is_active=0 WHERE user_id=? AND badge_id=?", array($this->user_id, $this->badge_id));
 }
function exception_handler($exception)
{
    // clean out any buffering so we can write straight to the client
    // while (ob_end_clean());
    try {
        while ($exception->getCode() == 100 && strpos($exception->getMessage(), "no such table") != -1) {
            // See if the database hasn't been populated.
            // (Note: we use 'while' here rather than 'if' so we can use break
            // to avoid this turning into a mess of nested blocks).
            // First, make sure we have a working database connection.
            try {
                $sth = Dal::query("SHOW TABLES");
            } catch (CNException $e) {
                // The database connection isn't working - so fall through to
                // the normal error handler.
                break;
            }
            // Now run through the results and see if we can find a familiar
            // table.
            $found = 0;
            while ($r = $sth->fetchRow()) {
                if ($r[0] == "page_settings") {
                    $found = 1;
                    break;
                }
            }
            if ($found) {
                // ok, the db *has* been populated - fall through
                break;
            }
            // If we get this far, it means that the DB isn't populated, so we
            // show a message to the user (who is presumably an admin,
            // installing the system).
            // global var $path_prefix has been removed - please, use PA::$path static variable
            ?>

            <h1>Database not populated</h1>

            <p>Before you can run Cyberspace-Networks, you need to populate the database by running the script <code><?php 
            echo PA::$path;
            ?>
/api/DB/CNDB.mysql</code> on your database.  You can do it in the MySQL console like this:</p>

            <pre><i>user</i>@<i>server</i>:<?php 
            echo PA::$path;
            ?>
$ <b>mysql -u <i>username</i> -p</b>
                  Enter password: <b><i>password</i></b>

                  Welcome to the MySQL monitor.  Commands end with ; or \g.
                  Your MySQL connection id is 63048 to server version: 4.1.14-Debian_6-log

                  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

                  mysql> <b>use paalpha</b>
                  Database changed
                  mysql> <b>source <?php 
            echo PA::$path;
            ?>
/api/DB/CNDB.mysql</b></pre>

            <?php 
            exit;
        }
        // render an error message
        $code_esc = intval($exception->getCode());
        $msg_esc = htmlspecialchars($exception->getMessage());
        $traceback = $exception->getTraceAsString();
        //$template_file = getShadowedPath(PA::$theme_path . '/cnexception.php');
        $template_file = getShadowedPath('web/Themes/Default/cnexception.php');
        $template = new Template($template_file);
        $template->set('code_esc', $code_esc);
        $template->set('msg_esc', $msg_esc);
        $template->set('traceback', $traceback);
        echo $template->fetch();
        /*
         $page = new PageRenderer(NULL, NULL, "Error $code_esc: $msg_esc", "container_one_column.php");
         $msg_tpl = new Template(CURRENT_THEME_FSPATH."/error_middle.tpl");
         $msg_tpl->set('code', $code_esc);
         $msg_tpl->set('msg', $msg_esc);
         $page->add_module("middle", "top", $msg_tpl->fetch());
        
         $css_path = PA::$theme_url . '/layout.css';
         $page->add_header_css($css_path);
         $css_path = PA::$theme_url . '/network_skin.css';
         $page->add_header_css($css_path);
         $page->header->set('navigation_links', null);//setting the links to null
         echo $page->render();
        */
        // write a copy into the log
        Logger::log("An exception occurred: code " . $exception->getCode() . ", message " . $exception->getMessage() . "\nLast error: " . var_export(error_get_last(), TRUE) . "\n" . $exception->getTraceAsString(), LOGGER_ERROR);
    } catch (Exception $e) {
        // If an error occurred in PageRenderer or something, present a much plainer screen with both errors:
        echo "<h1>Lots of errors occurred!</h1>\n<p>An error occurred, then the error handler crashed while trying to handle the error.  Whoops!</p>\n<p><b>Here are the details of the original error:</b></p>\n<p>" . $exception->getMessage() . "</p>\n<pre>" . $exception->getTraceAsString() . "</pre>\n<p><b>Here are the details of the second error:</b></p>\n<p>" . $e->getMessage() . "</p>\n<pre>" . $e->getTraceAsString() . "</pre>";
    }
    exit;
}
 /**
  * Builds a category tree for all cateogories
  * @access public static
  * return array of all categories
  */
 public static function build_all_category_list($position = '', $spacing = '', $category_tree_array = '', $type = 'Default', $exclude = 1)
 {
     if (!is_array($category_tree_array)) {
         $category_tree_array = array();
     }
     if (sizeof($category_tree_array) < 1 && $exclude != 0) {
         $category_tree_array[] = array('category_id' => '0', 'name' => 'Select Category');
     }
     $sql = "SELECT * FROM {categories} WHERE position RLIKE  '^" . $position . "[0-9]+>\$' AND type = ?";
     $res = Dal::query($sql, array($type));
     if ($res->numRows() > 0) {
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             $category_tree_array[] = array('category_id' => $row->category_id, 'name' => $spacing . $row->name);
             $category_tree_array = Category::build_all_category_list($row->position, $spacing . '&nbsp;&nbsp;&nbsp;', $category_tree_array, $type);
         }
     }
     return $category_tree_array;
 }