/**
  * If for some reason the server does not have allow_url_fopen or cURL
  * enabled, use this function to get the file via fsockopen.
  *
  * @access protected
  * @param string $url The source URL to retrieve
  * @return string The response from the server
  */
 protected function _getByFsockopen($url)
 {
     $purl = parse_url($url);
     $host = $purl['host'];
     $path = !empty($purl['path']) ? $purl['path'] : '/';
     if (!empty($purl['query'])) {
         $path .= '?' . $purl['query'];
     }
     $port = !empty($purl['port']) ? $purl['port'] : '80';
     $timeout = 10;
     $response = '';
     $fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
     if (!$fp) {
         $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Could not retrieve from ' . $url);
     } else {
         fwrite($fp, "GET {$path} HTTP/1.0\r\n" . "Host: {$host}\r\n" . "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3\r\n" . "Accept: */*\r\n" . "Accept-Language: en-us,en;q=0.5\r\n" . "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" . "Keep-Alive: 300\r\n" . "Connection: keep-alive\r\n" . "Referer: http://{$host}\r\n\r\n");
         while ($line = fread($fp, 4096)) {
             $response .= $line;
         }
         fclose($fp);
         $pos = strpos($response, "\r\n\r\n");
         $response = substr($response, $pos + 4);
     }
     return $response;
 }
Ejemplo n.º 2
0
 /**
  * Gets the php data type for the specified field.
  *
  * @access protected
  * @param string $key The field name to get the data type for.
  * @return string The PHP data type of the field.
  */
 protected function _getPHPType($key) {
     $type= 'string';
     if (isset ($this->_fieldMeta[$key]['phptype'])) {
         $type= strtolower($this->_fieldMeta[$key]['phptype']);
     } elseif ($this->xpdo->getDebug() === true) {
         $this->xpdo->log(xPDO::LOG_LEVEL_DEBUG, "xPDOObject::_getPHPType() -- No PHP type specified for field ({$key}), using `string`.");
     }
     return $type;
 }
Ejemplo n.º 3
0
 /**
  * Load the modLexicon service
  *
  * @return boolean
  */
 protected function _loadLexicon()
 {
     if (!$this->xpdo->lexicon) {
         $this->xpdo->lexicon = $this->xpdo->getService('lexicon', 'modLexicon');
         if (empty($this->xpdo->lexicon)) {
             $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, '[Quip] Could not load MODx lexicon.');
             return false;
         }
     }
     return true;
 }
 /**
  * Sends a REST request to the provider
  *
  * @param string $path The path of the request
  * @param string $method The method of the request (GET/POST)
  * @param array $params An array of parameters to send to the REST request
  * @return modRestResponse|bool The response from the REST request, or false
  */
 public function request($path, $method = 'GET', $params = array())
 {
     $response = false;
     $service = $this->getClient();
     if ($service) {
         $response = $service->request($this->get('service_url'), $path, $method, $this->args($params));
     } else {
         $this->xpdo->log(modX::LOG_LEVEL_ERROR, $this->xpdo->lexicon('provider_err_no_client'), '', __METHOD__, __FILE__, __LINE__);
     }
     return $response;
 }
Ejemplo n.º 5
0
 /**
  * Load preserved objects from the previous install().
  *
  * @return array An array of preserved objects, or an empty array.
  */
 public function loadPreserved()
 {
     $preserved = array();
     $fileName = $this->path . $this->signature . '/preserved.php';
     if (file_exists($fileName)) {
         $content = (include $fileName);
         if (is_array($content)) {
             $preserved = $content;
         } else {
             $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Error loading preserved objects from ' . $fileName);
         }
     }
     return $preserved;
 }
Ejemplo n.º 6
0
 /**
  * Removes the User from the specified User Group.
  *
  * @access public
  * @param mixed $groupId Either the name or ID of the User Group to join.
  * @return boolean True if successful.
  */
 public function leaveGroup($groupId)
 {
     $left = false;
     $c = $this->xpdo->newQuery('modUserGroupMember');
     $c->innerJoin('modUserGroup', 'UserGroup');
     $c->where(array('member' => $this->get('id')));
     $fk = is_string($groupId) ? 'name' : 'id';
     $c->where(array('member' => $this->get('id'), 'UserGroup.' . $fk => $groupId));
     /** @var modUserGroupMember $member */
     $member = $this->xpdo->getObject('modUserGroupMember', $c);
     if (empty($member)) {
         $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'User could not leave group with key "' . $groupId . '" because the User was not a part of that group.');
     } else {
         $left = $member->remove();
         if (!$left) {
             $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, 'An unknown error occurred preventing removing the User from the User Group.');
         } else {
             unset($_SESSION["modx.user.{$this->get('id')}.userGroupNames"], $_SESSION["modx.user.{$this->get('id')}.userGroups"]);
         }
     }
     return $left;
 }
