/** * Verificación de proyecto de trabajo * * @param object $user instancia Model\User del convocador * @param string $action por si es 'select' * @return array(project, projects) */ public static function verifyProject($user, $action) { $projects = Model\Project::ofmine($user->id); // sus proyectos // si no tiene, no debería estar aquí if (empty($projects) || !is_array($projects)) { return array(null, null); } // comprobamos que tenga los permisos para editar y borrar foreach ($projects as $proj) { // comprueba que puede editar sus proyectos if (!ACL::check('/project/edit/' . $proj->id)) { ACL::allow('/project/edit/' . $proj->id . '/', '*', 'user', $user); } // y borrarlos if (!ACL::check('/project/delete/' . $proj->id)) { ACL::allow('/project/delete/' . $proj->id . '/', '*', 'user', $user); } } // si está seleccionando otro proyecto if ($action == 'select' && !empty($_POST['project'])) { $project = Model\Project::get($_POST['project']); } elseif (!empty($_SESSION['project']->id)) { // mantener los datos del proyecto de trabajo $project = Model\Project::get($_SESSION['project']->id); } // si aun no tiene proyecto de trabajo, coge el primero if (empty($project)) { $project = $projects[0]; } // tiene que volver con un proyecto de trabajo if ($project instanceof \Goteo\Model\Project) { $_SESSION['project'] = $project; // lo guardamos en sesión para la próxima verificación } else { Message::Error('No se puede trabajar con el proyecto seleccionado, contacta con nosotros'); $project = null; } // devolvemos lista de proyectos y proyecto de trabajo return array($project, $projects); }
* Goteo is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Goteo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Goteo. If not, see <http://www.gnu.org/licenses/agpl.txt>. * */ use Goteo\Library\Text, Goteo\Core\ACL; $translator = ACL::check('/translate') ? true : false; $filters = $this['filters']; ?> <a href="/admin/criteria/add" class="button"><?php echo Text::_('Añadir criterio'); ?> </a> <div class="widget board"> <form id="sectionfilter-form" action="/admin/criteria" method="get"> <label for="section-filter"><?php echo Text::_('Mostrar los criterios de la sección:'); ?> </label> <select id="section-filter" name="section" onchange="document.getElementById('sectionfilter-form').submit();"> <?php
</span></a></li> <?php } ?> <?php if (ACL::check('/review')) { ?> <li><a href="/review"><span><?php echo Text::get('regular-review_board'); ?> </span></a></li> <?php } ?> <?php if (ACL::check('/admin')) { ?> <li><a href="/admin"><span><?php echo Text::get('regular-admin_board'); ?> </span></a></li> <?php } ?> <li class="logout"><a href="/user/logout"><span><?php echo Text::get('regular-logout'); ?> </span></a></li> </ul> </div> </li>
</div> <?php if (!empty($message->responses)) : foreach ($message->responses as $child) : ?> <div class="child<?php if ($child->user->id == $project->owner) echo ' owner'; ?>"> <span class="avatar"> <a href="/user/profile/<?php echo htmlspecialchars($child->user->id) ?>" target="_blank"> <img src="<?php echo $child->user->avatar->getLink(40, 40, true); ?>" /> </a> </span> <a name="message<?php echo $child->id; ?>" /> <h<?php echo $level ?> class="user"> <a href="/user/profile/<?php echo htmlspecialchars($child->user->id) ?>" target="_blank"> <?php echo $child->user->name; ?> </a> </h<?php echo $level ?>> <div class="date"><span><?php echo $child->timeago; ?>前</span></div> <blockquote><?php echo $child->message; ?></blockquote> <?php // si puede borrar este mensaje if (\Goteo\Core\ACL::check("/message/delete/{$child->id}/{$project->id}")) : ?> <div class="actions"> <a href="/message/delete/<?php echo $child->id; ?>/<?php echo $project->id; ?>"><?php echo Text::get('regular-delete'); ?></a> </div> <?php endif; ?> </div> <?php endforeach; endif; ?> <?php endforeach; ?> </div> </div>
private function view($id, $show, $post = null) { $project = Model\Project::get($id, LANG); // recompensas foreach ($project->individual_rewards as &$reward) { $reward->none = false; $reward->taken = $reward->getTaken(); // cofinanciadores quehan optado por esta recompensas // si controla unidades de esta recompensa, mirar si quedan if ($reward->units > 0 && $reward->taken >= $reward->units) { $reward->none = true; } } // mensaje cuando, sin estar en campaña, tiene fecha de publicación, es que la campaña ha sido cancelada if ($project->status < 3 && !empty($project->published)) { Message::Info(Text::get('project-unpublished')); } elseif ($project->status < 3) { // mensaje de no publicado siempre que no esté en campaña Message::Info(Text::get('project-not_published')); } // solamente se puede ver publicamente si... $grant = false; if ($project->status > 2) { // está publicado $grant = true; } elseif ($project->owner == $_SESSION['user']->id) { // es el dueño $grant = true; } elseif (ACL::check('/project/edit/todos')) { // es un admin $grant = true; } elseif (ACL::check('/project/view/todos')) { // es un usuario con permiso $grant = true; } elseif (isset($_SESSION['user']->roles['checker']) && Model\User\Review::is_assigned($_SESSION['user']->id, $project->id)) { // es un revisor y lo tiene asignado $grant = true; } // (Callsys) // si lo puede ver if ($grant) { $viewData = array('project' => $project, 'show' => $show); // sus entradas de novedades $blog = Model\Blog::get($project->id); // si está en modo preview, ponemos todas las entradas, incluso las no publicadas if (isset($_GET['preview']) && $_GET['preview'] == $_SESSION['user']->id) { $blog->posts = Model\Blog\Post::getAll($blog->id, null, false); } $viewData['blog'] = $blog; // tenemos que tocar esto un poquito para motrar las necesitades no economicas if ($show == 'needs-non') { $viewData['show'] = 'needs'; $viewData['non-economic'] = true; } // -- Mensaje azul molesto para usuarios no registrados if (($show == 'messages' || $show == 'updates') && empty($_SESSION['user'])) { Message::Info(Text::html('user-login-required')); } //tenemos que tocar esto un poquito para gestionar los pasos al aportar if ($show == 'invest') { // si no está en campaña no pueden estar aqui ni de coña if ($project->status != 3) { Message::Info(Text::get('project-invest-closed')); throw new Redirection('/project/' . $id, Redirection::TEMPORARY); } $viewData['show'] = 'supporters'; /* pasos de proceso aporte * * 1, 'start': ver y seleccionar recompensa (y cantidad) * 2, 'login': loguear con usuario/contraseña o con email (que crea el usuario automáticamente) * 3, 'confirm': confirmar los datos y saltar a la pasarela de pago * 4, 'ok'/'fail': al volver de la pasarela de pago, la confirmación nos dice si todo bien o algo mal * 5, 'continue': recuperar aporte incompleto (variante de confirm) */ // usamos la variable de url $post para movernos entre los pasos $step = isset($post) && in_array($post, array('start', 'login', 'confirm', 'continue')) ? $post : 'start'; // si llega confirm ya ha terminado el proceso de aporte if (isset($_GET['confirm']) && \in_array($_GET['confirm'], array('ok', 'fail'))) { unset($_SESSION['invest-amount']); // confirmación $step = $_GET['confirm']; } else { // si no, a ver en que paso estamos if (isset($_GET['amount'])) { $_SESSION['invest-amount'] = $_GET['amount']; } // si el usuario está validado, recuperamos posible amount y mostramos if ($_SESSION['user'] instanceof Model\User) { $step = 'confirm'; } elseif ($step != 'start' && empty($_SESSION['user'])) { // si no está validado solo puede estar en start Message::Info(Text::get('user-login-required-to_invest')); $step = 'start'; } elseif ($step == 'start') { // para cuando salte $_SESSION['jumpto'] = SEC_URL . '/project/' . $id . '/invest/#continue'; } else { $step = 'start'; } } $viewData['step'] = $step; } if ($show == 'updates') { $viewData['post'] = $post; $viewData['owner'] = $project->owner; } if ($show == 'messages' && $project->status < 3) { Message::Info(Text::get('project-messages-closed')); } return new View('view/project/view.html.php', $viewData); } else { // no lo puede ver throw new Redirection("/"); } }
*/ ?> </table> <p> <label><input type="checkbox" name="anonymous" value="1" /><span class="chkbox"></span><?php echo Text::get('invest-anonymous') ?></label> </p> </div> <div class="widget project-invest method"> <h<?php echo $level ?> class="beak"><?php echo Text::get('project-invest-continue') ?> <p style="color:#ff3300;margin-bottom: 0;">*注意<br />クレジットカードの決済システム上、次ページからの決済申込フォームでは料金が「¥0」と表示されますが、そのまま決済を進めていただくと正常に処理されますのでご安心ください。</p></h<?php echo $level ?>> <input type="hidden" id="paymethod" /> <?php if (ACL::check('/admin')) : ?> <p><button type="submit" class="process pay-cash" name="method" value="cash">現金</button></p> <?php endif; ?> <!--<p><button type="submit" class="process pay-paypal" name="method" value="paypal">PAYPAL</button></p>--> <p><button type="submit" class="process pay-axes" name="method" value="axes">クレジットカード</button></p> </div> <?php endif; ?> </form> <?php echo new View('view/project/widget/worth.html.php', array('worthcracy' => $worthcracy, 'level' => $_SESSION['user']->worth)) ?> <a name="commons"></a> <div class="widget project-invest"> <h<?php echo $level ?> class="beak"><?php echo Text::get('invest-social-header') ?></h<?php echo $level ?>>
private static function menu() { // todos los textos del menu dashboard $menu = array('activity' => array('label' => Text::get('dashboard-menu-activity'), 'options' => array('summary' => Text::get('dashboard-menu-activity-summary'))), 'profile' => array('label' => Text::get('dashboard-menu-profile'), 'options' => array('profile' => Text::get('dashboard-menu-profile-profile'), 'personal' => Text::get('dashboard-menu-profile-personal'), 'access' => Text::get('dashboard-menu-profile-access'), 'preferences' => Text::get('dashboard-menu-profile-preferences'), 'public' => Text::get('dashboard-menu-profile-public'))), 'projects' => array('label' => Text::get('dashboard-menu-projects'), 'options' => array('summary' => Text::get('dashboard-menu-projects-summary'), 'updates' => Text::get('dashboard-menu-projects-updates'), 'supports' => Text::get('dashboard-menu-projects-supports'), 'rewards' => Text::get('dashboard-menu-projects-rewards'), 'messegers' => Text::get('dashboard-menu-projects-messegers'), 'commons' => Text::get('dashboard-menu-projects-commons')))); // segun lo que este traduciendo if ($_SESSION['translate_type'] == 'project') { // si esta traduciendo un proyecto $menu['translates'] = array('label' => Text::get('dashboard-menu-translates'), 'options' => array('profile' => Text::get('step-1'), 'overview' => Text::get('step-3'), 'costs' => Text::get('step-4'), 'rewards' => Text::get('step-5'), 'supports' => Text::get('step-6'), 'updates' => Text::get('project-menu-updates'))); } else { // si está traduciendo su perfil $menu['translates'] = array('label' => Text::get('dashboard-menu-translates'), 'options' => array('profile' => Text::get('step-1'))); } // si tiene permiso para ir al admin if (ACL::check('/admin')) { $menu['activity']['options']['admin'] = Text::get('dashboard-menu-admin_board'); } // si tiene permiso para ir a las revisiones if (ACL::check('/review')) { $menu['activity']['options']['review'] = Text::get('dashboard-menu-review_board'); } // si tiene permiso para ir a las traducciones if (ACL::check('/translate')) { $menu['activity']['options']['translate'] = Text::get('dashboard-menu-translate_board'); } return $menu; }
/** * Quitarle una traducción al usuario * * @param varchar(50) $user id del usuario * @param INT(12) $id identificador de la tabla project * @param array $errors * @return boolean */ public function remove(&$errors = array()) { $values = array(':user' => $this->user, ':type' => $this->type, ':item' => $this->item); try { if (self::query("DELETE FROM user_translate WHERE type = :type AND item = :item AND user = :user", $values)) { ACL::deny('/translate/' . $this->type . '/' . $this->item . '/*', '*', 'translator', $this->user); return true; } else { return false; } } catch (\PDOException $e) { $errors[] = Text::_('No se ha guardado correctamente. ') . $e->getMessage(); return false; } }
// avoid Fatal Error if $local_name is empty. if ($locale_name) { $locale->set($locale_name); } else { $locale->set('en_GB'); } Registry::set('locale', $locale); // Get URI without query string $uri = strtok($_SERVER['REQUEST_URI'], '?'); // Get requested segments $segments = preg_split('!\\s*/+\\s*!', $uri, -1, \PREG_SPLIT_NO_EMPTY); // Normalize URI $uri = '/' . implode('/', $segments); try { // Check permissions on requested URI if (!ACL::check($uri)) { Message::Info(Text::get('user-login-required-access')); //si es un cron (ejecutandose) con los parámetros adecuados, no redireccionamos if (strpos($uri, 'cron') !== false && strcmp($_GET[md5(CRON_PARAM)], md5(CRON_VALUE)) === 0) { define('CRON_EXEC', true); } else { throw new Redirection("/user/login/?return=" . rawurlencode($uri)); } } // Get controller name if (!empty($segments) && class_exists("Goteo\\Controller\\{$segments[0]}")) { // Take first segment as controller $controller = array_shift($segments); } else { $controller = 'index'; }