コード例 #1
0
ファイル: class.updatemanager.php プロジェクト: kidmax/Garden
 public function Check($Type = '', $Name = '')
 {
     if ($Type != '' && $Name != '') {
         $this->AddItem($Type, $Name);
     }
     if (count($this->_Items) > 0) {
         // TODO: Use garden update check url instead of this:
         $UpdateUrl = Url('/lussumo/update', TRUE, TRUE);
         $Host = Gdn_Url::Host();
         $Path = CombinePaths(array(Gdn_Url::WebRoot(), 'lussumo', 'update'), '/');
         $Port = 80;
         /*
         $UpdateUrl = Gdn::Config('Garden.UpdateCheckUrl', '');
         $UpdateUrl = parse_url($UpdateUrl);
         $Host = ArrayValue('host', $UpdateUrl, 'www.lussumo.com');
         $Path = ArrayValue('path', $UpdateUrl, '/');
         $Port = ArrayValue('port', $UpdateUrl, '80');
         */
         $Path .= '?Check=' . urlencode(Format::Serialize($this->_Items));
         $Locale = Gdn::Config('Garden.Locale', 'Undefined');
         $Referer = Gdn_Url::WebRoot(TRUE);
         if ($Referer === FALSE) {
             $Referer = 'Undefined';
         }
         $Timeout = 10;
         $Response = '';
         // Connect to the update server.
         $Pointer = @fsockopen($Host, '80', $ErrorNumber, $Error, $Timeout);
         if (!$Pointer) {
             throw new Exception(sprintf(Gdn::Translate('Encountered an error when attempting to connect to the update server (%1$s): [%2$s] %3$s'), $UpdateUrl, $ErrorNumber, $Error));
         } else {
             // send the necessary headers to get the file
             fputs($Pointer, "GET {$Path} HTTP/1.0\r\n" . "Host: {$Host}\r\n" . "User-Agent: Lussumo Garden/1.0\r\n" . "Accept: */*\r\n" . "Accept-Language: " . $Locale . "\r\n" . "Accept-Charset: utf-8;\r\n" . "Keep-Alive: 300\r\n" . "Connection: keep-alive\r\n" . "Referer: {$Referer}\r\n\r\n");
             // Retrieve the response from the remote server
             while ($Line = fread($Pointer, 4096)) {
                 $Response .= $Line;
             }
             fclose($Pointer);
             // Remove response headers
             $Response = substr($Response, strpos($Response, "\r\n\r\n") + 4);
         }
         $Result = Format::Unserialize($Response);
         // print_r($Result);
         if (is_array($Result)) {
             $this->_Items = $Result;
         } else {
             $Result = FALSE;
         }
         return $Result;
     }
 }
コード例 #2
0
 public function AddUserToConversation($ConversationID, $UserID)
 {
     if (!is_array($UserID)) {
         $UserID = array($UserID);
     }
     // First define the current users in the conversation
     $OldContributorData = $this->GetRecipients($ConversationID);
     $OldContributorUserIDs = ConsolidateArrayValuesByKey($OldContributorData->ResultArray(), 'UserID');
     $AddedUserIDs = array();
     // Get some information about this conversation
     $ConversationData = $this->SQL->Select('MessageID', 'max', 'LastMessageID')->Select('MessageID', 'count', 'CountMessages')->From('ConversationMessage')->Where('ConversationID', $ConversationID)->Get()->FirstRow();
     // Add the user(s) if they are not already in the conversation
     foreach ($UserID as $NewUserID) {
         if (!in_array($NewUserID, $OldContributorUserIDs)) {
             $AddedUserIDs[] = $NewUserID;
             $this->SQL->Insert('UserConversation', array('UserID' => $NewUserID, 'ConversationID' => $ConversationID, 'LastMessageID' => $ConversationData->LastMessageID, 'CountMessages' => $ConversationData->CountMessages, 'CountNewMessages' => $ConversationData->CountMessages));
         }
     }
     if (count($AddedUserIDs) > 0) {
         $Session = Gdn::Session();
         // Update the Contributors field on the conversation
         $Contributors = array_unique(array_merge($AddedUserIDs, $OldContributorUserIDs));
         sort($Contributors);
         $this->SQL->Update('Conversation')->Set('Contributors', Format::Serialize($Contributors))->Where('ConversationID', $ConversationID)->Put();
         // NOTIFY ALL NEWLY ADDED USERS THAT THEY WERE ADDED TO THE CONVERSATION
         foreach ($AddedUserIDs as $AddedUserID) {
             AddActivity($Session->UserID, 'AddedToConversation', '', $AddedUserID, '/messages/' . $ConversationID);
         }
         // Update the unread conversation count for each affected user
         $this->SQL->Update('User')->Set('CountUnreadConversations', 'CountUnreadConversations + 1', FALSE)->WhereIn('UserID', $AddedUserIDs)->Put();
     }
 }
