/** * * 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)); }
/** * 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)); }
/** * 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 }
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'; }
<?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 }
/** * 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))); }
<?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');
<?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'));
<?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))); }
<?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 }