Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating dev branch with big 4.0 release changes #987

Merged
merged 60 commits into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
be77335
very preliminary equal access support in udoit
panbed Aug 21, 2024
cb0f908
Merge remote-tracking branch 'origin/dev' into equal-access (what cou…
panbed Aug 21, 2024
c22a25e
lambda
evannaderi Aug 26, 2024
278bcf1
lambda
evannaderi Aug 26, 2024
5616efb
5Merge branch 'equal-access' into lambda
evannaderi Aug 26, 2024
c03d871
maybe lambda works
evannaderi Aug 26, 2024
65362ef
mostly just testing to see if i can push to this fork
panbed Aug 26, 2024
2377813
Merge branch 'lambda' of https://github.com/evannaderi/UDOIT into lambda
panbed Aug 26, 2024
08caf35
VERY early testing of EC2 equal access scanner in UDOIT
panbed Aug 26, 2024
5361d6d
currently trying to separate the 'extensions' to udoit with a scanner…
panbed Aug 26, 2024
d95d35a
more testing the lambda in UDOIT and trying to refactor services to b…
panbed Aug 27, 2024
8ec15c3
moving to equal access rules instead
panbed Sep 17, 2024
d701a70
async functionality working, some cleanup
panbed Sep 25, 2024
7516927
fix marking as resolved and phpally-ignore
panbed Sep 25, 2024
24e796a
more cleanup, begin adding back phpally integration
panbed Sep 30, 2024
7c828d5
Merge pull request #961 from panbed/lambda
dmols Sep 30, 2024
62adfb3
merging back into equal-access
panbed Oct 28, 2024
b072374
mostly working again, checking for phpally-ignore still not working a…
panbed Oct 30, 2024
abf1297
mostly in working condition again, need to handle issues though
panbed Oct 31, 2024
3e68bfc
Merge branch 'equal-access' of https://github.com/panbed/UDOIT into e…
panbed Nov 4, 2024
6ee0349
hopefully initial commit after merge ordeal
panbed Nov 4, 2024
d8df373
async multiple html pages in an array to the lambda function
panbed Nov 6, 2024
9fb06ac
Merge pull request #971 from ucfopen/dev
dmols Nov 12, 2024
04b6476
changed to 5 pages sent instead of 10, adding messageArgs
panbed Nov 14, 2024
c2be872
adding more info to metadata
panbed Nov 19, 2024
b4c4249
very small change to getdomdocuments across the services
panbed Nov 20, 2024
b388b2c
Merge pull request #3 from panbed/dev
panbed Nov 20, 2024
b9b523b
removing all comments for possible deployment
panbed Nov 20, 2024
086b944
oops (fix composer.lock typo)
panbed Nov 20, 2024
22031bd
hopefully working composer.lock
panbed Nov 20, 2024
2f12953
Merge branch 'equal-access' of https://github.com/panbed/UDOIT into e…
panbed Nov 20, 2024
14bc507
Merge pull request #976 from panbed/equal-access
dmols Nov 20, 2024
3f77bd6
testing dev deploy
panbed Nov 20, 2024
31b0135
testing dev deploy
panbed Nov 20, 2024
37611de
Update .env.example to equalaccess_lambda by default
panbed Nov 20, 2024
0d89a9a
use equal access lambda by default in .env.example
panbed Nov 21, 2024
c5f189c
Merge pull request #4 from ucfopen/equal-access
panbed Nov 21, 2024
06e22c5
change environment names for equal access lambda function so its more…
panbed Nov 25, 2024
ec41707
New functional component label form
panbed Dec 16, 2024
128bd18
Merge remote-tracking branch 'origin/main' into equal-access
panbed Dec 18, 2024
71e80e8
Upgraded php version to 8.4.2 from 8.2
dmols Jan 3, 2025
50f1e9d
ufixitreviewonly shows equal access message now
panbed Jan 6, 2025
1bea39a
update ufixitreviewonly to show equal access message
panbed Jan 6, 2025
f6eaa23
Initial changes to allow UDOIT to run on 8.4
dmols Jan 8, 2025
796f4d5
Fixed many deprecations seen from symfony/php upgrade
dmols Jan 8, 2025
bd6c6cf
Final syntax fixes to allow UDOIT to load
dmols Jan 8, 2025
7afd90e
Merge remote-tracking branch 'origin/8.4.2-php-upgrade' into equal-ac…
panbed Jan 9, 2025
3e4d630
Update composer.lock for PHP 8.4 changes
panbed Jan 9, 2025
0d788b1
Added final tweaks to ensure UDOIT loads
dmols Jan 14, 2025
1208657
Minor change to CHANGELOG
dmols Jan 14, 2025
4e56fe0
Updated CHANGELOG
dmols Jan 14, 2025
712d294
new StyleMisuse form for style_color_misuse
panbed Jan 16, 2025
eddadac
ok, oops, this one is supposed to be StyleMisuse
panbed Jan 16, 2025
080ed69
Major React 18 update for the base app and most pages and components.
mbusch3 Jan 24, 2025
f66fff2
Merge pull request #978 from ucfopen/8.4.2-php-upgrade
dmols Jan 31, 2025
3564afa
Merge pull request #982 from ucfopen/equal-access
dmols Jan 31, 2025
cbe4ddf
Reworked UfixitModal. There were two handleIssueSave functions, one l…
mbusch3 Jan 31, 2025
8249de2
Fixed responsiveness issues. Good to go!
mbusch3 Feb 3, 2025
5951e84
Merge pull request #984 from mbusch3/main
dmols Feb 5, 2025
8f48a6a
Added input to the changelog
dmols Feb 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,19 @@ ADMIN_LTI_NAME="UDOIT 3 Admin"
USE_DEVELOPMENT_AUTH="no"
VERSION_NUMBER="3.5.0"

# Define which accessibility checker to use
# Available options: "phpally", "equalaccess_local", "equalaccess_lambda"
ACCESSIBILITY_CHECKER="equalaccess_lambda"

# NOTE: When using a lambda function with equal access,
# you need to define the following in a separate .env.local:
# EQUALACCESS_AWS_ACCESS_KEY_ID=<access_key_id>
# EQUALACCESS_AWS_SECRET_ACCESS_KEY=<secret_access_key>
# EQUALACCESS_AWS_REGION=<region (e.g. us-east-1)>
# EQUALACCESS_AWS_SERVICE=<service (e.g. execute-api)>
# EQUALACCESS_AWS_HOST=abcdefghi.execute-api.us-east-1.amazonaws.com
# EQUALACCESS_CANONICAL_URI=endpoint/generate-accessibility-report


###> symfony/messenger ###
MESSENGER_TRANSPORT_DSN=doctrine://default
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches:
- main
- 'stable/*'
- 'equal-access'

env:
REGISTRY: ghcr.io
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
Please update this file as you open PRs and make changes to the codebase. Thank you!
## [Unreleased](https://github.com/ucfopen/UDOIT/tree/dev)

## [4.0] -- In Progress

- Upgraded the React version from 16.14.0 to 18.3.1, as well as updating a lot of the React code from class-based components to functional. Changes seen in [#984](https://github.com/ucfopen/UDOIT/pull/984) (Thank you [@mbusch3](https://github.com/mbusch3) and [@nizolnier](https://github.com/nizolnier)).
- Updated UDOIT's PHP version from 8.2 to 8.4 to avoid issues pulling the latest composer image, as well as work with a php version that has active support. (Thank you, [@dmols](https://github.com/dmols) and [@panbed](https://github.com/panbed))
- Integrated IBM Equal Access scanner to act as the new default UDOIT scanner (replacing PHPAlly) while still allowing developers to choose between the two. Changes seen in [#982](https://github.com/ucfopen/UDOIT/pull/982) (Thank you, [@panbed](https://github.com/panbed) and [@evannaderi](https://github.com/evannaderi))

## [3.5.0](https://github.com/ucfopen/UDOIT/compare/3.4.0...3.5.0) - 2024-11-12

### General
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM php:8.2-fpm
FROM php:8.4.2-fpm
ARG ENVIRONMENT_TYPE

#Install dependencies and php extensions
Expand Down
62 changes: 27 additions & 35 deletions assets/js/Components/AboutModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,30 @@ import { CloseButton } from '@instructure/ui-buttons'
import AboutPage from './AboutPage'


class AboutModal extends React.Component {
constructor(props) {
super(props)
}

render() {
return (
<Modal
open={true}
size="large"
label={this.props.t('label.about')}>
<Modal.Header padding="0 medium">
<Flex>
<Flex.Item shouldGrow shouldShrink>
<Heading>{this.props.t('label.about')}</Heading>
</Flex.Item>
<Flex.Item>
<CloseButton
placement="end"
offset="small"
screenReaderLabel={this.props.t('srlabel.close')}
onClick={() => this.props.handleModal(null)}
/>
</Flex.Item>
</Flex>
</Modal.Header>
<Modal.Body padding="small medium">
<AboutPage t={this.props.t} settings={this.props.settings} />
</Modal.Body>
</Modal>
)
}
}

export default AboutModal
export default function AboutModal({ t, settings, handleModal }) {
return (
<Modal
open={true}
size="large"
label={t('label.about')}>
<Modal.Header padding="0 medium">
<Flex>
<Flex.Item shouldGrow shouldShrink>
<Heading>{t('label.about')}</Heading>
</Flex.Item>
<Flex.Item>
<CloseButton
placement="end"
offset="small"
screenReaderLabel={t('srlabel.close')}
onClick={() => handleModal(null)}
/>
</Flex.Item>
</Flex>
</Modal.Header>
<Modal.Body padding="small medium">
<AboutPage t={t} settings={settings} />
</Modal.Body>
</Modal>
)
}
208 changes: 101 additions & 107 deletions assets/js/Components/AboutPage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react'
import React, { useState, useEffect } from 'react'
import { Heading } from '@instructure/ui-heading'
import { View } from '@instructure/ui-view'
import { Text } from '@instructure/ui-text'
Expand All @@ -10,133 +10,127 @@ import * as Html from '../Services/Html'
import ReactHtmlParser from 'react-html-parser'
import Classes from '../../css/theme-overrides.css'

class AboutPage extends React.Component {
export default function AboutPage({ t, settings }) {
const [expandDetails, setExpandDetails] = useState(false)
const [issues, setIssues] = useState({"error": [], "suggestion": []})

constructor(props) {
super(props)

this.state = {
expandDetails: false
}

this.handleDetailsToggle = this.handleDetailsToggle.bind(this)
const handleDetailsToggle = () => {
setExpandDetails(!expandDetails)
}

handleDetailsToggle() {
this.setState({ expandDetails: !this.state.expandDetails })
}
useEffect(() => {
const suggestionTypes = (settings.suggestionRuleIds != null) ? settings.suggestionRuleIds : ''

render() {
const suggestionTypes = (this.props.settings.suggestionRuleIds != null) ? this.props.settings.suggestionRuleIds : ''
this.issues = {
let currentIssues = {
"error": [],
"suggestion": []
}

issueRuleIds.forEach(issue => {
if (suggestionTypes.includes(issue)) {
this.issues.suggestion.push(issue)
currentIssues.suggestion.push(issue)
} else {
this.issues.error.push(issue)
currentIssues.error.push(issue)
}
})

return (
<View as="div">
<Flex>
<Flex.Item shouldShrink shouldGrow align="start">
setIssues(currentIssues)
}, [])

return (
<View as="div">
<Flex>
<Flex.Item shouldShrink shouldGrow align="start">
<View as="div">
<Text as="p" lineHeight="default">
{ReactHtmlParser(t('about.description'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</Text>
</View>
<View as="div" margin="large 0">
<Text as="strong">{t('about.disclaimer_title')}</Text>
<Text as="p" weight="normal" lineHeight="default">
{ReactHtmlParser(t('about.disclaimer'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</Text>
</View>
</Flex.Item>
<Flex.Item size="400px" align="start" padding="small 0 0 large">
<View as="div">
{ReactHtmlParser(t('about.video_embed'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</View>
<View as="div" textAlign="center">
{ReactHtmlParser(t('about.video_link'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</View>

<View as="div" margin="large 0">
<View as="div">
<Text as="p" lineHeight="default">
{ReactHtmlParser(this.props.t('about.description'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
</Text>
<Text as="strong">{t('about.resources')}</Text>
</View>
<View as="div" margin="large 0">
<Text as="strong">{this.props.t('about.disclaimer_title')}</Text>
<Text as="p" weight="normal" lineHeight="default">
{ReactHtmlParser(this.props.t('about.disclaimer'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
</Text>
<View as="div" position="relative" textAlign="start" insetBlockStart="1vh">
<View>
{ReactHtmlParser(t('about.user_guide_link'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</View>
</View>
</Flex.Item>
<Flex.Item size="400px" align="start" padding="small 0 0 large">
</View>

<View as="div" margin="large 0">
<View as="div">
{ReactHtmlParser(this.props.t('about.video_embed'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
<Text as="strong">{t('about.policies')}</Text>
</View>
<View as="div" textAlign="center">
{ReactHtmlParser(this.props.t('about.video_link'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
<View as="div" position="relative" textAlign="start" insetBlockStart="1vh">
{ReactHtmlParser(t('about.youtube_terms'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</View>
<View as="div" position="relative" textAlign="start" insetBlockStart="1vh">
{ReactHtmlParser(t('about.google_privacy'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
</View>
</View>
</Flex.Item>
</Flex>
<View as="div" margin="medium 0" display="inline-block" width="100vw">
<ToggleDetails
summary={t('label.btn.udoit_details')}
expanded={expandDetails}
fluidWidth={true}
onToggle={handleDetailsToggle}>

<View as="div" margin="large 0">
<View as="div">
<Text as="strong">{this.props.t('about.resources')}</Text>
</View>
<View as="div" position="relative" textAlign="start" insetBlockStart="1vh">
<View>
{ReactHtmlParser(this.props.t('about.user_guide_link'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
{Object.keys(issues).map((issueType) => {
const type = issues[issueType]
return (
<View as="div" margin="small large" key={issueType}>
<View padding="x-small" margin="none">
<Heading level="h3">
{('error' === issueType) ? <IconNoLine className={Classes.error} /> : <IconInfoBorderlessLine className={Classes.suggestion} />}&nbsp;
{t(`label.plural.${issueType}`)}
</Heading><br />
</View>
{type.map((rule) => {
let showExample = false
if (!t(`rule.example.${rule}`).includes('rule.example')) {
showExample = true
}
return (
<ToggleDetails key={rule} summary={
<Heading level="h4">
{t(`rule.label.${rule}`)}
</Heading>}
>
<View as="div" margin="small 0" background="primary" padding="small" shadow="above">
{ReactHtmlParser(t(`rule.desc.${rule}`), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}
{
(showExample) &&
<View as="div">{ReactHtmlParser(t(`rule.example.${rule}`), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, settings) })}</View>
}
</View>
</ToggleDetails>
)
})}
</View>
</View>

<View as="div" margin="large 0">
<View as="div">
<Text as="strong">{this.props.t('about.policies')}</Text>
</View>
<View as="div" position="relative" textAlign="start" insetBlockStart="1vh">
{ReactHtmlParser(this.props.t('about.youtube_terms'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
</View>
<View as="div" position="relative" textAlign="start" insetBlockStart="1vh">
{ReactHtmlParser(this.props.t('about.google_privacy'), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
</View>
</View>
</Flex.Item>
</Flex>
<View as="div" margin="medium 0" display="inline-block" width="100vw">
<ToggleDetails
summary={this.props.t('label.btn.udoit_details')}
expanded={this.state.expandDetails}
fluidWidth={true}
onToggle={this.handleDetailsToggle}>

{Object.keys(this.issues).map((issueType) => {
const type = this.issues[issueType]
return (
<View as="div" margin="small large" key={issueType}>
<View padding="x-small" margin="none">
<Heading level="h3">
{('error' === issueType) ? <IconNoLine className={Classes.error} /> : <IconInfoBorderlessLine className={Classes.suggestion} />}&nbsp;
{this.props.t(`label.plural.${issueType}`)}
</Heading><br />
</View>
{type.map((rule) => {
if (!this.props.t(`rule.example.${rule}`).includes('rule.example')) {
var showExample = true
}
return (
<ToggleDetails key={rule} summary={
<Heading level="h4">
{this.props.t(`rule.label.${rule}`)}
</Heading>}
>
<View as="div" margin="small 0" background="primary" padding="small" shadow="above">
{ReactHtmlParser(this.props.t(`rule.desc.${rule}`), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}
{
(showExample) &&
<View as="div">{ReactHtmlParser(this.props.t(`rule.example.${rule}`), { preprocessNodes: (nodes) => Html.processStaticHtml(nodes, this.props.settings) })}</View>
}
</View>
</ToggleDetails>
)
})}
</View>
)
})}
</ToggleDetails>
</View>
<View as="div" textAlign="end">
<Text weight="light">{this.props.t('label.version')} {this.props.settings.versionNumber}</Text>
</View>
)
})}
</ToggleDetails>
</View>
)
}
}

export default AboutPage
<View as="div" textAlign="end">
<Text weight="light">{t('label.version')} {settings.versionNumber}</Text>
</View>
</View>
)
}
Loading
Loading