/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }
$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(); }