/**
  * 
  * Display gitolite admin page
  * @return void
  */
 function index()
 {
     $this->wireframe->actions->add('need_help', lang('Need Help?'), Router::assemble('need_help_path'), array('onclick' => new FlyoutFormCallback('repository_created'), 'icon' => AngieApplication::getPreferedInterface() == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE) : AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE, AngieApplication::INTERFACE_PHONE)));
     $gitoliteadminpath = GitoliteAdmin::get_admin_path();
     $settings = GitoliteAdmin::get_admin_settings();
     $gitoliteadminpath = $settings['gitoliteadminpath'] == "" ? "" : $settings['gitoliteadminpath'] . "gitolite-admin/";
     $domain_name = GitoliteAdmin::get_server_name();
     $server_name = $settings['gitoliteserveradd'] == "" ? $domain_name : $settings['gitoliteserveradd'];
     $git_server_location = $settings['git_server_location'] == "" ? "local" : $settings['git_server_location'];
     $git_ssh_port = !isset($settings['git_ssh_port']) || $settings['git_ssh_port'] == "" ? 22 : $settings['git_ssh_port'];
     //$is_auto = ($settings['initialize_repo'] == "") ? "No" : $settings['initialize_repo'];
     if ($settings['gitoliteuser'] == "") {
         $gitoliteuser = "";
         $is_enable = FALSE;
     } else {
         $gitoliteuser = $settings['gitoliteuser'];
         $is_enable = TRUE;
     }
     $setup_script = GitoliteAdmin::get_setup_path();
     $empty_repositories = GitoliteAdmin::get_empty_repositories();
     if (is_array($empty_repositories) && count($empty_repositories) > 0) {
         $i = 0;
         foreach ($empty_repositories as $key => $value) {
             $srcobj = new ProjectSourceRepository($value['obj_id']);
             $empty_repositories[$i]["view_url"] = $srcobj->getViewUrl();
             $i++;
         }
     }
     $delete_url = Router::assemble('delele_repo_url');
     $this->response->assign(array('settings' => $settings, 'empty_repositories' => $empty_repositories, 'setup_script' => $setup_script, 'gitoliteuser' => $gitoliteuser, 'gitoliteadminpath' => $gitoliteadminpath, 'server_name' => $server_name, 'git_server_location' => $git_server_location, 'delete_url' => $delete_url, 'git_ssh_port' => $git_ssh_port, 'is_enable' => $is_enable));
 }
Esempio n. 2
0
/**
 * Handle on prepare project overview event
 *
 * @param NamedList $tabs
 * @param User $logged_user
 * @param Project $project
 * @param array $tabs_settings
 * @param string $interface
 */