コード例 #3
0
ファイル: class.usermodel.php プロジェクト: robi-bobi/Garden
 /**
  * Saves a name/value to the user's specified $Column.
  *
  * This method throws exceptions when errors are encountered. Use try ...
  * catch blocks to capture these exceptions.
  *
  * @param string The name of the serialized column to save to. At the time of this writing there are three serialized columns on the user table: Permissions, Preferences, and Attributes.
  * @param int The UserID to save.
  * @param mixed The name of the value being saved, or an associative array of name => value pairs to be saved. If this is an associative array, the $Value argument will be ignored.
  * @param mixed The value being saved.
  */
 public function SaveToSerializedColumn($Column, $UserID, $Name, $Value = '')
 {
     // Load the existing values
     $UserData = $this->SQL->Select($Column)->From('User')->Where('UserID', $UserID)->Get()->FirstRow();
     if (!$UserData) {
         throw new Exception(Gdn::Translate('ErrorRecordNotFound'));
     }
     $Values = Format::Unserialize($UserData->{$Column});
     // Throw an exception if the field was not empty but is also not an object or array
     if (is_string($Values) && $Values != '') {
         throw new Exception(Gdn::Translate('Serialized column failed to be unserialized.'));
     }
     if (!is_array($Values)) {
         $Values = array();
     }
     // Assign the new value(s)
     if (!is_array($Name)) {
         $Name = array($Name => $Value);
     }
     $Values = Format::Serialize(array_merge($Values, $Name));
     // Save the values back to the db
     return $this->SQL->Put('User', array($Column => $Values), array('UserID' => $UserID));
 }
