/** * getStats * * @param int $userid * * @return void */ function getStats($userid) { $data = array(); $postsCount = getPostsById($userid, 'array'); $photosCount = getPhotosById($userid, 'array'); $commentsCount = getCommentsById($userid, 'array'); $calendarsCount = getCalendarEntriesById($userid, 'array'); $data['posts'] = ' <div class="stat" data-percent="' . $postsCount['percent'] . '"> <div class="label">' . T_('Posts') . '</div> <span class="inner" title="' . $postsCount['percent'] . '%">' . $postsCount['count'] . '</span> </div>'; $data['photos'] = ' <div class="stat" data-percent="' . $photosCount['percent'] . '"> <div class="label">' . T_('Photos') . '</div> <span class="inner" title="' . $photosCount['percent'] . '%">' . $photosCount['count'] . '</span> </div>'; $data['comments'] = ' <div class="stat" data-percent="' . $commentsCount['percent'] . '"> <div class="label">' . T_('Comments') . '</div> <span class="inner" title="' . $commentsCount['percent'] . '%">' . $commentsCount['count'] . '</span> </div>'; $data['events'] = ' <div class="stat" data-percent="' . $calendarsCount['percent'] . '"> <div class="label">' . T_('Dates') . '</div> <span class="inner" title="' . $calendarsCount['percent'] . '%">' . $calendarsCount['count'] . '</span> </div>'; if (usingFamilyNews()) { $newsCount = getFamilyNewsById($userid, 'array'); $data['news'] = ' <div class="stat" data-percent="' . $newsCount['percent'] . '"> <div class="label">' . T_('Family News') . '</div> <span class="inner" title="' . $newsCount['percent'] . '%">' . $newsCount['count'] . '</span> </div>'; } if (usingRecipes()) { $recipesCount = getRecipesById($userid, 'array'); $data['recipes'] = ' <div class="stat" data-percent="' . $recipesCount['percent'] . '"> <div class="label">' . T_('Recipes') . '</div> <span class="inner" title="' . $recipesCount['percent'] . '%">' . $recipesCount['count'] . '</span> </div>'; } if (usingDocuments()) { $documentsCount = getDocumentsById($userid, 'array'); $data['documents'] = ' <div class="stat" data-percent="' . $documentsCount['percent'] . '"> <div class="label">' . T_('Documents') . '</div> <span class="inner" title="' . $documentsCount['percent'] . '%">' . $documentsCount['count'] . '</span> </div>'; } if (usingPrayers()) { $prayersCount = getPrayersById($userid, 'array'); $data['prayers'] = ' <div class="stat" data-percent="' . $prayersCount['percent'] . '"> <div class="label">' . T_('Prayer Concerns') . '</div> <span class="inner" title="' . $prayersCount['percent'] . '%">' . $prayersCount['count'] . '</span> </div>'; } return $data; }
/** * getWhatsNewData * * Get the latest information in the site, including any external data. * Defaults to the last 30 days. * * Types of data: * * ADDRESSADD Add address of non-member * ADDRESSEDIT Edit own address * AVATAR Change avatar * BOARD Message board post * CALENDAR Add date to calendar * DOCS Added document * GALCATCOM Commented on category of photos * GALCOM Commented on photo * GALLERY Added photo * JOINED Joined the site (became active) * NEWS Added family news * NEWSCOM Commented on family news * POLL Added poll * POLLCOM Commented on poll * PRAYERS Added prayer concern * RECIPES Added recipe * RECIPECOM Commented on recipe * STATUS Added status update * VIDEO Added video * VIDEOCOM Commented on video * WHEREISEVERYONE Checked in on foursquare * * @param int $days * * @return mixed - array on success or false on failure */ function getWhatsNewData($days = 30) { $fcmsError = FCMS_Error::getInstance(); $fcmsDatabase = Database::getInstance($fcmsError); $fcmsUser = User::getInstance($fcmsError, $fcmsDatabase); $whatsNewData = array(); $sql = "SELECT p.`id`, `date`, `subject` AS title, p.`post` AS details, u.`id` AS userid, `thread` AS id2, 0 AS id3, 'BOARD' AS type\n FROM `fcms_board_posts` AS p, `fcms_board_threads` AS t, fcms_users AS u \n WHERE p.`thread` = t.`id` \n AND p.`user` = u.`id` \n AND `date` >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n\n UNION SELECT a.`id`, c.`created` AS date, c.`column` AS title, '' AS details, a.`user` AS userid, a.`updated_id` AS id2, u.`sex` AS id3, 'ADDRESSEDIT' AS type\n FROM `fcms_changelog` AS c\n LEFT JOIN `fcms_users` AS u ON c.`user` = u.`id`\n LEFT JOIN `fcms_address` AS a ON u.`id` = a.`user`\n WHERE c.`created` >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n AND c.`column` != 'avatar'\n\n UNION SELECT a.id, a.updated AS date, 0 AS title, '' AS details, a.user AS userid, a.`created_id` AS id2, u.joindate AS id3, 'ADDRESSADD' AS type\n FROM fcms_address AS a, fcms_users AS u\n WHERE a.user = u.id\n AND u.`phpass` = 'NONMEMBER' \n AND u.`activated` < 1 \n AND a.updated >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n\n UNION SELECT `id`, `joindate` AS date, 0 AS title, '' AS details, `id` AS userid, 0 AS id2, 0 AS id3, 'JOINED' AS type \n FROM `fcms_users` \n WHERE `phpass` != 'NONMEMBER' \n AND `joindate` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n AND `activated` > 0 "; if (usingFamilyNews()) { $sql .= "UNION SELECT n.`id` AS id, n.`updated` AS date, `title`, n.`news` AS details, u.`id` AS userid, u.`sex` AS id2, 0 AS id3, 'NEWS' AS type \n FROM `fcms_users` AS u, `fcms_news` AS n \n WHERE u.`id` = n.`user` \n AND n.`updated` >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n AND `username` != 'SITENEWS' \n AND `phpass` != 'SITENEWS'\n\n UNION SELECT n.`id` AS 'id', nc.`date`, `title`, nc.`comment` AS details, nc.`user` AS userid, 0 AS id2, 0 AS id3, 'NEWSCOM' AS type \n FROM `fcms_news_comments` AS nc, `fcms_news` AS n, `fcms_users` AS u \n WHERE nc.`date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n AND nc.`user` = u.`id` \n AND n.`id` = nc.`news` "; } if (usingPrayers()) { $sql .= "UNION SELECT 0 AS id, `date`, `for` AS title, `desc` AS details, `user` AS userid, 0 AS id2, 0 AS id3, 'PRAYERS' AS type \n FROM `fcms_prayers` \n WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) "; } if (usingRecipes()) { $sql .= "UNION SELECT `id` AS id, `date`, `name` AS title, '' AS details, `user` AS userid, `category` AS id2, 0 AS id3, 'RECIPES' AS type \n FROM `fcms_recipes` \n WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n\n UNION SELECT r.`id`, rc.`date`, r.`name` AS title, rc.`comment` AS details, rc.`user` AS userid, r.`category` AS id2, 0 AS id3, 'RECIPECOM' AS type\n FROM `fcms_recipe_comment` AS rc, `fcms_recipes` AS r\n WHERE rc.`date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY)\n AND rc.`recipe` = r.`id` "; } if (usingdocuments()) { $sql .= "UNION SELECT d.`id` AS 'id', d.`date`, `name` AS title, d.`description` AS details, d.`user` AS userid, 0 AS id2, 0 AS id3, 'DOCS' AS type \n FROM `fcms_documents` AS d, `fcms_users` AS u \n WHERE d.`date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n AND d.`user` = u.`id` "; } $sql .= "UNION SELECT DISTINCT p.`category` AS id, p.`date`, `name` AS title, '' AS details, p.`user` AS userid, COUNT(*) AS id2, DAYOFYEAR(p.`date`) AS id3, 'GALLERY' AS type \n FROM `fcms_gallery_photos` AS p, `fcms_users` AS u, `fcms_category` AS c \n WHERE p.`user` = u.`id` \n AND p.`category` = c.`id` \n AND p.`date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n GROUP BY userid, title, id3\n\n UNION SELECT p.`id`, gc.`date`, gc.`comment` AS title, gc.`comment` AS details, gc.`user` AS userid, p.`user` AS id2, `filename` AS id3, 'GALCOM' AS type \n FROM `fcms_gallery_photo_comment` AS gc, `fcms_users` AS u, `fcms_gallery_photos` AS p \n WHERE gc.`date` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n AND gc.`user` = u.`id` \n AND gc.`photo` = p.`id` \n\n UNION SELECT g.`id`, g.`created`, c.`name` AS title, g.`comment` AS details, g.`created_id` AS userid, c.`user` AS id2, c.`id` AS id3, 'GALCATCOM' AS type \n FROM `fcms_gallery_category_comment` AS g\n LEFT JOIN `fcms_users` AS u ON g.`created_id` = u.`id`\n LEFT JOIN `fcms_category` AS c ON g.`category_id` = c.`id`\n WHERE g.`created` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n\n UNION SELECT c.`id`, c.`date_added` AS date, `title`, c.`desc` AS details, `created_by` AS userid, `date` AS id2, `category` AS id3, 'CALENDAR' AS type \n FROM `fcms_calendar` AS c, `fcms_users` AS u \n WHERE c.`date_added` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n AND c.`created_by` = u.`id` AND `private` < 1 \n\n UNION SELECT `id`, `started` AS date, `question` AS title, '' AS details, '0' AS userid, 'na' AS id2, 'na' AS id3, 'POLL' AS type \n FROM `fcms_polls` \n WHERE `started` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n\n UNION SELECT p.`id`, c.`created` AS date, p.`question` AS title, c.`comment` AS details, c.`created_id` AS userid, 'na' AS id2, 'na' AS id3, 'POLLCOM' AS type \n FROM `fcms_poll_comment` AS c\n LEFT JOIN `fcms_polls` AS p ON c.`poll_id` = p.`id`\n WHERE `created` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n\n UNION SELECT `id`, `updated` AS date, `status` AS title, '' AS details, `user` AS userid, `parent` AS id2, `created` AS id3, 'STATUS' AS type \n FROM `fcms_status` \n WHERE `updated` >= DATE_SUB(CURDATE(), INTERVAL {$days} DAY) \n\n UNION SELECT 0 as id, c.`created` AS date, 0 AS title, '' AS details, c.`user` AS userid, 0 AS id2, u.`sex` AS id3, 'AVATAR' AS type\n FROM `fcms_changelog` AS c\n LEFT JOIN `fcms_users` AS u ON c.`user` = u.`id`\n WHERE `created` >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n AND `column` = 'avatar'\n\n UNION SELECT `id`, `created` AS date, `title`, `description` AS details, `created_id` AS userid, `source_id` AS id2, `source` AS id3, 'VIDEO' AS type\n FROM `fcms_video`\n WHERE `created` >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n AND `active` = '1'\n\n UNION SELECT `video_id` AS 'id', c.`created` AS date, `comment`, '' AS details, c.`created_id` AS userid, `source_id` AS id2, `source` AS id3, 'VIDEOCOM' AS type\n FROM `fcms_video_comment` AS c\n LEFT JOIN `fcms_video` AS v ON c.`video_id` = v.`id`\n WHERE c.`created` >= DATE_SUB(CURDATE(),INTERVAL {$days} DAY) \n AND v.`active` = '1'\n\n ORDER BY date DESC LIMIT 0, 35"; $whatsNewData = $fcmsDatabase->getRows($sql); if ($whatsNewData === false) { $fcmsError->setMessage(T_('Could not get What\'s New data.')); return false; } // Get additional data $whatsNewData = getAdditionalWhatsNewData($whatsNewData); if ($whatsNewData === false) { $fcmsError->setMessage(T_('Could not get additional What\'s New data.')); return false; } // Add external foursquare data if (usingWhereIsEveryone()) { $whatsNewData = getFoursquareWhatsNewData($whatsNewData); if ($whatsNewData === false) { $fcmsError->setMessage(T_('Could not get Foursquare What\'s New data.')); return false; } } // Now lets group events together $groupedData = array(); foreach ($whatsNewData as $data) { // Build a lookup for the data for each new item $lkup = array(); switch ($data['type']) { case 'THREAD': case 'BOARD': $lkup = array('type' => 'thread_', 'parent' => 'THREAD', 'child' => 'BOARD', 'parentId' => 'id2', 'childId' => 'id2'); break; case 'GALLERY': case 'GALCATCOM': $lkup = array('type' => 'gallery_', 'parent' => 'GALLERY', 'child' => 'GALCATCOM', 'parentId' => 'id', 'childId' => 'id3'); break; case 'NEWS': case 'NEWSCOM': $lkup = array('type' => 'news_', 'parent' => 'NEWS', 'child' => 'NEWSCOM', 'parentId' => 'id', 'childId' => 'id'); break; case 'POLL': case 'POLLCOM': $lkup = array('type' => 'poll_', 'parent' => 'POLL', 'child' => 'POLLCOM', 'parentId' => 'id', 'childId' => 'id'); break; case 'RECIPES': case 'RECIPECOM': $lkup = array('type' => 'recipe_', 'parent' => 'RECIPES', 'child' => 'RECIPECOM', 'parentId' => 'id', 'childId' => 'id'); break; case 'STATUS': case 'STATUSCOM': $lkup = array('type' => 'status_', 'parent' => 'STATUS', 'child' => 'STATUSCOM', 'parentId' => 'id', 'childId' => 'id2'); break; case 'VIDEO': case 'VIDEOCOM': $lkup = array('type' => 'video_', 'parent' => 'VIDEO', 'child' => 'VIDEOCOM', 'parentId' => 'id', 'childId' => 'id'); break; } // Group things together if (count($lkup) > 0) { $id = $data['type'] == $lkup['parent'] ? $data[$lkup['parentId']] : $data[$lkup['childId']]; if (isset($groupedData[$lkup['type'] . $id])) { if ($data['type'] == $lkup['parent']) { // put it at the top of the group array_unshift($groupedData[$lkup['type'] . $id], $data); } else { // put it at the end of the group $groupedData[$lkup['type'] . $id][] = $data; } } else { // start a new group $groupedData[$lkup['type'] . $id] = array($data); } } else { $groupedData[] = array($data); } } return $groupedData; }