function frosso_project_tab_handle_on_project_tabs(&$tabs, &$logged_user, &$project, &$tabs_settings, $interface)
{
    if ($interface == AngieApplication::INTERFACE_DEFAULT && Tasks::canAccess($logged_user, $project, false) && in_array('fred_pt', $tabs_settings)) {
        $tabs->addBefore('fred_pt', array('text' => "Fred PT", 'url' => Router::assemble('frosso_tab_route', array('project_slug' => $project->getSlug())), 'icon' => $interface == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16x16/tasks-tab-icon.png', TASKS_MODULE) : AngieApplication::getImageUrl('icons/listviews/tasks.png', TASKS_MODULE, AngieApplication::INTERFACE_PHONE)), 'calendar');
    }
    // if
}
 /**
  * Log user in
  */
 function login()
 {
     $params = $this->request->get('params', false);
     if ($params) {
         $rsa = new Crypt_RSA();
         $my_pub_key = ConfigOptions::getValue('frosso_auth_my_pub_key');
         $my_pri_key = ConfigOptions::getValue('frosso_auth_my_pri_key');
         $rsa->loadKey($my_pri_key);
         $decrypted_params = $rsa->decrypt($params);
         if ($decrypted_params) {
             list($email, $token, $timestamp) = explode(';', $decrypted_params);
             if ($email && $token && $timestamp) {
                 if ($token == ConfigOptions::getValue('frosso_auth_my_pri_token') && time() - 60 * 10 < $timestamp && $timestamp < time() + 60 * 10) {
                     Authentication::useProvider('FrossoProvider', false);
                     Authentication::getProvider()->initialize(array('sid_prefix' => AngieApplication::getName(), 'secret_key' => AngieApplication::getAdapter()->getUniqueKey()));
                     Authentication::getProvider()->authenticate($email);
                 } else {
                     $this->response->forbidden();
                 }
                 // token non valido
             } else {
                 $this->response->badRequest(array('message' => 'Parametri non '));
             }
             // parametri non validi
         } else {
             $this->response->badRequest(array('message' => 'Parametri non validi'));
         }
     } else {
         $this->response->badRequest(array('message' => 'Parametri non settati'));
     }
     // parametri non settati
 }
 /**
  * List public keys in inline tabs
  * @return void
  */
 function getpublickeys()
 {
     $active_user = $this->active_user;
     $user_public_keys = GitoliteAc::fetch_keys($active_user->getId());
     $is_gitolite = GitoliteAdmin::is_gitolite();
     $this->smarty->assign(array('user_public_keys' => $user_public_keys, 'icon' => AngieApplication::getImageUrl('layout/button-add.png', ENVIRONMENT_FRAMEWORK, AngieApplication::getPreferedInterface()), 'delete_icon' => AngieApplication::getImageUrl('icons/12x12/delete.png', ENVIRONMENT_FRAMEWORK, AngieApplication::getPreferedInterface()), 'add_url' => Router::assemble('add_public_keys', array('company_id' => $active_user->getCompanyId(), 'user_id' => $active_user->getId())), 'del_url' => $this->active_user->getViewUrl(), 'is_gitolite' => $is_gitolite));
 }
Esempio n. 5
0
/**
 * Handle on_reports_panel event
 *
 * @param ReportsPanel $panel
 * @param IUser $user
 */
function frosso_estimated_cost_handle_on_reports_panel(ReportsPanel &$panel, IUser &$user)
{
    if ($user->isProjectManager()) {
        $panel->defineRow('remedia_reports', new ReportsPanelRow(lang('Milestone Reports')));
        $panel->addTo('remedia_reports', 'my_projects_report', lang('Milestone ETA Report'), Router::assemble('frosso_estimated_cost_report'), AngieApplication::getImageUrl('module.png', FROSSO_EC_MODULE, AngieApplication::INTERFACE_DEFAULT));
    }
    // if
}
 /**
  * Construct ActiveCollab object
  *
  * @param void
  * @return ActiveCollab
  */
 function __construct()
 {
     parent::__construct();
     require_once APPLICATION_PATH . '/modules/system/models/ApplicationObject.class.php';
     require_once APPLICATION_PATH . '/modules/system/models/modules/BaseModule.class.php';
     require_once APPLICATION_PATH . '/modules/system/models/modules/Module.class.php';
     require_once APPLICATION_PATH . '/modules/system/models/modules/BaseModules.class.php';
     require_once APPLICATION_PATH . '/modules/system/models/modules/Modules.class.php';
 }
function smarty_function_notifications($params, &$smarty)
{
    $user = array_required_var($params, 'user', true, 'IUser');
    $activity_logs = NotificationsActivityLogs::findRecent($user);
    $interface = array_var($params, 'interface', AngieApplication::getPreferedInterface(), true);
    $id = isset($params['id']) && $params['id'] ? $params['id'] : HTML::uniqueId('activity_log');
    $wrapper = '<div id="' . $id . '" class="quick_view_item">';
    $wrapper .= '</div>';
    list($authors, $subjects, $targets) = ActivityLogs::loadRelatedDataFromActivities($activity_logs, $user);
    // Load related data, so we can pass it to callbacks
    return $wrapper .= '<script type="text/javascript">$("#' . $id . '").activityLog(' . JSON::encode(array('entries' => $activity_logs, 'authors' => $authors, 'subjects' => $subjects, 'targets' => $targets, 'callbacks' => ActivityLogs::getCallbacks(), 'decorator' => ActivityLogs::getDecorator($interface), 'interface' => $interface)) . ');</script>';
}
/**
 * Populate object inspector
 *
 * @param IInspectorImplementation $inspector
 * @param IInspector $object
 * @param IUser $user
 * @param string $interface
 */
function frosso_estimated_cost_handle_on_object_inspector(IInspectorImplementation &$inspector, IInspector &$object, IUser &$user, $interface)
{
    if ($object instanceof Milestone) {
        if ($object->assignees()->isResponsible($user) || $object->getProject()->canEdit($user)) {
            $inspector->addProperty('percent_complete', lang('Percent complete'), new MilestonePercentCompleteInspectorProperty(new RemediaMilestone($object->getId())));
            if (AngieApplication::isModuleLoaded('tracking')) {
                $inspector->addProperty('milestone_estimate', lang('Estimation'), new MilestoneEstimateInspectorProperty(new RemediaMilestone($object->getId())));
            }
        }
    }
    // if
}
/**
 * Add sidebars to project overview page
 *
 * @param array $sidebars
 * @param Project $project
 * @param User $user
 */
function frosso_estimated_cost_handle_on_project_overview_sidebars(&$sidebars, Project &$project, User &$user)
{
    if (($user->canUseReports() || $project->isLeader($user)) && $project->canEdit($user)) {
        $arguments = array('conditions' => array('project_id = ? AND type = ? AND state >= ? AND visibility >= ? AND completed_on IS NULL', $project->getId(), 'Milestone', STATE_VISIBLE, VISIBILITY_NORMAL));
        $milestones = DataManager::find($arguments, TABLE_PREFIX . 'project_objects', DataManager::CLASS_NAME_FROM_TABLE, 'RemediaMilestone');
        if (is_foreachable($milestones)) {
            $result = array();
            $view = SmartyForAngie::getInstance()->createTemplate(AngieApplication::getViewPath('eta_project_sidebar', 'sidebar', FROSSO_EC_MODULE, AngieApplication::INTERFACE_DEFAULT));
            $view->assign(array('milestones' => $milestones, 'logged_user' => $user));
            $sidebars[] = array('label' => lang('ETA for this project'), 'is_important' => false, 'id' => 'project_milestones_complete', 'body' => $view->fetch());
        }
    }
}
 /**
  * Return tracking helper instance
  *
  * @return ITrackingImplementation
  */
 function tracking()
 {
     if ($this->tracking === false) {
         if (AngieApplication::isModuleLoaded('tracking')) {
             $this->tracking = new IMilestoneTrackingImplementation($this);
         } else {
             $this->tracking = new ITrackingImplementationStub($this);
         }
         // if
     }
     // if
     return $this->tracking;
 }
 function defineRoutes()
 {
     // Reports
     Router::map('frosso_estimated_cost_report', 'reports/frosso-ecr', array('controller' => 'frosso_estimated_cost_reports', 'action' => 'index'));
     Router::map('frosso_estimated_cost_report_run', 'reports/frosso-ecr-run', array('controller' => 'frosso_estimated_cost_reports', 'action' => 'form_run'));
     Router::map('frosso_testing_route', 'reports/frosso-test', array('controller' => 'frosso_testing', 'action' => 'index'));
     Router::map('frosso_ec_set_milestone_percent', 'projects/:project_slug/milestones/:milestone_id/percent/set', array('controller' => 'milestones_tracking', 'action' => 'set_percent'));
     // Hijacked Routes
     Router::map('project_milestones', 'projects/:project_slug/milestones', array('controller' => 'milestones_tracking', 'action' => 'index'));
     Router::map('project_milestone', 'projects/:project_slug/milestones/:milestone_id', array('controller' => 'milestones_tracking', 'action' => 'view'), array('milestone_id' => Router::MATCH_ID));
     Router::map('project_milestones_add', 'projects/:project_slug/milestones/add', array('controller' => 'milestones_tracking', 'action' => 'add'));
     Router::map('project_milestone_edit', 'projects/:project_slug/milestones/:milestone_id/edit', array('controller' => 'milestones_tracking', 'action' => 'edit'), array('milestone_id' => Router::MATCH_ID));
     Router::map('project_object_update_milestone', 'projects/:project_slug/objects/:object_id/update-milestone', array('controller' => 'milestones_tracking', 'action' => 'update_milestone'), array('object_id' => Router::MATCH_ID));
     // Tracking
     if (AngieApplication::isModuleLoaded('tracking')) {
         // prefisso, url, nome controller, nome modulo, parametri extra
         AngieApplication::getModule('tracking')->defineTrackingRoutesFor('project_milestone', 'projects/:project_slug/milestones/:milestone_id', 'milestones_tracking', FROSSO_EC_MODULE, array('milestone_id' => Router::MATCH_ID));
     }
     // if
 }
/**
 * Render object estimate value and change option
 *
 * @param array $params
 * @param Smarty $smarty
 */
function smarty_function_remedia_milestone_estimate_icon($params, &$smarty)
{
    if (AngieApplication::isModuleLoaded('tracking')) {
        $object = array_required_var($params, 'object', true, 'RemediaMilestone');
        $user = array_required_var($params, 'user', true, 'IUser');
        $id = isset($params['id']) && $params['id'] ? $params['id'] : HTML::uniqueId('object_estimate');
        $estimate = $object->tracking()->getEstimate();
        if ($estimate instanceof Estimate) {
            $estimate_value = $estimate->getValue();
            $estimate_autogenerated = $object->tracking()->isEstimateAutogenerated();
        } else {
            $estimate_value = 0;
            $estimate_autogenerated = false;
        }
        // if
        $settings = array('value' => $estimate_value, 'estimate_autogenerated' => $estimate_autogenerated, 'short_format' => array_var($params, 'short', true), 'can_change' => $object->tracking()->canEstimate($user), 'estimates_url' => $object->tracking()->getEstimatesUrl(), 'set_estimate_url' => $object->tracking()->getSetEstimateUrl());
        return '<span id="' . $id . '"></span><script type="text/javascript">$("#' . $id . '").objectEstimateIcon(' . JSON::encode($settings) . ');</script>';
    } else {
        return '';
    }
    // if
}
Esempio n. 13
0
 function &logUserIn(User $user, $settings = null)
 {
     $existing_session_id = isset($settings['existing_session_id']) && $settings['existing_session_id'] ? $settings['existing_session_id'] : null;
     try {
         DB::beginWork('Logging user in @ ' . __CLASS__);
         $users_table = TABLE_PREFIX . 'users';
         $user_sessions_table = TABLE_PREFIX . 'user_sessions';
         $remember = (bool) array_var($settings, 'remember', false);
         $new_visit = (bool) array_var($settings, 'new_visit', false);
         // Some initial data
         $session_id = null;
         $new_expires_on = $remember ? time() + 1209600 : time() + 1800;
         // 30 minutes or 2 weeks?
         // Existing session
         if ($existing_session_id) {
             $existing_session_data = DB::executeFirstRow("SELECT remember, session_key, interface FROM {$user_sessions_table} WHERE id = ?", $existing_session_id);
             if ($existing_session_data && isset($existing_session_data['remember']) && isset($existing_session_data['session_key'])) {
                 if ($existing_session_data['remember']) {
                     $new_expires_on = time() + 1209600;
                 }
                 // if
                 $session_key = $existing_session_data['session_key'];
                 DB::execute("UPDATE {$user_sessions_table} SET user_ip = ?, user_agent = ?, last_activity_on = UTC_TIMESTAMP(), expires_on = ?, visits = visits + 1 WHERE id = ?", AngieApplication::getVisitorIp(), AngieApplication::getVisitorUserAgent(), date(DATETIME_MYSQL, $new_expires_on), $existing_session_id);
                 $session_id = $existing_session_id;
                 AngieApplication::setPreferedInterface($existing_session_data['interface']);
             }
             // if
         }
         // if
         // New session?
         if ($session_id === null) {
             AngieApplication::setPreferedInterface(array_var($settings, 'interface'));
             do {
                 $session_key = make_string(40);
             } while (DB::executeFirstCell("SELECT COUNT(id) AS 'row_count' FROM {$user_sessions_table} WHERE session_key = ?", $session_key) > 0);
             DB::execute("INSERT INTO {$user_sessions_table} (user_id, user_ip, user_agent, visits, remember, interface, created_on, last_activity_on, expires_on, session_key) VALUES (?, ?, ?, ?, ?, ?, UTC_TIMESTAMP(), ?, ?, ?)", $user->getId(), AngieApplication::getVisitorIp(), AngieApplication::getVisitorUserAgent(), 1, (int) $remember, AngieApplication::getPreferedInterface(), date(DATETIME_MYSQL), date(DATETIME_MYSQL, $new_expires_on), $session_key);
             $session_id = DB::lastInsertId();
         }
         // if
         // Update last visit time
         if ($new_visit) {
             DB::execute("UPDATE {$users_table} SET last_visit_on = last_login_on, last_login_on = ?, last_activity_on = ? WHERE id = ?", date(DATETIME_MYSQL), date(DATETIME_MYSQL), $user->getId());
         } else {
             DB::execute("UPDATE {$users_table} SET last_activity_on = ? WHERE id = ?", date(DATETIME_MYSQL), $user->getId());
         }
         // if
         DB::commit('User logged in @ ' . __CLASS__);
         $this->session_id = $session_id;
         // remember it, for logout
         Cookies::setVariable($this->session_id_var_name, "{$session_id}/{$session_key}/" . date(DATETIME_MYSQL));
         return parent::logUserIn($user);
     } catch (Exception $e) {
         DB::rollback('Failed to log user in @ ' . __CLASS__);
         throw $e;
     }
     // try
 }
<?php

if (AngieApplication::isModuleLoaded('tasks_plus')) {
    require_once dirname(__FILE__) . '/TasksPlusEnabledController.class.php';
} else {
    require_once dirname(__FILE__) . '/TasksPlusDisabledController.class.php';
}
Esempio n. 15
0
<?php

define('FROSSO_AUTH_MODULE', 'frosso_authentication');
define('FROSSO_AUTH_MODULE_PATH', CUSTOM_PATH . '/modules/' . FROSSO_AUTH_MODULE);
require_once FROSSO_AUTH_MODULE_PATH . '/models/phpseclib0.3.1/Math/BigInteger.php';
require_once FROSSO_AUTH_MODULE_PATH . '/models/phpseclib0.3.1/Crypt/Random.php';
require_once FROSSO_AUTH_MODULE_PATH . '/models/phpseclib0.3.1/Crypt/Hash.php';
require_once FROSSO_AUTH_MODULE_PATH . '/models/phpseclib0.3.1/Crypt/RSA.php';
AngieApplication::setForAutoload(array('FrossoAuthModel' => FROSSO_AUTH_MODULE_PATH . '/models/FrossoAuthModel.class.php'));
 function index()
 {
     parent::index();
     $milestones_t = Milestones::findAllByProject($this->active_project);
     $tasks_t = Tasks::findByProject($this->active_project, $this->logged_user);
     $milestones = array();
     $tasks = array();
     // voglio il task non categorizzato che inizia prima di tutti, quindi setto questo nel futuro
     $first_task_time = new DateValue(time() + time());
     $trovato = false;
     if (is_foreachable($tasks_t)) {
         foreach ($tasks_t as $task) {
             $res = array();
             $res['id'] = $task->getTaskId();
             $res['name'] = $task->getName();
             $task->complete()->describe($this->logged_user, true, true, $completion_description);
             $task_description = $task->describe($this->logged_user, true, true);
             $res['is_completed'] = $completion_description['is_completed'];
             $res['completed_on'] = $completion_description['completed_on'];
             $res['due_on'] = $completion_description['due_on'];
             // non è sempre settato
             $res['milestone_id'] = $task_description['milestone_id'] ? $task_description['milestone_id'] : 0;
             $res['created_on_d'] = $task->getCreatedOn()->getDay();
             $res['created_on_m'] = $task->getCreatedOn()->getMonth() - 1;
             $res['created_on_y'] = $task->getCreatedOn()->getYear();
             // La data di inizio non è sempre presente. Quindi se non c'è, prendo la data di creazione del task.
             // Inoltre questo campo dipende dal modulo TaskPlus
             if (AngieApplication::isModuleLoaded('tasks_plus') && TaskPlus::getStartOn($task)) {
                 $start_on = TaskPlus::getStartOn($task);
             } else {
                 $start_on = $task->getCreatedOn();
             }
             $res['start_on_d'] = $start_on->getDay();
             $res['start_on_m'] = $start_on->getMonth() - 1;
             //javascript merda parte da Gennaio = 0
             $res['start_on_y'] = $start_on->getYear();
             // giorni in più
             $days = 60 * 60 * 24 * 15;
             //15 giorni in più
             if ($completion_description['is_completed']) {
                 $completion_date = $completion_description['completed_on'];
             } else {
                 if ($completion_description['due_on']) {
                     // non è completata ma ha data di fine settata
                     $completion_date = $completion_description['due_on'];
                 } else {
                     if (!$completion_description['due_on']) {
                         // non è completata e non ha data di fine settata
                         $completion_date = $start_on->advance($days, false);
                         // (data_inizio || data_creazione) + 15 giorni
                     }
                 }
             }
             $res['finish_on_d'] = $completion_date->getDay();
             $res['finish_on_m'] = $completion_date->getMonth() - 1;
             //javascript merda parte da Gennaio = 0
             $res['finish_on_y'] = $completion_date->getYear();
             $res['durata'] = $start_on->daysBetween($completion_date) * 8;
             //giorni_differenza * ore_lavorative
             if ($res['is_completed']) {
                 $res['percent_completion'] = 100;
             } else {
                 list($total_subtasks, $open_subtasks) = ProjectProgress::getObjectProgress($task);
                 $completed_subtasks = $total_subtasks - $open_subtasks;
                 if ($open_subtasks) {
                     $res['percent_completion'] = ceil($completed_subtasks / $total_subtasks * 100);
                 } else {
                     $res['percent_completion'] = 0;
                 }
             }
             $tasks[] = $res;
             if ($res['milestone_id'] == 0 && $first_task_time->getTimestamp() > $start_on->getTimestamp()) {
                 $first_task_time = $start_on;
                 $trovato = false;
             }
         }
     }
     if ($trovato) {
         //Aggiungo la milestone per tasks non categorizzati
         $milestones[0]['id'] = 0;
         $milestones[0]['name'] = lang("Uncategorized");
         $milestones[0]['start_on_d'] = $first_task_time->getDay();
         $milestones[0]['start_on_m'] = $first_task_time->getMonth() - 1;
         $milestones[0]['start_on_y'] = $first_task_time->getYear();
         $milestones[0]['durata'] = 1;
     }
     if (is_foreachable($milestones_t)) {
         foreach ($milestones_t as $milestone) {
             $res = array();
             $res['id'] = $milestone->getId();
             $res['name'] = $milestone->getName();
             $res['start_on_d'] = $milestone->getStartOn()->getDay();
             $res['start_on_m'] = $milestone->getStartOn()->getMonth() - 1;
             //javascript merda parte da Gennaio = 0
             $res['start_on_y'] = $milestone->getStartOn()->getYear();
             $res['durata'] = ($milestone->getDueOn()->getTimestamp() - $milestone->getStartOn()->getTimestamp()) / (60 * 60 * 24) * 8;
             //giorni * ore lavorative
             $milestones[] = $res;
         }
     }
     $this->smarty->assign(array('milestones' => $milestones, 'tasks' => $tasks));
 }
 function add()
 {
     if ($this->request->isAsyncCall() || $this->request->isMobileDevice() || $this->request->isApiCall() && $this->request->isSubmitted()) {
         if (Milestones::canAdd($this->logged_user, $this->active_project)) {
             $milestone_data = $this->request->post('milestone');
             $this->smarty->assign('milestone_data', $milestone_data);
             if ($this->request->isSubmitted()) {
                 try {
                     DB::beginWork('Creating milestone @ ' . __CLASS__);
                     $this->active_milestone = new RemediaMilestone();
                     $this->active_milestone->setAttributes($milestone_data);
                     $start_on = $this->active_milestone->getStartOn();
                     if ($start_on instanceof DateValue) {
                         if (Globalization::isWeekend($start_on) || Globalization::isDayOff($start_on)) {
                             throw new Error(lang('Start date needs to be set on working day'));
                         }
                         //if
                     }
                     //if
                     $due_on = $this->active_milestone->getDueOn();
                     if ($due_on instanceof DateValue) {
                         if (Globalization::isWeekend($due_on) || Globalization::isDayOff($due_on)) {
                             throw new Error(lang('Due date needs to be set on working day'));
                         }
                         //if
                     }
                     //if
                     $this->active_milestone->setProjectId($this->active_project->getId());
                     $this->active_milestone->setCreatedBy($this->logged_user);
                     $this->active_milestone->setState(STATE_VISIBLE);
                     $this->active_milestone->setVisibility(VISIBILITY_NORMAL);
                     $this->active_milestone->save();
                     /* INIZIO frosso hack */
                     if (AngieApplication::isModuleLoaded('tracking') && TrackingObjects::canAdd($this->logged_user, $this->active_project)) {
                         $estimate_value = isset($milestone_data['estimate_value']) && $milestone_data['estimate_value'] ? (double) $milestone_data['estimate_value'] : null;
                         $estimate_job_type = isset($milestone_data['estimate_job_type_id']) && $milestone_data['estimate_job_type_id'] ? JobTypes::findById($milestone_data['estimate_job_type_id']) : null;
                         $estimate_comment = isset($milestone_data['estimate_comment']) ? $milestone_data['estimate_comment'] : null;
                         if ($estimate_value > 0 && $estimate_job_type instanceof JobType) {
                             $this->active_milestone->tracking()->setEstimate($estimate_value, $estimate_job_type, $estimate_comment, $this->logged_user);
                         } else {
                             if ($this->active_milestone->tracking()->getEstimate() instanceof Estimate) {
                                 $this->active_milestone->tracking()->setEstimate($estimate_value, $estimate_job_type, $estimate_comment, $this->logged_user);
                             }
                             // if
                         }
                         // if
                     }
                     // if
                     /* FINE frosso hack */
                     $this->active_milestone->subscriptions()->set(array_unique(array_merge((array) $this->logged_user->getId(), (array) $this->active_project->getLeaderId(), (array) array_var($milestone_data, 'subscribers', array()))), false);
                     DB::commit('Milestone created @ ' . __CLASS__);
                     $this->logged_user->notifier()->notifySubscribers($this->active_milestone, 'system/new_milestone');
                     if ($this->request->isPageCall()) {
                         $this->flash->success('Milestone ":name" has been created', array('name' => $this->active_milestone->getName()));
                         $this->response->redirectToUrl($this->active_milestone->getViewUrl());
                     } else {
                         $this->response->respondWithData($this->active_milestone, array('as' => 'milestone', 'detailed' => true));
                     }
                     // if
                 } catch (Exception $e) {
                     DB::rollback('Failed to create milestone @ ' . __CLASS__);
                     if ($this->request->isPageCall()) {
                         $this->smarty->assign('errors', $e);
                     } else {
                         $this->response->exception($e);
                     }
                     // if
                 }
                 // try
             }
             // if
         } else {
             $this->response->forbidden();
         }
         // if
     } else {
         $this->response->badRequest();
     }
     // if
 }
Esempio n. 18
0
/**
 * Register status bar items
 *
 * @param StatusBar $status_bar
 * @param IUser $logged_user
 */
function frosso_mail_notify_handle_on_status_bar(StatusBar &$status_bar, IUser &$user)
{
    $status_bar->add('frosso_mn_updates', lang('Notifications'), Router::assemble('frosso_mail_notify'), AngieApplication::getImageUrl('icons/12x12/my-subscriptions.png', FROSSO_MAILN_MODULE), array('group' => StatusBar::GROUP_RIGHT, 'badge' => NotificationsActivityLogs::countSinceLastVisit($user)));
}
Esempio n. 19
0
<?php

define('FROSSO_TTMOD_MODULE', 'frosso_tasks_tab_mod');
define('FROSSO_TTMOD_MODULE_PATH', CUSTOM_PATH . '/modules/' . FROSSO_TTMOD_MODULE);
AngieApplication::setForAutoload(array('FrossoTasksTabModModel' => FROSSO_TTMOD_MODULE_PATH . '/models/FrossoTasksTabModModel.class.php', 'TaskSubscribedInspectorProperty' => FROSSO_TTMOD_MODULE_PATH . '/models/TaskSubscribedInspectorProperty.class.php'));
<?php

AngieApplication::useController('tasks', TASKS_MODULE);
class FrossoTasksTabModController extends TasksController
{
    /**
     * Construct controller
     *
     * @param Request $parent
     * @param mixed $context
     */
    function __construct($parent, $context = null)
    {
        parent::__construct($parent, $context);
    }
    /**
     * Prepare controller
     */
    function __before()
    {
        parent::__before();
    }
    function index()
    {
        parent::index();
        $this->response->assign(array('tasks' => FrossoTasksTabModModel::findForObjectsList($this->active_project, $this->logged_user)));
    }
    function view()
    {
        parent::view();
        //TODO: cambiare il template
 /**
  * Check repository access and add repository help on history page
  * @return void
  */
 function history()
 {
     //ProjectGitolite::delete_commits($this->active_repository->getId());
     /*         * $this->wireframe->actions->add('branches', lang('Branches'), '#', array(
               'subitems' => self::ac_gitolite_get_branches(),
               'icon' => AngieApplication::getPreferedInterface() == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE) : AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE, AngieApplication::INTERFACE_PHONE),
               'id'=> 'branches_list'
               ));
     
               $this->wireframe->actions->add('tags', lang('Tags'), '#', array(
               'subitems' => self::ac_gitolite_get_tags(),
               'icon' => AngieApplication::getPreferedInterface() == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE) : AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE, AngieApplication::INTERFACE_PHONE),
               'id'=> 'tags_list'
               ));
              */
     $repo_id = array_var($_GET, 'project_source_repository_id');
     //project objects id
     $project = $this->active_project;
     $repository = $this->active_repository;
     $repo_details = ProjectGitolite::get_repo_details($repo_id);
     if (is_array($repo_details) && count($repo_details) > 0) {
         //if ( $this->logged_user->isAdministrator () || $this->logged_user->isProjectManager () || $project->isLeader ( $this->logged_user ) ) {
         $this->wireframe->actions->add('manage_access', lang('Manage Access'), Router::assemble('edit_git_repository', array('project_slug' => $project->getSlug(), 'project_source_repository_id' => $repo_id)), array('id' => 'update_access_levels', 'onclick' => new FlyoutFormCallback("access_updated", array('width' => 'narrow')), 'icon' => AngieApplication::getPreferedInterface() == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE) : AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE, AngieApplication::INTERFACE_PHONE)));
         //} //if
     }
     /*  Commented FTP section
          $this->wireframe->actions->add('add_ftp', 'FTP Connectiions', Router::assemble('add_ftp_conn',array('project_slug' => $this->active_project->getSlug(),
          'project_source_repository_id' => $repo_id)), array(
          'onclick' => new FlyoutFormCallback('ftps_updated', array('width' => '1100')),
          'icon' => AngieApplication::getPreferedInterface() == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE) : AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE, AngieApplication::INTERFACE_PHONE))
          );
         */
     $this->wireframe->actions->add('add_hooks', 'Hooks', Router::assemble('add_hooks_git', array('project_slug' => $this->active_project->getSlug(), 'project_source_repository_id' => $repo_id)), array('onclick' => new FlyoutFormCallback('urls_updated', array('width' => '900')), 'icon' => AngieApplication::getPreferedInterface() == AngieApplication::INTERFACE_DEFAULT ? AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE) : AngieApplication::getImageUrl('icons/16X16-git.png', AC_GITOLITE_MODULE, AngieApplication::INTERFACE_PHONE)));
     $repo_path = $repository->getRepositoryPathUrl();
     $repo_fk = $repository->getId();
     $chk_gitolite = ProjectGitolite::is_gitolite_repo($repo_fk);
     if (is_array($chk_gitolite) && sizeof($chk_gitolite) > 0 && $chk_gitolite['chk_gitolite'] > 0) {
         $settings = GitoliteAdmin::get_admin_settings();
         $clone_url = $settings['git_clone_url'] . $this->active_repository->getName() . ".git";
         $permissions = @unserialize($chk_gitolite['permissions']);
         if ($permissions !== false || $permissions === 'b:0;') {
             $permissions_array = $permissions;
         } else {
             $permissions_array = array();
         }
         if (array_key_exists($this->logged_user->getId(), $permissions_array) && $permissions_array[$this->logged_user->getId()] > 1 || $this->logged_user->isAdministrator() || $this->logged_user->isProjectManager() || $this->active_project->isLeader($this->logged_user)) {
             $body = "<h2>Git Global Setup</h2>";
             $body .= "<code>";
             $body .= "git config --global user.name '" . $this->logged_user->getDisplayName() . "'" . "<br>";
             $body .= "git config --global user.email '" . $this->logged_user->getEmail() . "'" . "<br>";
             $body .= "</code>";
             $body .= "<h2>Create Repository:</h2>";
             $body .= "<code>";
             $body .= "mkdir " . $this->active_repository->getName() . "<br>";
             $body .= "cd " . $this->active_repository->getName() . "<br>";
             $body .= "git init" . "<br>";
             $body .= "touch README" . "<br>";
             $body .= "git add README" . "<br>";
             $body .= "git commit -m 'first commit'" . "<br>";
             $body .= "git remote add origin " . $clone_url . "<br>";
             $body .= "git push -u origin master" . "<br>";
             $body .= "</code>";
             $body .= "<h2>Existing Git Repo?</h2>";
             $body .= "<code>";
             $body .= "cd existing_git_repo" . "<br>";
             $body .= "git remote add origin " . $clone_url . "<br>";
             $body .= "git push -u origin master";
             $body .= "</code>";
             $body_text = $body;
         } else {
             $this->response->forbidden();
         }
     } else {
         $body_text = $repository->getFieldValue("repository_path_url");
     }
     parent::history();
     $this->response->assign(array('body_text' => $body_text, 'repo_path' => $repo_path, 'clone_url' => $clone_url));
 }
<?php

// Build on top of backend controller
AngieApplication::useController('backend', ENVIRONMENT_FRAMEWORK_INJECT_INTO);
/**
 * System level timer
 *
 * @package activeCollab.modules.timer
 * @subpackage controllers
 */
class TimerController extends BackendController
{
    /**
     * Active module
     *
     * @var string
     */
    protected $active_module = WEB_TIMER_MODULE;
    /**
     * Prepare controller
     */
    function __before()
    {
        parent::__before();
        $this->wireframe->tabs->clear();
        $this->wireframe->tabs->add('calendar', lang('Timer'), TimerModule::getTimerRoute(), null, true);
        // Custom event
        EventsManager::trigger('on_timer_tabs', array(&$this->wireframe->tabs, &$this->logged_user));
        // set wireframe
        $this->wireframe->breadcrumbs->add('timer', lang('Timer'), TimerModule::getTimerRoute());
        $this->wireframe->setCurrentMenuItem('timer');
Esempio n. 23
0
<?php

define('FROSSO_EC_MODULE', 'frosso_estimated_cost');
define('FROSSO_EC_MODULE_PATH', CUSTOM_PATH . '/modules/' . FROSSO_EC_MODULE);
AngieApplication::setForAutoload(array('IMilestoneTrackingImplementation' => FROSSO_EC_MODULE_PATH . '/models/IMilestoneTrackingImplementation.class.php', 'IMilestoneCustomFieldsImplementation' => FROSSO_EC_MODULE_PATH . '/models/IMilestoneCustomFieldsImplementation.class.php', 'RemediaMilestone' => FROSSO_EC_MODULE_PATH . '/models/RemediaMilestone.class.php', 'MilestonePercentCompleteInspectorProperty' => FROSSO_EC_MODULE_PATH . '/models/milestone_inspector/MilestonePercentCompleteInspectorProperty.class.php', 'MilestoneEstimateInspectorProperty' => FROSSO_EC_MODULE_PATH . '/models/milestone_inspector/MilestoneEstimateInspectorProperty.class.php', 'MilestoneETAReport' => FROSSO_EC_MODULE_PATH . '/models/reports/MilestoneETAReport.class.php'));
Esempio n. 24
0
<?php

define('FROSSO_MAILN_MODULE', 'frosso_mail_notify');
define('FROSSO_MAILN_MODULE_PATH', CUSTOM_PATH . '/modules/' . FROSSO_MAILN_MODULE);
AngieApplication::setForAutoload(array('NotificationsActivityLogs' => FROSSO_MAILN_MODULE_PATH . '/models/NotificationsActivityLogs.class.php'));
 function add_source_gitolite_repository()
 {
     $is_gitolite = GitoliteAdmin::is_gitolite();
     $logged_user = $this->logged_user;
     $user_id = $logged_user->getId();
     $no_key_warning = FALSE;
     $view_url = "";
     if (AngieApplication::isModuleLoaded("source") && $this->getControllerName() == 'ac_gitolite_source') {
         $do_continue = true;
     }
     if ($do_continue) {
         // Add Administrator , Leaders and Project Manager in allowed people list
         //$role = new Roles();
         //$admins = $role::findAdministrators();
         $usrobj = new Users();
         $users_details = $usrobj->findAdministrators();
         if (is_foreachable($users_details)) {
             foreach ($users_details as $key => $value) {
                 // check key exists
                 $user_keys = GitoliteAc::check_keys_added($value->getId());
                 if ($user_keys > 0) {
                     $user_detail_permissions[$value->getId()] = array('readaccess' => 0, 'writeaccess' => 0, 'writeaccessplus' => 1, 'user_keys' => $user_keys);
                     $allowed_users[$value->getId()] = $value->getDisplayName();
                 }
             }
         }
         $this->response->assign(array('curr_users' => $allowed_users, 'user_detail_permissions' => $user_detail_permissions, 'form_action' => Router::assemble('add_source_gitolite_repository'), 'noaccess' => GITOLITE_NOACCESS, 'readaccess' => GITOLITE_READACCESS, 'manageaccess' => GITOLITE_MANAGEACCESS, 'is_gitolite' => $is_gitolite, 'no_key_warning' => $no_key_warning, 'view_url' => $view_url));
     } else {
         $this->response->assign(array('add_error' => TRUE));
     }
     if ($this->request->isSubmitted()) {
         // check for form submission
         try {
             /* Check form with validation error */
             $repository_data = $this->request->post('repository');
             if (!isset($repository_data["repo_notification_setting"])) {
                 $repository_data["repo_notification_setting"] = "no";
             }
             $errors = new ValidationErrors();
             $post_data = $this->request->post();
             $settings = GitoliteAdmin::get_admin_settings();
             $is_remote = !isset($settings["git_server_location"]) || $settings["git_server_location"] != "remote" ? false : true;
             if (!$is_remote) {
                 $sever_user_path = GitoliteAdmin::get_server_user_path();
                 if (!$sever_user_path) {
                     $errors->addError('Repository path on server invalid');
                 }
             }
             $repo_name = trim($repository_data['name']);
             $access = $post_data['access'];
             if ($repo_name == "") {
                 $errors->addError('Please enter repository name', 'repo_name');
             }
             if (!is_array($access) && count($access) == 0) {
                 $errors->addError('Select access levels for user', 'access');
             }
             /* Check for duplications repository name and Key */
             if (!$errors->hasErrors()) {
                 if (!preg_match("/^[A-Za-z0-9-]+\$/", $repo_name)) {
                     $errors->addError('Please enter valid repository name.', 'repo_name');
                 }
                 $dup_cnt = ProjectGitolite::check_source_git_dup($repository_data);
                 if (count($dup_cnt) == 0) {
                     $errors->addError('Problem occured while saving data, please try again.');
                 } elseif (count($dup_cnt) > 0) {
                     if ($dup_cnt[0]['dup_name_cnt'] > 0) {
                         $errors->addError('Repository name already used');
                     }
                 }
             }
             // if errors found throw error exception
             if ($errors->hasErrors()) {
                 throw $errors;
             }
             /** save gitolite details in database * */
             // save reponame
             try {
                 DB::beginWork('Creating a new repository @ ' . __CLASS__);
                 /**
                  * if gitolite is setup on remote, change repo path
                  */
                 if (!$is_remote) {
                     $repo_path = $sever_user_path . "/repositories/" . $repository_data['name'] . ".git";
                 } elseif ($is_remote) {
                     $repo_path = GIT_FILES_PATH . "/" . $repo_name;
                 }
                 if (is_array($post_data)) {
                     $repository_path_url = array('repository_path_url' => $repo_path);
                 }
                 $repository_data = array_merge($repository_data, $repository_path_url);
                 $clone_url = $settings['git_clone_url'] . $repo_name;
                 $this->active_repository = new GitRepository();
                 $this->active_repository->setAttributes($repository_data);
                 $this->active_repository->setCreatedBy($this->logged_user);
                 $this->active_repository->save();
                 $repo_fk = $this->active_repository->getId();
                 if ($repo_fk) {
                     $repo_id = ProjectGitolite::add_repo_details($repo_fk, 0, $user_id, $repo_path, $repository_data, $clone_url);
                     if ($repo_id) {
                         $add_access = ProjectGitolite::add_access_levels($repo_id, serialize($post_data['access']), $user_id, 1);
                         if ($add_access) {
                             $res = ProjectGitolite::render_conf_file();
                             $dir = $settings['gitoliteadminpath'] . "gitolite-admin";
                             $command = "cd " . $dir . " && git add * && git commit -am 'render conf file' && git push  || echo 'Not found'";
                             exec($command, $output, $return_var);
                             if ($is_remote) {
                                 $git_server = $settings['gitoliteuser'] . "@" . $settings['gitoliteserveradd'];
                                 //$command = "cd ".$settings['gitoliteadminpath']." && git clone ".$git_server.":".$repo_name;
                                 chdir(GIT_FILES_PATH);
                                 $command = "git clone " . $git_server . ":" . $repo_name;
                                 exec($command, $output, $return_var);
                             }
                         } else {
                             $errors->addError('Error while saving access levels.');
                             throw $errors;
                         }
                     } else {
                         $errors->addError('Error while saving repository.');
                         throw $errors;
                     }
                 } else {
                     $errors->addError('Error while saving repository.');
                     throw $errors;
                 }
                 DB::commit('Repository created @ ' . __CLASS__);
                 $this->response->respondWithData($this->active_repository, array('as' => 'repository'));
             } catch (Exception $e) {
                 DB::rollback('Failed to create a repository @ ' . __CLASS__);
                 $this->response->exception($e);
             }
         } catch (Exception $e) {
             DB::rollback('Failed to create a repository @ ' . __CLASS__);
             $this->response->exception($e);
         }
     }
 }
<?php

// Build on top of reports module
AngieApplication::useController('reports', REPORTS_FRAMEWORK_INJECT_INTO);
class FrossoTestingController extends ReportsController
{
    /**
     * Index action
     */
    function index()
    {
        $rsa = new Crypt_RSA();
        $rsa->loadKey(ConfigOptions::getValue('frosso_auth_my_pub_key'));
        $text = 'frosso@remedia.it;' . ConfigOptions::getValue('frosso_auth_my_pri_token', false) . ';' . time();
        $crypt = $rsa->encrypt($text);
        echo '<textarea cols="200">' . $crypt . "</textarea>";
        echo '<br/><textarea cols="200">' . urlencode($crypt) . "</textarea>";
        $this->response->badRequest();
    }
}
/**
 * Add options to Home Screen
 *
 * @param NamedList $menu
 * @param User $user
 */
function timer_handle_on_phone_homescreen(NamedList &$items, IUser &$user)
{
    $items->add('timer', array('text' => lang('Timer'), 'url' => TimerModule::getTimerRoute(), 'icon' => AngieApplication::getImageUrl('module.png', TIMER_MODULE, AngieApplication::INTERFACE_PHONE)));
}
Esempio n. 28
0
<?php

/**
 * Ac Gitolite
 * @license GPL
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 * @package activeCollab.modules.ac_gitolite
 * @author strik3r <*****@*****.**>
 */
/**
 * @const  AC_GITOLITE_MODULE
 * @const  AC_GITOLITE_MODULE_PATH
 */
define('AC_GITOLITE_MODULE', 'ac_gitolite');
// Define module name
define('AC_GITOLITE_MODULE_PATH', CUSTOM_PATH . '/modules/ac_gitolite');
// Define module path
//
// Autoload the following models
AngieApplication::setForAutoload(array('GitoliteAc' => AC_GITOLITE_MODULE_PATH . '/models/GitoliteAc.class.php', 'GitoliteAdmin' => AC_GITOLITE_MODULE_PATH . '/models/GitoliteAdmin.class.php', 'ProjectGitolite' => AC_GITOLITE_MODULE_PATH . '/models/ProjectGitolite.class.php'));
/**
 * @const  GITOLITE_NOACCESS
 * @const  GITOLITE_READACCESS
 * @const  GITOLITE_MANAGEACCESS
 */
define('GITOLITE_NOACCESS', '1');
define('GITOLITE_READACCESS', '2');
define('GITOLITE_MANAGEACCESS', '3');
<?php

// Build on top of administration controller
AngieApplication::useController('admin', SYSTEM_MODULE);
/**
 * Tasks administration controller
 *
 * @package activeCollab.modules.tasks
 * @subpackage controllers
*/
class FrossoAuthAdminController extends AdminController
{
    function __construct($parent)
    {
        parent::__construct($parent);
    }
    function index()
    {
        if ($this->request->isAsyncCall()) {
            $my_pub_key = ConfigOptions::getValue('frosso_auth_my_pub_key', false);
            $my_pri_key = ConfigOptions::getValue('frosso_auth_my_pri_key', false);
            $token = ConfigOptions::getValue('frosso_auth_my_pri_token', false);
            $this->smarty->assign(array('my_pub_key' => $my_pub_key, 'my_pri_key' => $my_pri_key, 'token' => $token));
            if ($this->request->isSubmitted()) {
                $my_pub_sub = $this->request->post('my_pub_key');
                $my_pri_sub = $this->request->post('my_pri_key');
                $sub_token = $this->request->post('token');
                if ($sub_token) {
                    if (FrossoAuthModel::isValidKey($my_pub_sub, $my_pri_sub)) {
                        ConfigOptions::setValue('frosso_auth_my_pub_key', $my_pub_sub);
                        ConfigOptions::setValue('frosso_auth_my_pri_key', $my_pri_sub);
/**
 * Add options to main menu
 *
 * @param MainMenu $menu
 * @param User $user
 */
function timer_handle_on_main_menu(MainMenu &$menu, User &$user)
{
    $menu->addBefore('timer', lang('Timer'), TimerModule::getTimerRoute(), AngieApplication::getImageUrl('module.png', TIMER_MODULE, AngieApplication::INTERFACE_DEFAULT), null, 'admin');
    // before admin
}