コード例 #4
0
ファイル: settings.php プロジェクト: jeastwood/Garden
 public function Index()
 {
     $this->AddJsFile('settings.js');
     $this->Title(Translate('Dashboard'));
     $this->RequiredAdminPermissions[] = 'Garden.Settings.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Routes.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Applications.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Plugins.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Themes.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Registration.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Applicants.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Roles.Manage';
     $this->RequiredAdminPermissions[] = 'Garden.Users.Add';
     $this->RequiredAdminPermissions[] = 'Garden.Users.Edit';
     $this->RequiredAdminPermissions[] = 'Garden.Users.Delete';
     $this->RequiredAdminPermissions[] = 'Garden.Users.Approve';
     $this->FireEvent('DefineAdminPermissions');
     $this->Permission($this->RequiredAdminPermissions, '', FALSE);
     $this->AddSideMenu('garden/settings');
     $UserModel = Gdn::UserModel();
     // Load some data to display on the dashboard
     $this->BuzzData = array();
     // Get the number of users in the database
     $CountUsers = $UserModel->GetCountLike();
     $this->AddDefinition('CountUsers', $CountUsers);
     $this->BuzzData[Translate('Users')] = number_format($CountUsers);
     // Get the number of new users in the last day
     $this->BuzzData[Translate('New users in the last day')] = number_format($UserModel->GetCountWhere(array('DateInserted >=' => Format::ToDateTime(strtotime('-1 day')))));
     // Get the number of new users in the last week
     $this->BuzzData[Translate('New users in the last week')] = number_format($UserModel->GetCountWhere(array('DateInserted >=' => Format::ToDateTime(strtotime('-1 week')))));
     // Get recently active users
     $this->ActiveUserData = $UserModel->GetActiveUsers(5);
     // Check to see if the application needs to phone-home for updates. Doing
     // this here because this method is always called when admin pages are
     // loaded regardless of the application loading them.
     $UpdateCheckDate = Gdn::Config('Garden.UpdateCheckDate', '');
     if ($UpdateCheckDate == '' || !IsTimestamp($UpdateCheckDate) || $UpdateCheckDate < strtotime("-1 day")) {
         $UpdateData = array();
         // Grab all of the plugins & versions
         $PluginManager = Gdn::Factory('PluginManager');
         $Plugins = $PluginManager->AvailablePlugins();
         foreach ($Plugins as $Plugin => $Info) {
             $Name = ArrayValue('Name', $Info, $Plugin);
             $Version = ArrayValue('Version', $Info, '');
             if ($Version != '') {
                 $UpdateData[] = array('Name' => $Name, 'Version' => $Version, 'Type' => 'Plugin');
             }
         }
         // Grab all of the applications & versions
         $ApplicationManager = Gdn::Factory('ApplicationManager');
         $Applications = $ApplicationManager->AvailableApplications();
         foreach ($Applications as $Application => $Info) {
             $Name = ArrayValue('Name', $Info, $Application);
             $Version = ArrayValue('Version', $Info, '');
             if ($Version != '') {
                 $UpdateData[] = array('Name' => $Name, 'Version' => $Version, 'Type' => 'Application');
             }
         }
         // Grab all of the themes & versions
         $ThemeManager = new Gdn_ThemeManager();
         $Themes = $ThemeManager->AvailableThemes();
         foreach ($Themes as $Theme => $Info) {
             $Name = ArrayValue('Name', $Info, $Theme);
             $Version = ArrayValue('Version', $Info, '');
             if ($Version != '') {
                 $UpdateData[] = array('Name' => $Name, 'Version' => $Version, 'Type' => 'Theme');
             }
         }
         // Dump the entire set of information into the definition list (jQuery
         // will pick it up and ping the VanillaForums.org server with this info).
         $this->AddDefinition('UpdateChecks', Format::Serialize($UpdateData));
     }
     // Fire an event so other applications can add some data to be displayed
     $this->FireEvent('DashboardData');
     $this->Render();
 }
コード例 #5
0
 /**
  * Assigns a setting to the configuration array.
  *
  * @param string $Name The name of the configuration setting to assign. If the setting is
  * contained within an associative array, use dot denomination to get the
  * setting. ie. <code>$this->Set('Database.Host', $Value)</code> would set
  * <code>$Configuration[$Group]['Database']['Host'] = $Value</code>.
  * @param mixed $Value The value of the configuration setting.
  * @param boolean $Overwrite If the setting already exists, should it's value be overwritten? Defaults to true.
  */
 public function Set($Name, $Value, $Overwrite = TRUE)
 {
     if (!is_array($this->_Data)) {
         $this->_Data = array();
     }
     if (!is_array($this->_SaveData)) {
         $this->_SaveData = array();
     }
     $Keys = explode('.', $Name);
     $KeyCount = count($Keys);
     $Array =& $this->_Data;
     $SaveArray =& $this->_SaveData;
     for ($i = 0; $i < $KeyCount; ++$i) {
         $Key = $Keys[$i];
         $KeyExists = array_key_exists($Key, $Array);
         if ($i == $KeyCount - 1) {
             // If we are on the last iteration of the key, then set the value.
             if ($KeyExists === FALSE || $Overwrite === TRUE) {
                 $Array[$Key] = Format::Serialize($Value);
                 $SaveArray[$Key] = Format::Serialize($Value);
             }
         } else {
             // Otherwise, traverse the array
             if ($KeyExists === FALSE) {
                 $Array[$Key] = array();
                 $SaveArray[$Key] = array();
             }
             $Array =& $Array[$Key];
             $SaveArray =& $SaveArray[$Key];
         }
     }
 }
