/** * Returns unique token for method and params * @param string $control * @param string $method * @param array $params * @return string */ public function getCsrfToken($control, $method, $params) { $session = $this->getSession('Nextras.Application.UI.SecuredLinksPresenterTrait'); if (!isset($session->token)) { $session->token = Nette\Utils\Random::generate(); } $params = Nette\Utils\Arrays::flatten($params); $params = implode('|', array_keys($params)) . '|' . implode('|', array_values($params)); return substr(md5($control . $method . $params . $session->token . $this->getSession()->getId()), 0, 8); }
public function formatTemplateFiles(Presenter $presenter) { $name = $presenter->getName(); $view = $presenter->view; $_presenter = substr($name, strrpos(':' . $name, ':')); $directories = $this->getAdjustedDirectories($presenter); $list = array(); foreach ($directories as $dir) { $list[] = $this->getTemplateFiles("{$dir}/presenters", $_presenter, $view); $list[] = $this->getTemplateFiles($dir, $_presenter, $view); } return Arrays::flatten($list); }
/** * Sets options and option groups from which to choose. * @return self */ public function setItems(array $items, $useKeys = TRUE) { if (!$useKeys) { foreach ($items as $key => $value) { unset($items[$key]); if (is_array($value)) { foreach ($value as $val) { $items[$key][(string) $val] = $val; } } else { $items[(string) $value] = $value; } } } $this->options = $items; return parent::setItems(Nette\Utils\Arrays::flatten($items, TRUE)); }
/** * @param string $fileNamePrefix * @param bool $removeBackupFileAtTheEnd * @throws \Exception * @throws IOException * @return ResultObject[] */ public function backup($fileNamePrefix = null, $removeBackupFileAtTheEnd = false) { $storagePath = $this->prepareStoragePath($this->backupTempPath); $file = new DatabaseBackupFile($storagePath); if (!empty($fileNamePrefix)) { $file->setNamePrefix($fileNamePrefix); } $this->mysqlDump->save($file->getFilePath()); $resultObjects = []; /** @var IDatabaseBackupHandler $handler */ foreach ($this->backupHandlers as $handler) { $results = $handler->process($file); $resultObjects = array_merge($resultObjects, $results); } if ($removeBackupFileAtTheEnd === true) { $this->removeBackupFile($file); } return Arrays::flatten($resultObjects); }
/** * Sets options and option groups from which to choose. * * @return self */ public function setItems(array $items, $useKeys = TRUE) { if (!$useKeys) { $res = array(); foreach ($items as $key => $value) { unset($items[$key]); if (is_array($value)) { foreach ($value as $val) { $res[$key][(string) $val] = $val; } } else { $res[(string) $value] = $value; } } $items = $res; } $this->options = $items; return ChoiceControl::setItems(Arrays::flatten($items, TRUE)); }
protected function addWhereComposition(array $columns, array $parameters) { if ($this->driver->isSupported(ISupplementalDriver::SUPPORT_MULTI_COLUMN_AS_OR_COND)) { $conditionFragment = '(' . implode(' = ? AND ', $columns) . ' = ?) OR '; $condition = substr(str_repeat($conditionFragment, count($parameters)), 0, -4); return $this->addWhere($condition, Nette\Utils\Arrays::flatten($parameters)); } else { return $this->addWhere('(' . implode(', ', $columns) . ') IN', $parameters); } }
/** * Renders HTML code for custom panel. * * @return string */ public function getPanel() { $h = 'htmlSpecialChars'; $panel = array(); if (!empty($this->untranslated)) { $panel[] = $this->renderUntranslated(); } if (!empty($this->onRequestLocaleSnapshot)) { if (!empty($panel)) { $panel[] = '<br><br>'; } $panel[] = '<h2>Locale resolution</h2>'; $panel[] = '<p>Order of locale resolvers and final locale for each request</p>'; foreach ($this->onRequestLocaleSnapshot as $i => $snapshot) { $s = $i > 0 ? '<br>' : ''; /** @var Request[] $snapshot */ $params = $snapshot['request']->getParameters(); $s .= '<tr><th width="10px"> </th>' . '<th>' . $h($snapshot['request']->getPresenterName() . (isset($params['action']) ? ':' . $params['action'] : '')) . '</th>' . '<th>' . $h($snapshot['locale']) . '</th></tr>'; $l = 1; foreach ($snapshot['resolvers'] as $name => $resolvedLocale) { $s .= '<tr><td>' . $l++ . '.</td><td>' . $h($name) . '</td><td>' . $h($resolvedLocale) . '</td></tr>'; } $panel[] = '<table style="width:100%">' . $s . '</table>'; } } if (!empty($this->resources)) { if (!empty($panel)) { $panel[] = '<br><br>'; } $panel[] = '<h2>Loaded resources</h2>'; $panel[] = $this->renderResources($this->resources); } if (!empty($this->ignoredResources)) { if (!empty($panel)) { $panel[] = '<br><br>'; } $panel[] = '<h2>Ignored resources</h2>'; $panel[] = '<p>Whitelist config: ' . implode(', ', array_map($h, $this->localeWhitelist)) . '</p>'; $panel[] = $this->renderResources($this->ignoredResources); } return empty($panel) ? '' : '<h1>Missing translations: ' . count(array_unique($this->untranslated)) . ', Resources: ' . count(Nette\Utils\Arrays::flatten($this->resources)) . '</h1>' . '<div class="nette-inner tracy-inner kdyby-TranslationPanel" style="min-width:500px">' . implode($panel) . '</div>' . '<style> #nette-debug .kdyby-TranslationPanel h2, #tracy-debug .kdyby-TranslationPanel h2 {font-size: 23px;} </style>'; }
file_put_contents($sessionFile, Json::encode($storedData)); //end of security check $songProvider = new SongProvider($host, $dbName, $username, $password, $songsDirectory, $webSongsDir, $port); $msg = $_GET['request']; if ($msg == 'getSongs') { $songData['songs'] = $songProvider->readNonProcessedSongs(); } else { if ($msg == 'emptyQueue') { $currentGenreId = file_get_contents($currentGenreFile); $songData['songs'] = [$songProvider->getRandomSong($currentGenreId)]; //abych měl jednoprvkové pole } } $songData['request'] = $msg; $data = null; try { $data = Json::encode($songData); } catch (JsonException $e) { // $songs = $songData['songs']; // $songsString = ''; // /** @var Song $song */ // foreach ($songs as $song) { // $songData // } $logger = new Logger(); $fileWriter = new Stream("log.txt"); $logger->addWriter($fileWriter); $logger->err("Json encoding failed: reason:" . $e->getMessage()); $logger->err('data: ' . implode(', ', Arrays::flatten($songData))); } echo $data;
/** * @param \Nette\DI\ServiceDefinition $metadataDriver * @param string $namespace * @param string|object $driver * @param string $prefix * @throws \Nette\Utils\AssertionException * @return string */ protected function processMetadataDriver(Nette\DI\ServiceDefinition $metadataDriver, $namespace, $driver, $prefix) { if (!is_string($namespace) || !Strings::match($namespace, '#^' . self::PHP_NAMESPACE . '\\z#')) { throw new Nette\Utils\AssertionException("The metadata namespace expects to be valid namespace, {$namespace} given."); } $namespace = ltrim($namespace, '\\'); if (is_string($driver) || is_array($driver)) { $paths = is_array($driver) ? $driver : array($driver); foreach ($paths as $path) { if (($pos = strrpos($path, '*')) !== FALSE) { $path = substr($path, 0, $pos); } if (!file_exists($path)) { throw new Nette\Utils\AssertionException("The metadata path expects to be an existing directory, {$path} given."); } } $driver = new Statement(self::ANNOTATION_DRIVER, is_array($paths) ? $paths : array($paths)); } $impl = $driver instanceof \stdClass ? $driver->value : ($driver instanceof Statement ? $driver->entity : (string) $driver); list($driver) = CacheHelpers::filterArgs($driver); /** @var Statement $driver */ if (isset($this->metadataDriverClasses[$impl])) { $driver->entity = $this->metadataDriverClasses[$impl]; } if (is_string($driver->entity) && substr($driver->entity, 0, 1) === '@') { $metadataDriver->addSetup('addDriver', array($driver->entity, $namespace)); return $driver->entity; } if ($impl === self::ANNOTATION_DRIVER) { $driver->arguments = array(Nette\Utils\Arrays::flatten($driver->arguments), 2 => $this->prefix('@cache.' . $prefix . '.metadata')); } $serviceName = $this->prefix($prefix . '.driver.' . str_replace('\\', '_', $namespace) . '.' . str_replace('\\', '_', $impl) . 'Impl'); $this->getContainerBuilder()->addDefinition($serviceName)->setClass('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver')->setFactory($driver->entity, $driver->arguments)->setAutowired(FALSE)->setInject(FALSE); $metadataDriver->addSetup('addDriver', array('@' . $serviceName, $namespace)); return '@' . $serviceName; }
/** * Sets options * * @return self */ public function setItems(array $items, $useKeys = TRUE) { $imageItems = $this->getImageItems($items); return parent::setItems(Arrays::flatten($imageItems, TRUE)); }
/** * Renders HTML code for custom panel. * * @return string */ public function getPanel() { if (!$this->renderPanel) { return ''; } if (empty($this->events)) { return NULL; } $visited = array(); $h = 'htmlspecialchars'; $s = ''; $s .= $this->renderPanelDispatchLog($visited); $s .= $this->renderPanelEvents($visited); $s .= $this->renderPanelListeners($visited); if ($s) { $s .= '<tr class="blank"><td colspan=2> </td></tr>'; } $s .= $this->renderPanelDispatchTree(); $totalEvents = count($this->listenerIds); $totalListeners = count(array_unique(Arrays::flatten($this->listenerIds))); return '<style>' . $this->renderStyles() . '</style>' . '<h1>' . $h($totalEvents) . ' registered events, ' . $h($totalListeners) . ' registered listeners</h1>' . '<div class="nette-inner tracy-inner nette-KdybyEventsPanel"><table>' . $s . '</table></div>'; }
/** * @return object[] */ private function getLoadedEntities() { $em = $this->getEntityManager(); $UoW = $em->getUnitOfWork(); $im = $UoW->getIdentityMap(); return array_merge($UoW->getScheduledEntityDeletions(), $UoW->getScheduledEntityInsertions(), !empty($im[$this->_entityName]) ? Arrays::flatten($im[$this->_entityName]) : array()); }
public function indexAction() { $upload_id = (int) $this->getParam('id'); // Grab the submission information (Which includes the uploader's info and comments) $upload = Upload::find($upload_id); if (!$upload instanceof Upload) { throw new \FA\Exception('Upload not found!'); } $view = $this->view; $view->upload = $upload; $view->is_favorited = false ? '+Favorite' : '-Favorite'; $view->comment_csrf_str = $this->csrf->generate('_upload_comments'); $view->upload_csrf_str = $this->csrf->generate('_upload_content'); $view->file_mime = $upload->getMIME(); $view->keyword_arr = $upload->getKeywords(); $view->created_at = \FA\Utilities::fa_date_format($upload->created_at, $upload->user->getTimezoneDiff()); if ($this->user != NULL) { // Determine if the user is the owner of the upload $view->is_owner = $upload->user->id == $this->user->id; // Get if the user prefer fullview first $view->fullview = $this->user->fullview ? 'true' : 'false'; // Apparently, Volt doesn't seem to want convert straight to string } // Comments! // Create the comment forms $form_config = $this->current_module_config->forms->upload_comment->toArray(); $form_config['action'] = $this->url->named('upload_view', array('id' => $upload->id)) . '/comment/new'; // Add the action so they can actually comment! $view->comment_form = new \FA\Form($form_config); // Reply form. Uses the same config, but different id. $form_config['action'] = ''; // No need for this. $form_config['id'] = 'reply_form'; $view->reply_form = new \FA\Form($form_config); // Edit form. Same story. $form_config['id'] = 'edit_form'; $view->edit_form = new \FA\Form($form_config); // Construct the comments $comment_ents = \Entity\UploadComment::getRepository()->findBy(array('upload_id' => $upload->id), array('id' => 'DESC')); // TODO: Move to CommentTrait for a more global use // Initialize our upload comment array $up_comments = array(); foreach ($comment_ents as $comment) { // Get the comment's parents $parent_path = array_reverse($comment->getParentPath()); // Map the array, creating new arrays along the way $results = self::_mapArray($parent_path, array($comment), 'a'); // Merge our new array with our overall one! $up_comments = array_merge_recursive($results, $up_comments); } // Flatten the array to allow Volt to run through it without issue $view->upload_comments = \Nette\Utils\Arrays::flatten($up_comments); // Only need to do these when users with access need to see these stats. if ($this->acl->isAllowed('administer all')) { $view->total_deleted_comments = 0; $view->total_deleted_comments_by_admin = 0; $view->total_deleted_comments_by_uploader = 0; $view->total_deleted_comments_by_poster = 0; // Get the total comments deleted foreach ($comment_ents as $comment) { $deleting_user = $comment->deleting_user; if ($deleting_user != NULL) { // Post has been deleted $view->total_deleted_comments++; // Determine who deleted it! if ($deleting_user->id == $comment->user_id) { // Poster deleted it! $view->total_deleted_comments_by_poster++; } elseif ($deleting_user->id == $upload->user . id) { // Uploader deleted it! $view->total_deleted_comments_by_uploader++; } elseif ($this->acl->userAllowed('administer all', $deleting_user)) { // Admin deleted it! $view->total_deleted_comments_by_admin++; } } } } // Grab the EXIF info (If any) and pass it to the view // TODO: Will need to determine if we need to include more or less information //$exif = exif_read_data($upload->getFullPath(), 'EXIF'); //$view->exif_info = ($exif ? $exif : ''); // Legacy stuff // TODO: Move this off to either ACL or some other config. Most if not all is controller specific $view->edit_duration_sec = \Entity\UploadComment::getEditDuration(); $view->STATIC_ASSET_MODIFICATION_DATE = self::STATIC_ASSET_MODIFICATION_DATE; // Assuming this is for versioning. }
/** * @param array $userData * @return bool */ protected function loadIsAdminMember(array $userData) { $flatten = Arrays::flatten($userData['memberOf']); $isAdmin = false; foreach ($this->config['adminGroups'] as $one) { $isAdmin = $isAdmin || in_array($one, $flatten); } return $isAdmin; }