Exemplo n.º 1
0
 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();
         }
     }
 }
Exemplo n.º 2
0
 /**
  * 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();
 }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
 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!');
     }
 }
Exemplo n.º 5
0
 /**
  * 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);
 }
Exemplo n.º 6
0
 /**
  * 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');
     }
 }
Exemplo n.º 7
0
 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);
     }
 }
Exemplo n.º 8
0
 /**
  * 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;
 }
Exemplo n.º 9
0
 /**
  * Возвращает объект анонса события в 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);
         }
     }
 }
Exemplo n.º 10
0
 /**
  * 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);
 }
Exemplo n.º 11
0
 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;
 }
Exemplo n.º 12
0
 /**
  * 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;
 }