コード例 #6
0
ファイル: settings.php プロジェクト: robi-bobi/Garden
 /**
  * Adds information to the definition list that causes the app to "phone
  * home" and see if there are upgrades available. Currently added to the
  * dashboard only.
  * Nothing renders with this method. It is public so it can be added by
  * plugins.
  */
 public function AddUpdateCheck()
 {
     // Check to see if the application needs to phone-home for updates. Doing
     // this here because this method is always called when admin pages are
     // loaded regardless of the application loading them.
     $UpdateCheckDate = Gdn::Config('Garden.UpdateCheckDate', '');
     if ($UpdateCheckDate == '' || !IsTimestamp($UpdateCheckDate) || $UpdateCheckDate < strtotime("-1 day")) {
         $UpdateData = array();
         // Grab all of the plugins & versions
         $PluginManager = Gdn::Factory('PluginManager');
         $Plugins = $PluginManager->AvailablePlugins();
         foreach ($Plugins as $Plugin => $Info) {
             $Name = ArrayValue('Name', $Info, $Plugin);
             $Version = ArrayValue('Version', $Info, '');
             if ($Version != '') {
                 $UpdateData[] = array('Name' => $Name, 'Version' => $Version, 'Type' => 'Plugin');
             }
         }
         // Grab all of the applications & versions
         $ApplicationManager = Gdn::Factory('ApplicationManager');
         $Applications = $ApplicationManager->AvailableApplications();
         foreach ($Applications as $Application => $Info) {
             $Name = ArrayValue('Name', $Info, $Application);
             $Version = ArrayValue('Version', $Info, '');
             if ($Version != '') {
                 $UpdateData[] = array('Name' => $Name, 'Version' => $Version, 'Type' => 'Application');
             }
         }
         // Grab all of the themes & versions
         $ThemeManager = new Gdn_ThemeManager();
         $Themes = $ThemeManager->AvailableThemes();
         foreach ($Themes as $Theme => $Info) {
             $Name = ArrayValue('Name', $Info, $Theme);
             $Version = ArrayValue('Version', $Info, '');
             if ($Version != '') {
                 $UpdateData[] = array('Name' => $Name, 'Version' => $Version, 'Type' => 'Theme');
             }
         }
         // Dump the entire set of information into the definition list (jQuery
         // will pick it up and ping the VanillaForums.org server with this info).
         $this->AddDefinition('UpdateChecks', Format::Serialize($UpdateData));
     }
 }
コード例 #7
0
ファイル: class.model.php プロジェクト: stinie/Garden
 public function SaveToSerializedColumn($Column, $RowID, $Name, $Value = '')
 {
     if (!isset($this->Schema)) {
         $this->DefineSchema();
     }
     // TODO: need to be sure that $this->PrimaryKey is only one primary key
     $FieldName = $this->PrimaryKey;
     // Load the existing values
     $Row = $this->SQL->Select($Column)->From($this->Name)->Where($FieldName, $RowID)->Get()->FirstRow();
     if (!$Row) {
         throw new Exception(Gdn::Translate('ErrorRecordNotFound'));
     }
     $Values = Format::Unserialize($Row->{$Column});
     if (is_string($Values) && $Values != '') {
         throw new Exception(Gdn::Translate('Serialized column failed to be unserialized.'));
     }
     if (!is_array($Values)) {
         $Values = array();
     }
     if (!is_array($Name)) {
         $Name = array($Name => $Value);
     }
     // Assign the new value(s)
     $Values = Format::Serialize(array_merge($Values, $Name));
     // Save the values back to the db
     return $this->SQL->From($this->Name)->Where($FieldName, $RowID)->Set($Column, $Values)->Put();
 }