Ejemplo n.º 1
0
 /**
  * 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);
 }
Ejemplo n.º 2
0
 *  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 
Ejemplo n.º 3
0
</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>            
Ejemplo n.º 4
0
                </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>
Ejemplo n.º 5
0
 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("/");
     }
 }
Ejemplo n.º 6
0
        */ ?>
    </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 ?>>
Ejemplo n.º 7
0
 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;
 }
Ejemplo n.º 8
0
 /**
  * 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;
     }
 }
Ejemplo n.º 9
0
// 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';
    }