Ejemplo n.º 7
0
 /**
  * Get a full list of all boards on the forum, for any user
  * @static
  * @param xPDO $modx
  * @param int $board
  * @param bool $category
  * @return array
  */
 public static function getList(xPDO &$modx, $board = 0, $category = false)
 {
     $response = array();
     /* get a comma-sep-list of thread IDs for comparing to read ids for user */
     $threadsCriteria = $modx->newQuery('disThread');
     $threadsCriteria->setClassAlias('Threadr');
     $threadsCriteria->select(array('GROUP_CONCAT(Threadr.id)'));
     $threadsCriteria->where(array('Threadr.board = disBoard.id'));
     $threadsCriteria->prepare();
     $threadsSql = $threadsCriteria->toSql();
     /* subboards sql */
     $sbCriteria = $modx->newQuery('disBoard');
     $sbCriteria->setClassAlias('subBoard');
     $sbCriteria->select(array('GROUP_CONCAT(CONCAT_WS(":",subBoardClosureBoard.id,subBoardClosureBoard.name) SEPARATOR "||") AS name'));
     $sbCriteria->innerJoin('disBoardClosure', 'subBoardClosure', 'subBoardClosure.ancestor = subBoard.id');
     $sbCriteria->innerJoin('disBoard', 'subBoardClosureBoard', 'subBoardClosureBoard.id = subBoardClosure.descendant');
     $sbCriteria->where(array('subBoard.id = disBoard.id', 'subBoard.status:!=' => disBoard::STATUS_INACTIVE, 'subBoardClosureBoard.status:!=' => disBoard::STATUS_INACTIVE, 'subBoardClosure.descendant != disBoard.id', 'subBoardClosure.depth' => 1));
     $sbCriteria->groupby($modx->getSelectColumns('disBoard', 'subBoard', '', array('id')));
     $sbCriteria->prepare();
     $sbSql = $sbCriteria->toSql();
     /* get main query */
     $c = $modx->newQuery('disBoard');
     $c->innerJoin('disCategory', 'Category');
     $c->innerJoin('disBoardClosure', 'Descendants');
     $c->leftJoin('disPost', 'LastPost');
     $c->leftJoin('disUser', 'LastPostAuthor', 'LastPost.author = LastPostAuthor.id');
     $c->leftJoin('disThread', 'LastPostThread', 'LastPostThread.id = LastPost.thread');
     $c->where(array('disBoard.status:!=' => disBoard::STATUS_INACTIVE));
     if (isset($board) && $board !== null) {
         $c->where(array('disBoard.parent' => $board));
     }
     if (!empty($category)) {
         $c->where(array('disBoard.category' => $category));
     }
     $ugc = $modx->newQuery('disBoardUserGroup');
     $ugc->select(array('GROUP_CONCAT(usergroup)'));
     $ugc->where(array('board = disBoard.id'));
     $ugc->groupby('board');
     $ugc->prepare();
     $userGroupsSql = $ugc->toSql();
     $response['total'] = $modx->getCount('disBoard', $c);
     $c->query['distinct'] = 'DISTINCT';
     $c->select($modx->getSelectColumns('disBoard', 'disBoard'));
     $c->select(array('Category.name AS category_name', '(' . $sbSql . ') AS ' . $modx->escape('subboards'), '(' . $threadsSql . ') AS ' . $modx->escape('threads'), '(' . $userGroupsSql . ') AS ' . $modx->escape('usergroups'), 'LastPost.id AS last_post_id', 'LastPost.thread AS last_post_thread', 'LastPost.author AS last_post_author', 'LastPost.createdon AS last_post_createdon', 'LastPostThread.replies AS last_post_replies', 'LastPostThread.title AS last_post_title', 'LastPostAuthor.username AS last_post_username', 'LastPostAuthor.use_display_name AS last_post_udn', 'LastPostAuthor.display_name AS last_post_display_name'));
     $c->sortby('Category.rank', 'ASC');
     $c->sortby('disBoard.rank', 'ASC');
     $c->prepare();
     $modx->log(modX::LOG_LEVEL_ERROR, $c->toSQL());
     $response['results'] = $modx->getCollection('disBoard', $c);
     return $response;
 }
Ejemplo n.º 8
0
$included = false;
if (file_exists($f)) {
    $included = @(include $f);
}
if (!$included) {
    die('build.properties.php was not found. Please make sure you have created one using the template of build.properties.sample.php.');
}
unset($f, $included);
/* instantiate xpdo instance */
$xpdo = new xPDO(XPDO_DSN, XPDO_DB_USER, XPDO_DB_PASS, array(xPDO::OPT_TABLE_PREFIX => XPDO_TABLE_PREFIX, xPDO::OPT_CACHE_PATH => MODX_CORE_PATH . 'cache/'), array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
$cacheManager = $xpdo->getCacheManager();
$xpdo->setLogLevel(xPDO::LOG_LEVEL_INFO);
$xpdo->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$xpdo->loadClass('transport.xPDOTransport', XPDO_CORE_PATH, true, true);
$packageDirectory = MODX_CORE_PATH . 'packages/';
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'Beginning build script processes...');
flush();
/* remove pre-existing package files and directory */
if (file_exists($packageDirectory . 'core.transport.zip')) {
    @unlink($packageDirectory . 'core.transport.zip');
}
if (file_exists($packageDirectory . 'core') && is_dir($packageDirectory . 'core')) {
    $cacheManager->deleteTree($packageDirectory . 'core', array('deleteTop' => true, 'skipDirs' => false, 'extensions' => '*'));
}
if (!file_exists($packageDirectory . 'core') && !file_exists($packageDirectory . 'core.transport.zip')) {
    $xpdo->log(xPDO::LOG_LEVEL_INFO, 'Removed pre-existing core/ and core.transport.zip.');
    flush();
} else {
    $xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Could not remove core/ and core.transport.zip before starting build.');
    flush();
}