diff --git a/TO-DO.md b/TO-DO.md index df87436..369e47f 100644 --- a/TO-DO.md +++ b/TO-DO.md @@ -10,6 +10,10 @@ Add more unit tests. Test and improve the template compilation system. Test and complete the multi-threading system. Use the main language and database classes in the installer instead of it having it's own. +Test and improve the asynchronous query system. +MAJOR PROJECT: Revamp the control panel. +Figure out what to do about super_join. +We might need to update the database interface. Bugs: Avatar updating is broken. diff --git a/hadron/threading.php b/hadron/threading.php index 2603a02..2bb0b37 100644 --- a/hadron/threading.php +++ b/hadron/threading.php @@ -35,4 +35,4 @@ protected function getResult() { return $this->data; } -} \ No newline at end of file +} diff --git a/inc/functions_alerts.php b/inc/functions_alerts.php new file mode 100644 index 0000000..71052a7 --- /dev/null +++ b/inc/functions_alerts.php @@ -0,0 +1,251 @@ +hook('alerts_parse_type_default', $item))!==null) return $res; + return false; + } +} + +function alerts_parse_topic(array $item) +{ + global $main, $lang, $plugins; + + switch($item['event']) + { + case "new_topic": + $user = getUser($item['actor'], true); + $puser = ""; + + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/thread.php?tid={$item['resourceID']}", + "langstring" => $lang->sub('alerts_topic_new', $puser) + ); + break; + + case "deleted_topic": + global $db; + $topic = $db->get("*","threads","tid='{$item['resourceID']}'",1); + if(!$topic) $topic = array("thread_name" => "Deleted Topic"); + return array("target" => null,"langstring" => $lang->sub('alerts_topic_deleted', $topic['thread_name'])); + break; + + case "reply_topic": + global $db; + $user = getUser($item['actor'], true); + $puser = ""; + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $topic = $db->get("*","threads","tid='{$post['tid']}'",1); + if(!$topic) return false; + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/thread.php?tid={$topic['tid']}&pid={$post['pid']}", + "langstring" => $lang->multi_sub('alerts_topic_reply', array($puser, $topic['thread_name'])) + ); + break; + + default: + if(($res = $plugins->hook('alerts_parse_topic_default', $item))!==null) return $res; + return false; + } +} + +function alerts_parse_post(array $item) +{ + global $main, $lang, $plugins; + switch($item['event']) + { + case "deleted_post": + $topic = $db->get("*","threads","tid='{$item['areaID']}'",1); + if(!$topic) $topic = array("thread_name" => "Deleted Topic"); + if($post['postedby']==$main->user['uid']) return array( + "target" => null, + "langstring" => $lang->sub('alerts_post_deleted_yours', $topic['thread_name']) + ); + else return array( + "target" => null, + "langstring" => $lang->sub('alerts_post_deleted', $topic['thread_name']) + ); + break; + + case "reply_post": + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $topic = $db->get("*","threads","tid='{$item['areaID']}'",1); + if(!$topic) return false; + $user = getUser($item['actor'], true); + $puser = ""; + + // Does the user have an avatar? + $avatar = getAvatar($user); + if($post['postedby']==$main->user['uid']) return array( + "avatar" => $avatar, + "target" => "//{$main->settings['site_url']}/thread.php?tid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_post_reply_yours', array($puser, $topic['thread_name'])) + ); + else return array( + "avatar" => $avatar, + "target" => "//{$main->settings['site_url']}/thread.php?tid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_post_reply', array($puser, $topic['thread_name'])) + ); + break; + + case "reply_topic": + global $db; + $user = getUser($item['actor'], true); + $puser = ""; + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $topic = $db->get("*","threads","tid='{$post['tid']}'",1); + if(!$topic) return false; + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/thread.php?tid={$topic['tid']}&pid={$post['pid']}", + "langstring" => $lang->multi_sub('alerts_topic_reply', array($puser, $topic['thread_name'])) + ); + break; + + case "upvote": + global $db; + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $topic = $db->get("*","threads","tid='{$post['tid']}'",1); + if(!$topic) return false; + $user = getUser($item['actor'], true); + $puser = ""; + if($post['postedby']==$main->user['uid']) return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/thread.php?tid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_post_upvote_yours', array($puser, $topic['thread_name'])) + ); + else + { + $user2 = getUser($post['postedby'], true); + $puser2 = ""; + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/thread.php?tid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_post_upvote', array($puser, $puser2, $topic['thread_name'])) + ); + } + break; + + case "post_mentioned": + global $db; + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $topic = $db->get("*","threads","tid='{$post['tid']}'",1); + if(!$topic) return false; + $user = getUser($item['actor'], true); + $puser = ""; + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/thread.php?tid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_post_mentioned', array($puser, $topic['thread_name'])) + ); + break; + + default: + if(($res = $plugins->hook('alerts_parse_post_default', $item))!==null) return $res; + return false; + } +} + +function alerts_parse_comment(array $item) +{ + global $lang, $db, $main, $plugins; + switch($item['event']) + { + case "new_comment": + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $user = getUser($item['actor'], true); + $puser = ""; + if($item['areaID']==$main->user['uid']) return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/profiles/?uid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->sub('alerts_comment_new_yours', $puser) + ); + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/profiles/?uid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->sub('alerts_comment_new', $puser) + ); + break; + + case "deleted_comment": + if(($res = $plugins->hook('alerts_parse_comment_deleted', $item))!==null) return $res; + return false; + break; + + case "reply_comment": + global $db; + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $user = getUser($item['actor'], true); + $puser = ""; + $user2 = getUser($post['postedby'], true); + $puser2 = ""; + if($item['areaID']==$main->user['uid']) return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/profiles/?uid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_comment_reply_yours', array($puser, $puser2)) + ); + + $user3 = getUser($post['areaID'], true); + $puser3 = ""; + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/profiles/?uid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_comment_reply', array($puser, $puser2, $puser3)) + ); + + break; + + case "upvote": + global $db; + $post = $db->get("*","posts","pid='{$item['resourceID']}'",1); + if(!$post) return false; + $user = getUser($item['actor'], true); + $puser = ""; + $user2 = getUser($post['postedby'], true); + $puser2 = ""; + if($item['areaID']==$main->user['uid']) return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/profiles/?uid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_comment_upvote_yours', array($puser, $puser2)) + ); + + $user3 = getUser($post['areaID'], true); + $puser3 = ""; + return array( + "avatar" => getAvatar($user), + "target" => "//{$main->settings['site_url']}/profiles/?uid={$item['areaID']}&pid={$item['resourceID']}", + "langstring" => $lang->multi_sub('alerts_comment_upvote', array($puser, $puser2, $puser3)) + ); + break; + + default: + if(($res = $plugins->hook('alerts_parse_comment_default', $item))!==null) return $res; + return false; + } +} \ No newline at end of file diff --git a/inc/functions_usercp.php b/inc/functions_usercp.php new file mode 100644 index 0000000..96574a7 --- /dev/null +++ b/inc/functions_usercp.php @@ -0,0 +1,66 @@ + array( + "name" => $lang->get('usercp_cat_home'), + "icon" => "//{$main->settings['site_url']}/images/home.png" + ), + "critical" => array( + "name" => $lang->get('usercp_cat_critical'), + "icon" => "//{$main->settings['site_url']}/images/settings.png" + ), + "avatar" => array( + "name" => $lang->get('usercp_cat_avatar'), + "icon" => "//{$main->settings['site_url']}/images/avatar.png" + ), + "signature" => array( + "name" => $lang->get('usercp_cat_signature'), + "icon" => "//{$main->settings['site_url']}/images/signature.png" + ), + "titles" => $lang->get('usercp_cat_titles'), + "friend-invites" => $lang->get('usercp_cat_friend_invites'), + "friends" => array( + "name" => $lang->get('usercp_cat_friends'), + "path" => "//{$main->settings['site_url']}/friends.php?action=view", + "icon" => "//{$main->settings['site_url']}/images/group.png" + ), + "profile" => $lang->get('usercp_cat_profile'), + "conversations" => array( + "name" => $lang->get('usercp_cat_conversations'), + "path" => "//{$main->settings['site_url']}/convos.php", + "icon" => "//{$main->settings['site_url']}/images/group.png" + ) + ); + + $clist = ""; + $tmpls->stick("clist", $clist); + + if(!$main->settings['enable_signatures']) unset($cats['signature']); + $plugins->hook("usercp_cats", $cats); + + foreach($cats as $key => $cat) + { + if(is_array($cat)) + { + if(isset($cat['path'])) $path = $cat['path']; + else $path = "./usercp.php?page={$key}"; + + $clist .= "