public function indexAction(\Difra\Param\AnyString $link = null) { if (!is_null($link)) { // страница анонса события $this->eventRoot = $this->root->appendChild($this->xml->createElement('announcements-event-view')); $this->eventRoot->setAttribute('view', true); $this->_showEvent(rawurldecode($link->val())); } else { if (\Difra\Plugger::isEnabled('Blogs')) { $Group = \Difra\Plugins\Blogs\Group::current(); if ($Group) { // страница анонсов группы $this->eventRoot = $this->root->appendChild($this->xml->createElement('groupEvents')); $groupId = $Group->getId(); $this->_showGroupEvents($groupId); } else { throw new \Difra\View\HttpError(404); return; } } else { // общая страница анонсов $this->eventRoot = $this->root->appendChild($this->xml->createElement('allEvents')); $this->_showByPriority(); } } }
/** * Disable plugin * * @param \Difra\Param\AnyString $name */ public function disableAjaxAction(\Difra\Param\AnyString $name) { if (!\Difra\Plugger::turnOff($name->val())) { \Difra\Ajaxer::notify(\Difra\Locales::get('adm/plugins/failed')); } \Difra\Ajaxer::refresh(); }
public function editAction(\Difra\Param\AnyInt $id) { $editNode = $this->root->appendChild($this->xml->createElement('announcementsEdit')); \Difra\Plugins\Announcements::getInstance()->getByIdXML($id->val(), $editNode); if (\Difra\Plugger::getInstance()->isEnabled('blogs')) { \Difra\Plugins\Blogs\Group::getNewGroupsXml($editNode, 0, false); } }
public function indexAction() { /** @var \DOMElement $statusNode */ $statusNode = $this->root->appendChild($this->xml->createElement('status')); // stats/difra $statusNode->setAttribute('difra', \Difra\Envi\Version::getFrameworkVersion(true)); $statusNode->setAttribute('cache', \Difra\Cache::getInstance()->adapter); $statusNode->setAttribute('webserver', $_SERVER['SERVER_SOFTWARE']); $statusNode->setAttribute('phpversion', phpversion()); // stats/plugins /** @var $pluginsNode \DOMElement */ $plugins = \Difra\Plugger::getAllPlugins(); $enabledPlugins = $disabledPlugins = []; foreach ($plugins as $plugin) { if ($plugin->isEnabled()) { $enabledPlugins[] = $plugin->getName(); } else { $disabledPlugins[] = $plugin->getName(); } } $statusNode->setAttribute('enabledPlugins', implode(', ', $enabledPlugins)); $statusNode->setAttribute('disabledPlugins', implode(', ', $disabledPlugins)); // stats/extensions /** @var $extensionsNode \DOMElement */ $extensionsNode = $statusNode->appendChild($this->xml->createElement('extensions')); $extensions = get_loaded_extensions(); $extensionsOk = []; $extensionsExtra = []; $extensionsRequired = ['dom', 'SimpleXML', 'xsl', 'zlib', 'ctype', 'json', 'mbstring', 'Reflection', 'Phar', 'imagick']; foreach ($extensions as $extension) { if (in_array($extension, $extensionsRequired)) { $extensionsOk[] = $extension; unset($extensionsRequired[array_search($extension, $extensionsRequired)]); } else { $extensionsExtra[] = $extension; } } natcasesort($extensionsOk); natcasesort($extensionsRequired); natcasesort($extensionsExtra); $extensionsNode->setAttribute('ok', implode(', ', $extensionsOk)); $extensionsNode->setAttribute('required', implode(', ', $extensionsRequired)); $extensionsNode->setAttribute('extra', implode(', ', $extensionsExtra)); /** @var $permNode \DOMElement */ $permNode = $statusNode->appendChild($statusNode->ownerDocument->createElement('permissions')); if (!is_dir(DIR_DATA)) { $permNode->setAttribute('data', 'Directory ' . DIR_DATA . ' does not exist!'); } elseif (!is_writable(DIR_DATA)) { $permNode->setAttribute('data', 'Directory ' . DIR_DATA . ' is not writeable!'); } }
/** * Get contents of bin/db.sql files * @return string */ public static function getGoalSQL() { $paths = \Difra\Plugger::getPaths(); $paths[] = DIR_FW; $paths[] = DIR_ROOT; $tables = []; foreach ($paths as $path) { if (is_readable($path . '/bin/db.sql')) { $tables[] = file_get_contents($path . '/bin/db.sql'); } if (is_dir($path . '/bin/db')) { $files = scandir($path . '/bin/db'); if (!empty($files)) { foreach ($files as $file) { if (is_readable($path . '/bin/db/' . $file) and $file[0] !== '.') { $tables[] = file_get_contents($path . '/bin/db/' . $file); } } } } } return implode("\n", $tables); }
/** * Recover password (ajax) * @param AjaxString $login Login or e-mail * @param AjaxString $captcha * @throws Exception */ public function indexAjaxAction(AjaxString $login, AjaxString $captcha) { // show recover form if (is_null($login)) { $this->root->appendChild($this->xml->createElement('recover')); Ajaxer::display(View::render($this->xml, 'auth-ajax', true)); return; } $error = false; // login's empty if ($login->val() === '') { Ajaxer::required('login'); $error = true; } if (!$captcha or $captcha->val() == '') { Ajaxer::required('captcha'); $error = true; } /** @var \Difra\Plugins\Capcha $captchaClass */ $captchaClass = \Difra\Plugger::getClass('captcha'); if (!$captchaClass::getInstance()->verifyKey($captcha->val())) { Ajaxer::invalid('captcha'); $error = true; } if ($error) { return; } // recover try { Recover::send($login->val()); Ajaxer::close(); Ajaxer::notify(Locales::get('auth/login/recovered')); } catch (Exception $ex) { Ajaxer::status('email', Locales::get('auth/login/' . $ex->getMessage()), 'problem'); } }
public function editAction(\Difra\Param\AnyInt $id) { $editNode = $this->root->appendChild($this->xml->createElement('announcementsEdit')); \Difra\Plugins\Announcements::getInstance()->getByIdXML($id->val(), $editNode); $additionalsFieldsNode = $editNode->appendChild($this->xml->createElement('additionalsFields')); $categoryNode = $editNode->appendChild($this->xml->createElement('announceCateroty')); \Difra\Plugins\Announcements\Additionals::getListXML($additionalsFieldsNode); \Difra\Plugins\Announcements\Category::getList($categoryNode); $locationsNode = $editNode->appendChild($this->xml->createElement('locations')); \Difra\Plugins\Announcements::getInstance()->getLocationsXML($locationsNode); if (\Difra\Plugger::isEnabled('blogs')) { \Difra\Plugins\Blogs\Group::getNewGroupsXml($editNode, 0, false); } }
/** * Validate captcha * @return string */ private function verifyCaptcha() { /** @var \Difra\Plugins\Capcha $captcha */ $captcha = Plugger::getClass('captcha'); if (!$this->ignoreEmpty) { if (!$this->captcha) { return $this->failures['capcha'] = self::REGISTER_CAPTCHA_EMPTY; } elseif (!$captcha::getInstance()->verifyKey($this->captcha)) { return $this->failures['capcha'] = self::REGISTER_CAPTCHA_INVALID; } else { return $this->successful['capcha'] = self::REGISTER_CAPTCHA_OK; } } elseif ($this->captcha !== '') { if (!$captcha::getInstance()->verifyKey($this->captcha)) { return $this->failures['capcha'] = self::REGISTER_CAPTCHA_INVALID; } } return null; }
/** * Возвращает объект анонса события в xml * @param \DOMNode $node */ public function getXML($node) { $Locale = Locales::getInstance(); $eventNode = $node->appendChild($node->ownerDocument->createElement('event')); $eventNode->appendChild($node->ownerDocument->createElement('id', $this->id)); $eventNode->appendChild($node->ownerDocument->createElement('user', $this->user)); $eventNode->appendChild($node->ownerDocument->createElement('group', $this->group)); $eventNode->appendChild($node->ownerDocument->createElement('category', $this->category)); $eventNode->appendChild($node->ownerDocument->createElement('location', $this->location)); $eventNode->appendChild($node->ownerDocument->createElement('title', htmlspecialchars($this->title))); $eventNode->appendChild($node->ownerDocument->createElement('link', $this->id . '-' . $this->link)); $eventNode->appendChild($node->ownerDocument->createElement('shortDescription', $this->shortDescription)); $eventNode->appendChild($node->ownerDocument->createElement('description', $this->description)); $eventNode->appendChild($node->ownerDocument->createElement('status', $this->getStatus())); if (!is_null($this->fromEventDate) && $this->fromEventDate != '' && $this->fromEventDate != '0000-00-00' && $this->fromEventDate != 'null') { $fromEventDate = $Locale->getDateFromMysql($this->fromEventDate . ' 00:00:00'); $dateNode = $eventNode->appendChild($node->ownerDocument->createElement('fromEventDate', $fromEventDate)); $this->reFormateDate($dateNode, $this->fromEventDate); $eventNode->appendChild($node->ownerDocument->createElement('fromToEventDiff', $this->getEventPeriodDays())); } $dateNode = $eventNode->appendChild($node->ownerDocument->createElement('eventDate', $Locale->getDateFromMysql($this->eventDate . ' 00:00:00'))); $this->reFormateDate($dateNode, $this->eventDate); $dateNode = $eventNode->appendChild($node->ownerDocument->createElement('beginDate', $Locale->getDateFromMysql($this->beginDate . ' 00:00:00'))); $this->reFormateDate($dateNode, $this->beginDate); $dateNode = $eventNode->appendChild($node->ownerDocument->createElement('endDate', $Locale->getDateFromMysql($this->endDate . ' 00:00:00'))); $this->reFormateDate($dateNode, $this->endDate); $isoDateNode = $eventNode->appendChild($eventNode->ownerDocument->createElement('isoDate')); $this->_getIsoDate($isoDateNode); $eventNode->appendChild($node->ownerDocument->createElement('visible', $this->visible)); $eventNode->appendChild($node->ownerDocument->createElement('priority', $this->priority)); $eventNode->appendChild($node->ownerDocument->createElement('modified', $Locale->getDateFromMysql($this->modified, true))); $eventNode->appendChild($node->ownerDocument->createElement('statusInDays', $this->statusInDays)); /** @var \DOMElement $userNode */ $userNode = $eventNode->appendChild($node->ownerDocument->createElement('userData')); if (!empty($this->userData)) { foreach ($this->userData as $k => $value) { $userNode->setAttribute($k, $value); } } $this->getAdditionalXML($eventNode); $this->getScheduleXML($eventNode); $this->getLocationXML($eventNode); if (Plugger::isEnabled('blogs') && !empty($this->groupData)) { /** @var \DOMElement $groupNode */ $groupNode = $eventNode->appendChild($node->ownerDocument->createElement('groupData')); foreach ($this->groupData as $k => $value) { $groupNode->setAttribute($k, $value); } } }
/** * Find all possible instances for selected resource * Warning: this is slow! Do not use it except for administrator area or cron scripts etc. * @return array|bool */ public function findInstances() { $parents = [DIR_FW . $this->type, DIR_ROOT . $this->type, DIR_SITE . $this->type]; $paths = Plugger::getPaths(); if (!empty($paths)) { foreach ($paths as $dir) { $parents[] = "{$dir}/{$this->type}"; } } if (empty($parents)) { return false; } $instances = []; foreach ($parents as $path) { if (!is_dir($path)) { continue; } $dir = opendir($path); while (false !== ($subdir = readdir($dir))) { if ($subdir[0] != '.' and is_dir($path . '/' . $subdir)) { $instances[$subdir] = 1; } } } return array_keys($instances); }
public static function checkDeleteRights($id, $module) { $db = \Difra\MySQL::getInstance(); $parentOwner = false; switch ($module) { case 'blogs': $query = "SELECT bl.`user`, bl.`group`\n\t\t\t\t\t\tFROM `blogs_posts` bp\n\t\t\t\t\t\tRIGHT JOIN `blogs` AS `bl` ON bl.`id`=bp.`blog`\n\t\t\t\t\t\tWHERE bp.`id`='" . intval($id) . "'"; break; case 'albums': $query = "SELECT al.`group_id` as `group`\n\t\t\t\t\t\tFROM `albums` al\n\t\t\t\t\t\tWHERE al.`id` = '" . intval($id) . "'"; break; default: $query = false; } if ($query) { $parentOwner = $db->fetchRow($query); } $groups = []; $Auth = \Difra\Auth::getInstance(); $userId = $Auth->getEmail(); if ($userId && \Difra\Plugger::getInstance()->isEnabled('blogs')) { $groups = \Difra\Plugins\Blogs\Group::getOwnedGroupsIds($userId); } $commentData = $db->fetchRow("SELECT `user` FROM `{$module}_comments` WHERE `id`='" . intval($id) . "'"); if ($userId && ($userId == $commentData['user'] || $Auth->isModerator())) { return true; } elseif ($userId && $parentOwner && in_array($parentOwner['group'], $groups)) { return true; } elseif ($userId && $parentOwner && isset($parentOwner['user']) && $parentOwner['user'] == $userId) { return true; } return false; }
/** * Get list of controllers directories * @return string[] */ public static function getControllerPaths() { static $controllerDirs = null; if (!is_null($controllerDirs)) { return $controllerDirs; } $controllerDirs = Plugger::getPaths(); $controllerDirs = array_merge([DIR_SITE, DIR_ROOT, DIR_FW], $controllerDirs); foreach ($controllerDirs as $k => $v) { $controllerDirs[$k] = $v . 'controllers/'; } return $controllerDirs; }