/// <summery> /// get all notification which this user has received. /// /// <typeparam name=""></typeparam> mixed userID /// <typeparam name=""></typeparam> mixed limit /// <returns></returns> array /// </summery> function getReceivedMessages(userID, type = null, isNew = 1, limit = 5) { global db; whereCond = ""; if (type == null) { whereCond = sprintf(" WHERE act.userID=%d AND act.isNew=%d AND act.objectType=" % s " ORDER BY act.createdDate DESC ", userID, isNew, this.objectType); } else { whereCond = sprintf(" WHERE act.userID=%d AND act.isNew=%d AND act.activityType=" % s " AND act.objectType=" % s " ORDER BY act.createdDate DESC ", userID, isNew, type, this.objectType); } if (is_numeric(limit) && limit > 0) { whereCond += " LIMIT " + limit; } query = sprintf(" SELECT act.objectID AS senderID, act.activityType, act.createdDate, act.actionID, feedback.comment, user.firstName, user.lastName FROM %s AS act LEFT JOIN %s AS feedback ON feedback.feedbackID = act.actionID AND act.activityType=" % s " LEFT JOIN %s AS USER ON USER.userID = act.objectID %s ", TABLE_MAIN_ACTIVITIES, TABLE_FEEDBACK, TradeNotification.ACTION_TYPE_FEEDBACK, TABLE_USERS, whereCond); messageList = db.getResultsArray(query); newMessageList = [];
/// <summery> /// Create Wallet Address /// /// <typeparam name=""></typeparam> Int userID /// <returns></returns> array|bool /// </summery> public static function createWallet(userID, userEmail) { global db; password = generate_random_string(10); ch = curl_init(); curl_setopt(ch, CURLOPT_URL, "https://blockchain.info/api/v2/create_wallet?api_code=" + BLOCKCHAIN_INFO_API_KEY + "&password="******"There was an error to create bitcoin account: " + return , "error"); return(false); } data = ["userID" => userID, "bitcoin_guid" => returnData.guid, "bitcoin_address" => returnData.address, "bitcoin_link" => returnData.link, "bitcoin_password" => encrypt(password)];
/// <summery> /// Add pages /// /// <typeparam name=""></typeparam> Array data /// <returns></returns> int /// </summery> public function addPage(userID, data){ global db; if(!is_numeric(userID) || data["pageName"] == "") return; // failed //Create Links links = [];
/// <summery> /// Remove User Token /// /// <typeparam name=""></typeparam> Int userID /// <typeparam name=""></typeparam> String tokenType = password, ... /// </summery> public static function removeUserToken(userID, tokenType) { global db; query = db.prepare("DELETE FROM " + TABLE_USERS_TOKEN + " WHERE userID=%s AND tokenType=%s", userID, tokenType); db.query(query); return; }
/// <summery> /// <typeparam name=""></typeparam> userID /// <typeparam name=""></typeparam> tokenType /// <typeparam name=""></typeparam> null token /// <returns></returns> null|string /// </summery> public static function createNewToken(userID, tokenType, token = null) { global db; info = User.getUserData(userID); if (!token) { token = md5(mt_rand(0, 99999) + time() + mt_rand(0, 99999) + info["email"] + mt_rand(0, 99999)); } newID = db.insertFromArray(TABLE_USERS_TOKEN, ["userID" => userID, "userToken" => token, "tokenDate" => time(), "tokenType" => tokenType]);
/// <summery> /// <typeparam name="userID"></typeparam> /// <typeparam name="limit">int</typeparam> /// <returns>Indexed</returns> /// </summery> public static function getActivities(userID, limit = 15){ global db; query = db.prepare("SELECT a.*,p.*, pc.content as comment_content FROM " + TABLE_MAIN_ACTIVITIES + " AS a "+ "INNER JOIN " + TABLE_FRIENDS + " as f ON a.userID=f.userFriendID AND f.userID=%d AND f.status=1 "+ "LEFT JOIN " + TABLE_POSTS + " as p ON a.objectID=p.postID "+ "LEFT JOIN " + TABLE_POSTS_COMMENTS + " as pc ON a.activityType="comment" AND pc.commentID=a.actionID "+ "WHERE a.userID != %d AND p.poster != %d ORDER BY a.createdDate desc LIMIT %d", userID, userID, userID, limit); rows = db.getResultsArray(query); return rows; }
/// <summery> /// Save User Basic Information /// /// <typeparam name=""></typeparam> Int userID /// <typeparam name=""></typeparam> Array data /// <returns></returns> bool|null /// </summery> public static function saveUserBasicInfo(userID, data) { global db; if (data["birthdate_month"] == "" || data["birthdate_year"] == "" || data["birthdate_day"] == "") { birthdate = "0000-00-00"; } else { birthdate = date("Y-m-d", strtotime(data["birthdate_year"] + "-" + data["birthdate_month"] + "-" + data["birthdate_day"])); } rs = db.updateFromArray(TABLE_USERS, ["firstName" => trim(data["firstName"]), "lastName" => trim(data["lastName"]), "gender" => data["gender"], "gender_visibility" => data["gender_visibility"], "birthdate" => birthdate, "birthdate_visibility" => data["birthdate_visibility"], "relationship_status" => data["relationship_status"], "relationship_status_visibility" => data["relationship_status_visibility"], "religion" => data["religion"], "religion_visibility" => data["religion_visibility"], "political_views" => data["political_views"], "political_views_visibility" => data["political_views_visibility"], "birthplace" => data["birthplace"], "birthplace_visibility" => data["birthplace_visibility"], "current_city" => data["current_city"], "current_city_visibility" => data["current_city_visibility"], "timezone" => data["timezone"], "timezone_visibility" => 0 //data["timezone_visibility"]
const STATUS_SOLD = 2; // Has been sold /// <summery> /// Check if the user has credits or BTC to list the product /// /// <typeparam name=""></typeparam> mixed userID /// <typeparam name=""></typeparam> mixed paymentType /// <returns></returns> boolean /// </summery> public function hasMoneyToListProduct(userID, paymentType = ShopProduct.LIST_FEE_PAYMENT_TYPE_BTC) { if (paymentType == ShopProduct.LIST_FEE_PAYMENT_TYPE_CREDIT) { tradeUserIns = new TradeUser(); return(tradeUserIns.hasCredits(userID, SHOP_PRODUCT_LISTING_FEE_IN_CREDIT)); } else if (paymentType == ShopProduct.LIST_FEE_PAYMENT_TYPE_BTC) { balance = Bitcoin.getUserWalletBalance(userID); return(balance >= SHOP_PRODUCT_LISTING_FEE_IN_BTC); } else { return(false); } }
/// <summery> /// get Number of new notification /// /// <typeparam name=""></typeparam> mixed userID /// <typeparam name=""></typeparam> string type /// <returns></returns> one /// </summery> function getNumOfNewMessages(userID, type = null, isNew = 1) { global db; if (type == null) { query = db.prepare("SELECT count(*) FROM " + TABLE_MAIN_ACTIVITIES + " WHERE userID=%d AND isNew=%d AND objectType=%s", userID, isNew, this.objectType); } else { query = db.prepare("SELECT count(*) FROM " + TABLE_MAIN_ACTIVITIES + " WHERE userID=%d AND isNew=%d AND activityType=%s AND objectType=%s", userID, isNew, type, this.objectType); } num = db.getVar(query); return(num); }
/// <summery> /// Check if you have money or credits /// /// <typeparam name=""></typeparam> mixed userID /// <typeparam name=""></typeparam> mixed paymentType /// <returns></returns> bool /// </summery> public function hasMoneyToListTradeItem(userID, paymentType = TradeItem.LIST_FEE_PAYMENT_TYPE_BTC) { if (paymentType == TradeItem.LIST_FEE_PAYMENT_TYPE_CREDIT) { tradeUserIns = new TradeUser(); return(tradeUserIns.hasCredits(userID, TRADE_ITEM_LISTING_FEE_IN_CREDIT)); } else if (paymentType == TradeItem.LIST_FEE_PAYMENT_TYPE_BTC) { balance = Bitcoin.getUserWalletBalance(userID); return(balance >= TRADE_ITEM_LISTING_FEE_IN_BTC); } else { return(false); } }
public static function addForumActivity(userID, objectID, objectType, activityType, actionID = 0) { global db; activityID = db.insertFromArray(TABLE_FORUM_ACTIVITIES, array( "userID" => userID, "objectID" => objectID, "objectType" => objectType, "activityType" => activityType, "createdDate" => date("Y-m-d H:i:s"), "isNew" => 1, "activityStatus" => 1, "actionID" => actionID )); return activityID; }
/// <summery> /// It will create Notification on Activities table /// /// <typeparam name=""></typeparam> integer userID /// <typeparam name=""></typeparam> integer senderID (the man who creates this alert) /// <typeparam name=""></typeparam> string actionType : one of action types (const defined for this class) /// <typeparam name=""></typeparam> integer actionID : related trade offer, feedback ID /// </summery> function createNotification(userID, senderID, actionType, actionID) { //Check if this user will get this notification. (it will be set by Notification setting page) tradeUserIns = new TradeUser(); userData = tradeUserIns.getUserByID(userID); flagEnabled = 0; // user checked that he didn"t want to have this notification switch (actionType) { case Activity.ACTION_TYPE_OFFER_ACCEPTED: notificationType = Activity.NOTIFICATION_TYPE_OFFER_ACCEPTED; flagEnabled = userData["optOfferAccepted"]; break; case Activity.ACTION_TYPE_OFFER_RECEIVED: notificationType = Activity.NOTIFICATION_TYPE_OFFER_RECEIVED; flagEnabled = userData["optOfferReceived"]; break; case Activity.ACTION_TYPE_OFFER_DECLINED: notificationType = Activity.NOTIFICATION_TYPE_OFFER_DECLINED; flagEnabled = userData["optOfferDeclined"]; break; case Activity.ACTION_TYPE_FEEDBACK: notificationType = Activity.NOTIFICATION_TYPE_OFFER_FEEDBACK; flagEnabled = userData["optFeedbackReceived"]; break; } if (flagEnabled == 1) { //Create Notification. activityIns = new Activity(); activityId = activityIns.addActivity(userID, senderID, this.objectType, actionType, actionID); activityIns.addNotification(userID, activityId, notificationType); } }
/// <summery> /// <typeparam name=""></typeparam> userID /// <typeparam name=""></typeparam> type /// <returns></returns> bool /// </summery> public static function checkUserDailyLimit(userID, type) { global db; date = date("Y-m-d"); //Delete Old Data db.query(db.prepare("DELETE FROM " + TABLE_USERS_DAILY_ACTIVITIES + " WHERE userID=%d AND `date` < %s", userID, date)); if (check_user_acl(USER_ACL_MODERATOR, userID) || check_user_acl(USER_ACL_ADMINISTRATOR, userID)) { return(true); } //Get Activities query = db.prepare("SELECT * FROM " + TABLE_USERS_DAILY_ACTIVITIES + " WHERE userID=%d AND `date` = %s", userID, date); row = db.getRow(query); if (!row) { return(true); } switch (type) { case "posts": return(row["posts"] < USER_DAILY_LIMIT_POSTS); case "likes": return(row["likes"] < USER_DAILY_LIMIT_LIKES); case "comments": return(row["comments"] < USER_DAILY_LIMIT_COMMENTS); case "friendRequests": return(row["friendRequests"] < USER_DAILY_LIMIT_FRIEND_REQUESTS); } return(false); }
/// <summery> /// It will create Notification on Activities table /// /// <typeparam name=""></typeparam> integer userID /// <typeparam name=""></typeparam> integer senderID (the man who creates this alert) /// <typeparam name=""></typeparam> string actionType : one of action types (const defined for this class) /// <typeparam name=""></typeparam> integer actionID : related shop order ID /// </summery> function createNotification(userID, senderID, actionType, actionID) { //Check if this user will get this notification. (it will be set by Notification setting page) userIns = new TradeUser(); userData = userIns.getUserByID(userID); flagEnabled = 0; // user checked that he didn"t want to have this notification switch (actionType) { case Activity.ACTION_TYPE_PRODUCT_SOLD: flagEnabled = userData["optProductSoldOnShop"]; break; } if (flagEnabled == 1) { //Create Notification. activityIns = new Activity(); activityId = activityIns.addActivity(userID, senderID, this.objectType, actionType, actionID); activityIns.addNotification(userID, activityId, Activity.NOTIFICATION_TYPE_PRODUCT_SOLD); } }
/// <summery> /// Pay to list products /// /// <typeparam name=""></typeparam> mixed userID /// <typeparam name=""></typeparam> mixed paymentType /// <returns></returns> bool|int|null|string|void /// </summery> public function payListingFee(userID, prodID, paymentType = ShopProduct.LIST_FEE_PAYMENT_TYPE_BTC)
/// <summery> /// Create New Album /// /// <typeparam name=""></typeparam> Int userID /// <typeparam name=""></typeparam> String title /// <returns></returns> bool|int|null|string /// </summery> public static function createAlbum(userID, title, visibility) { global db; now = date("Y-m-d H:i:s"); newId = db.insertFromArray(TABLE_ALBUMS, ["owner" => userID, "name" => title, "created_date" => now, "visibility" => visibility]);
public static function addNotification(userID, activityID, notificationType, isNew = 1) { global db; db.insertFromArray(TABLE_MAIN_NOTIFICATIONS, array("userID" => userID, "activityID" => activityID, "notificationType" => notificationType, "isNew" => isNew, "createdDate" => time())); }
/// <summery> /// Add Trade user /// /// <typeparam name=""></typeparam> integer userID /// <typeparam name=""></typeparam> array data /// <returns></returns> int|null|string|void /// </summery> public function addUser(userID, data = [])
/// <summery> /// Make payment for listing trade items. /// /// <typeparam name=""></typeparam> mixed userID /// <typeparam name=""></typeparam> mixed itemID /// <typeparam name=""></typeparam> mixed paymentType /// <returns></returns> bool|int|null|string|void /// </summery> public function payListingFee(userID, itemID, paymentType = TradeItem.LIST_FEE_PAYMENT_TYPE_BTC)